// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // t_helpers_test.go package expr import ( "testing" ) // 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 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)}, // } // 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) { ctx := NewSimpleStore() ctx.SetVar("a", uint8(1)) ctx.SetVar("b", int8(2)) ctx.SetVar("f", 2.0) // force coverage ctx.SetVar("a16", uint16(1)) ctx.SetVar("b16", int16(2)) ctx.SetVar("a32", uint32(1)) ctx.SetVar("b32", int32(2)) ctx.SetVar("a64", uint64(1)) ctx.SetVar("b64", int64(2)) ctx.SetVar("f32", float32(1.0)) ctx.SetVar("f64", float64(1.0)) // force coverage ctx.GetFuncInfo("dummy") ctx.Call("dummy", map[string]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) } }