Skip to content

Commit 0c3d2a6

Browse files
committed
Add bench_call_test.go
1 parent c85bc3b commit 0c3d2a6

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

test/bench/bench_call_test.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package bench_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/expr-lang/expr"
7+
"github.com/expr-lang/expr/internal/testify/require"
8+
"github.com/expr-lang/expr/vm"
9+
)
10+
11+
type Env struct {
12+
Fn func() bool
13+
}
14+
15+
func BenchmarkCall_callTyped(b *testing.B) {
16+
code := `Fn()`
17+
18+
p, err := expr.Compile(code, expr.Env(Env{}))
19+
require.NoError(b, err)
20+
require.Equal(b, p.Bytecode[1], vm.OpCallTyped)
21+
22+
env := Env{
23+
Fn: func() bool {
24+
return true
25+
},
26+
}
27+
28+
var out any
29+
30+
b.ResetTimer()
31+
for n := 0; n < b.N; n++ {
32+
program, _ := expr.Compile(code, expr.Env(env))
33+
out, err = vm.Run(program, env)
34+
}
35+
b.StopTimer()
36+
37+
require.NoError(b, err)
38+
require.True(b, out.(bool))
39+
}
40+
41+
func BenchmarkCall_eval(b *testing.B) {
42+
code := `Fn()`
43+
44+
p, err := expr.Compile(code)
45+
require.NoError(b, err)
46+
require.Equal(b, p.Bytecode[1], vm.OpCall)
47+
48+
env := Env{
49+
Fn: func() bool {
50+
return true
51+
},
52+
}
53+
54+
var out any
55+
b.ResetTimer()
56+
for n := 0; n < b.N; n++ {
57+
out, err = expr.Eval(code, env)
58+
}
59+
b.StopTimer()
60+
61+
require.NoError(b, err)
62+
require.True(b, out.(bool))
63+
}

0 commit comments

Comments
 (0)