diff --git a/t_helpers_test.go b/t_helpers_test.go index 4f8deae..53bd1ee 100644 --- a/t_helpers_test.go +++ b/t_helpers_test.go @@ -5,51 +5,55 @@ package expr import ( + "fmt" + "testing" + + "git.portale-stac.it/go-pkg/expr/kern" ) -// TODO The new function param model does not allow this kind of test -// ------------------------------------------------------------------ -// func subtract(ctx ExprContext, name string, args map[string]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 subtract(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) { + if len(args) != 2 { + err = fmt.Errorf("%s(): requires exactly two arguments", name) + return + } + x, xok := args["a"].(int64) + y, yok := args["b"].(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) { +func TestEvalStringA(t *testing.T) { -// source := `a + b * subtract(4,2)` -// args := []Arg{ -// {"a", uint8(1)}, -// {"b", int8(2)}, -// {"subtract", FuncTemplate2(subtract)}, -// // force 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)}, -// } + source := `a + b * subtract(4,2)` + args := []Arg{ + {"a", uint8(1)}, + {"b", int8(2)}, + {"subtract", kern.FuncTemplate(subtract)}, + // force 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)}, + {"string", "text"}, + {"bool", true}, + } -// 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) -// } -// } + 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) + } +} func TestEvalString(t *testing.T) {