83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
// 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)
|
|
}
|
|
}
|