helpers_test.go: tests on the helper functions

This commit is contained in:
Celestino Amoroso 2024-03-28 06:33:14 +01:00
parent 6d8c6f5154
commit 27f53db0f4

80
helpers_test.go Normal file
View File

@ -0,0 +1,80 @@
// helpers_test.go
package expr
import (
"fmt"
"testing"
)
func subtract(ctx exprContext, name string, args []any) (result any, err error) {
if len(args) != 2 {
err = fmt.Errorf("%s(): requires exactly two arguments", name)
return
}
x, xok := args[0].(int64)
y, yok := args[1].(int64)
if xok && yok {
result = x - y
} else {
err = fmt.Errorf("expected integer (int64) arguments, got %T and %T values", x, y)
}
return
}
func TestEvalStringA(t *testing.T) {
source := `a + b * subtract(4,2)`
args := []EvalArg{
{"a", uint8(1)},
{"b", int8(2)},
{"subtract", FuncTemplate(subtract)},
// enforce coverage
{"a16", uint16(1)},
{"b16", int16(2)},
{"a32", uint32(1)},
{"b32", int32(2)},
{"a64", uint64(1)},
{"b64", int64(2)},
{"f32", float32(1.0)},
{"f64", float64(1.0)},
}
wantResult := int64(5)
gotResult, gotErr := EvalStringA(source, args...)
if value, ok := gotResult.(int64); ok && value != wantResult {
t.Errorf("Source %q got %v, want %v", source, gotResult, wantResult)
t.Errorf("Error: %v", gotErr)
}
fmt.Println("Hello World!")
}
func TestEvalString(t *testing.T) {
ctx := NewSimpleVarStore()
ctx.SetValue("a", uint8(1))
ctx.SetValue("b", int8(2))
ctx.SetValue("f", 2.0)
// enforce coverage
ctx.SetValue("a16", uint16(1))
ctx.SetValue("b16", int16(2))
ctx.SetValue("a32", uint32(1))
ctx.SetValue("b32", int32(2))
ctx.SetValue("a64", uint64(1))
ctx.SetValue("b64", int64(2))
ctx.SetValue("f32", float32(1.0))
ctx.SetValue("f64", float64(1.0))
// enforce coverage
ctx.GetFuncInfo("dummy")
ctx.Call("dummy", []any{})
source := `a + b * f`
wantResult := float64(5)
gotResult, gotErr := EvalString(ctx, source)
if value, ok := gotResult.(float64); ok && value != wantResult {
t.Errorf("Source %q got %v, want %v", source, gotResult, wantResult)
t.Errorf("Error: %v", gotErr)
}
fmt.Println("Hello World!")
}