miller/internal/pkg/mlrval/mlrval_get_test.go
John Kerl 7a97c9b868
Performance improvement by JIT type inference (#786)
* JIT mlrval type-interfence: mlrval package

* mlrmap refactor

* complete merge from #779

* iterating

* mlrval/format.go

* mlrval/copy.go

* bifs/arithmetic_test.go

* iterate on bifs/collections_test.go

* mlrval_cmp.go

* mlrval JSON iterate

* iterate applying mlrval refactors to dependent packages

* first clean compile in a long while on this branch

* results of first post-compile profiling

* testing

* bugfix in ofmt formatting

* bugfix in octal-supporess

* go fmt

* neaten

* regression tests all passing
2021-12-20 23:56:04 -05:00

188 lines
4.3 KiB
Go

// ================================================================
// Tests mlrval typed-value extractors
// ================================================================
package mlrval
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestGetString(t *testing.T) {
mv := FromInferredType("234")
stringval, ok := mv.GetStringValue()
assert.False(t, ok)
mv = FromDeferredType("234")
stringval, ok = mv.GetStringValue()
assert.False(t, ok)
mv = FromInferredType("234.5")
stringval, ok = mv.GetStringValue()
assert.False(t, ok)
mv = FromDeferredType("234.5")
stringval, ok = mv.GetStringValue()
assert.False(t, ok)
mv = FromInferredType("abc")
stringval, ok = mv.GetStringValue()
assert.Equal(t, "abc", stringval)
assert.True(t, ok)
mv = FromDeferredType("abc")
stringval, ok = mv.GetStringValue()
assert.Equal(t, "abc", stringval)
assert.True(t, ok)
mv = FromInferredType("")
stringval, ok = mv.GetStringValue()
assert.Equal(t, "", stringval)
assert.True(t, ok)
mv = FromDeferredType("")
stringval, ok = mv.GetStringValue()
assert.Equal(t, "", stringval)
assert.True(t, ok)
}
func TestGetIntValue(t *testing.T) {
mv := FromInferredType("123")
intval, ok := mv.GetIntValue()
assert.Equal(t, 123, intval)
assert.True(t, ok)
mv = FromDeferredType("123")
intval, ok = mv.GetIntValue()
assert.Equal(t, 123, intval)
assert.True(t, ok)
mv = FromInferredType("123.4")
intval, ok = mv.GetIntValue()
assert.False(t, ok)
mv = FromDeferredType("123.4")
intval, ok = mv.GetIntValue()
assert.False(t, ok)
mv = FromInferredType("abc")
intval, ok = mv.GetIntValue()
assert.False(t, ok)
mv = FromDeferredType("abc")
intval, ok = mv.GetIntValue()
assert.False(t, ok)
}
func TestGetFloatValue(t *testing.T) {
mv := FromInferredType("234")
floatval, ok := mv.GetFloatValue()
assert.False(t, ok)
mv = FromDeferredType("234")
floatval, ok = mv.GetFloatValue()
assert.False(t, ok)
mv = FromInferredType("234.5")
floatval, ok = mv.GetFloatValue()
assert.Equal(t, 234.5, floatval)
assert.True(t, ok)
mv = FromDeferredType("234.5")
floatval, ok = mv.GetFloatValue()
assert.Equal(t, 234.5, floatval)
assert.True(t, ok)
mv = FromInferredType("abc")
floatval, ok = mv.GetFloatValue()
assert.False(t, ok)
mv = FromDeferredType("abc")
floatval, ok = mv.GetFloatValue()
assert.False(t, ok)
}
func TestGetNumericToFloatValue(t *testing.T) {
mv := FromInferredType("234")
floatval, ok := mv.GetNumericToFloatValue()
assert.Equal(t, 234.0, floatval)
assert.True(t, ok)
mv = FromDeferredType("234")
floatval, ok = mv.GetNumericToFloatValue()
assert.Equal(t, 234.0, floatval)
assert.True(t, ok)
mv = FromInferredType("234.5")
floatval, ok = mv.GetNumericToFloatValue()
assert.Equal(t, 234.5, floatval)
assert.True(t, ok)
mv = FromDeferredType("234.5")
floatval, ok = mv.GetNumericToFloatValue()
assert.Equal(t, 234.5, floatval)
assert.True(t, ok)
mv = FromInferredType("abc")
floatval, ok = mv.GetNumericToFloatValue()
assert.False(t, ok)
mv = FromDeferredType("abc")
floatval, ok = mv.GetNumericToFloatValue()
assert.False(t, ok)
}
func TestGetBoolValue(t *testing.T) {
mv := FromInferredType("234")
boolval, ok := mv.GetBoolValue()
assert.False(t, ok)
mv = FromDeferredType("234")
boolval, ok = mv.GetBoolValue()
assert.False(t, ok)
mv = FromInferredType("abc")
boolval, ok = mv.GetBoolValue()
assert.False(t, ok)
mv = FromDeferredType("abc")
boolval, ok = mv.GetBoolValue()
assert.False(t, ok)
mv = FromInferredType("true")
boolval, ok = mv.GetBoolValue()
assert.True(t, boolval)
assert.True(t, ok)
mv = FromDeferredType("false")
boolval, ok = mv.GetBoolValue()
assert.False(t, ok, "from-data-file \"false\" should infer to string")
}
func TestGetTypeName(t *testing.T) {
mv := FromInferredType("234")
assert.Equal(t, "int", mv.GetTypeName())
mv = FromDeferredType("234")
assert.Equal(t, "int", mv.GetTypeName())
mv = FromInferredType("234.5")
assert.Equal(t, "float", mv.GetTypeName())
mv = FromDeferredType("234.5")
assert.Equal(t, "float", mv.GetTypeName())
mv = FromInferredType("abc")
assert.Equal(t, "string", mv.GetTypeName())
mv = FromDeferredType("abc")
assert.Equal(t, "string", mv.GetTypeName())
mv = FromInferredType("")
assert.Equal(t, "empty", mv.GetTypeName())
mv = FromDeferredType("")
assert.Equal(t, "empty", mv.GetTypeName())
}