(t *testing.T)
| 185 | } |
| 186 | |
| 187 | func TestFunctionMergeDeclarationAndDefinition(t *testing.T) { |
| 188 | idFuncDecl := Function("id", Overload("id", []*Type{TypeParamType("T")}, TypeParamType("T"), OverloadIsNonStrict())) |
| 189 | idFuncDef := Function("id", |
| 190 | Overload("id", []*Type{TypeParamType("T")}, TypeParamType("T"), OverloadIsNonStrict(), |
| 191 | UnaryBinding(func(arg ref.Val) ref.Val { |
| 192 | return arg |
| 193 | }), |
| 194 | ), |
| 195 | ) |
| 196 | env, err := NewCustomEnv(Variable("x", AnyType), idFuncDecl, idFuncDef) |
| 197 | if err != nil { |
| 198 | t.Fatalf("NewCustomEnv() failed: %v", err) |
| 199 | } |
| 200 | ast, iss := env.Compile("id(x)") |
| 201 | if iss.Err() != nil { |
| 202 | t.Fatalf("env.Compile(id(x)) failed: %v", iss.Err()) |
| 203 | } |
| 204 | prg, err := env.Program(ast) |
| 205 | if err != nil { |
| 206 | t.Fatalf("env.Program() failed: %v", err) |
| 207 | } |
| 208 | out, _, err := prg.Eval(map[string]any{"x": true}) |
| 209 | if err != nil { |
| 210 | t.Fatalf("prg.Eval(x: true) errored: %v", err) |
| 211 | } |
| 212 | if out != types.True { |
| 213 | t.Errorf("prg.Eval() yielded %v, wanted true", out) |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | func TestFunctionMergeCollision(t *testing.T) { |
| 218 | maxFunc := Function("max", |
nothing calls this directly
no test coverage detected