miller/pkg/bifs/arithmetic_test.go
Adam Lesperance 085e831668
The package version must match the major tag version (#1654)
* Update package version

* Update makefile targets

* Update readme packages

* Remaining old packages via rg/sd
2024-09-20 12:10:11 -04:00

90 lines
3.1 KiB
Go

package bifs
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/johnkerl/miller/v6/pkg/mlrval"
)
func TestBIF_plus_unary(t *testing.T) {
input := mlrval.FromDeferredType("123")
output := BIF_plus_unary(input)
intval, ok := output.GetIntValue()
assert.True(t, ok)
assert.Equal(t, int64(123), intval)
input = mlrval.FromDeferredType("-123.5")
output = BIF_plus_unary(input)
floatval, ok := output.GetFloatValue()
assert.True(t, ok)
assert.Equal(t, -123.5, floatval)
}
func TestBIF_minus_unary(t *testing.T) {
input := mlrval.FromDeferredType("123")
output := BIF_minus_unary(input)
intval, ok := output.GetIntValue()
assert.True(t, ok)
assert.Equal(t, int64(-123), intval)
input = mlrval.FromDeferredType("-123.5")
output = BIF_minus_unary(input)
floatval, ok := output.GetFloatValue()
assert.True(t, ok)
assert.Equal(t, 123.5, floatval)
}
func TestBIF_plus_binary(t *testing.T) {
input1 := mlrval.FromDeferredType("123")
input2 := mlrval.FromDeferredType("456")
output := BIF_plus_binary(input1, input2)
intval, ok := output.GetIntValue()
assert.True(t, ok)
assert.Equal(t, int64(579), intval)
input1 = mlrval.FromDeferredType("123.5")
input2 = mlrval.FromDeferredType("456")
output = BIF_plus_binary(input1, input2)
floatval, ok := output.GetFloatValue()
assert.True(t, ok)
assert.Equal(t, 579.5, floatval)
}
func TestBIF_plus_binary_overflow(t *testing.T) {
input1 := mlrval.FromInt(0x07ffffffffffffff)
input2 := mlrval.FromInt(0x07fffffffffffffe)
output := BIF_plus_binary(input1, input2)
intval, ok := output.GetIntValue()
assert.True(t, ok)
assert.Equal(t, int64(0x0ffffffffffffffd), intval)
input1 = mlrval.FromInt(0x7fffffffffffffff)
input2 = mlrval.FromInt(0x7ffffffffffffffe)
output = BIF_plus_binary(input1, input2)
floatval, ok := output.GetFloatValue()
assert.True(t, ok)
assert.Equal(t, 18446744073709552000.0, floatval)
}
// TODO: copy in more unit-test cases from existing regression-test data
//func BIF_minus_binary(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_times(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_divide(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_int_divide(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_dot_plus(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_dot_minus(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_dot_times(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_dot_divide(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_dot_int_divide(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_modulus(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_mod_add(input1, input2, input3 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_mod_sub(input1, input2, input3 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_mod_mul(input1, input2, input3 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_mod_exp(input1, input2, input3 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_min_binary(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_min_variadic(mlrvals []*mlrval.Mlrval) *mlrval.Mlrval
//func BIF_max_binary(input1, input2 *mlrval.Mlrval) *mlrval.Mlrval
//func BIF_max_variadic(mlrvals []*mlrval.Mlrval) *mlrval.Mlrval