Skip to content

Commit 5c4a60d

Browse files
committed
Update bench
1 parent 7df0cda commit 5c4a60d

File tree

1 file changed

+73
-16
lines changed

1 file changed

+73
-16
lines changed

bench_test.go

Lines changed: 73 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,92 @@ import (
66
"github.com/antonmedv/expr"
77
)
88

9-
type segment struct {
9+
type Segment struct {
1010
Origin string
1111
}
12-
type passengers struct {
12+
type Passengers struct {
1313
Adults int
1414
}
15-
type request struct {
16-
Segments []*segment
17-
Passengers *passengers
15+
type Env struct {
16+
Segments []Segment
17+
Passengers Passengers
1818
Marker string
1919
}
2020

21-
func Benchmark_expr(b *testing.B) {
22-
r := &request{
23-
Segments: []*segment{
24-
{Origin: "MOW"},
25-
},
26-
Passengers: &passengers{
27-
Adults: 2,
28-
},
29-
Marker: "test",
21+
func (e *Env) First(s []Segment) string {
22+
return s[0].Origin
23+
}
24+
25+
var env = Env{
26+
Segments: []Segment{
27+
{Origin: "LED"},
28+
{Origin: "HKT"},
29+
},
30+
Passengers: Passengers{
31+
Adults: 2,
32+
},
33+
Marker: "test",
34+
}
35+
36+
func Benchmark_struct(b *testing.B) {
37+
program, err := expr.Parse(
38+
`Segments[0].Origin == "LED" && Passengers.Adults == 2 && Marker == "test"`,
39+
expr.Env(Env{}),
40+
)
41+
if err != nil {
42+
b.Fatal(err)
43+
}
44+
out, err := expr.Run(program, env)
45+
if err != nil {
46+
panic(err)
47+
}
48+
if !out.(bool) {
49+
panic("unexpected result")
50+
}
51+
52+
for n := 0; n < b.N; n++ {
53+
expr.Run(program, env)
54+
}
55+
}
56+
57+
func Benchmark_map(b *testing.B) {
58+
env := map[string]interface{}{
59+
"segments": env.Segments,
60+
"passengers": env.Passengers,
61+
"marker": env.Marker,
3062
}
3163

32-
script, err := expr.Parse(`Segments[0].Origin == "MOW" && Passengers.Adults == 2 && Marker == "test"`)
64+
program, err := expr.Parse(`segments[0].Origin == "LED" && passengers.Adults == 2 && marker == "test"`)
3365
if err != nil {
3466
b.Fatal(err)
3567
}
68+
out, err := expr.Run(program, env)
69+
if err != nil {
70+
panic(err)
71+
}
72+
if !out.(bool) {
73+
panic("unexpected result")
74+
}
75+
76+
for n := 0; n < b.N; n++ {
77+
expr.Run(program, env)
78+
}
79+
}
80+
81+
func Benchmark_func(b *testing.B) {
82+
program, err := expr.Parse(`First(Segments)`, expr.Env(&Env{}))
83+
if err != nil {
84+
b.Fatal(err)
85+
}
86+
out, err := expr.Run(program, &env)
87+
if err != nil {
88+
panic(err)
89+
}
90+
if out.(string) != "LED" {
91+
panic("unexpected result")
92+
}
3693

3794
for n := 0; n < b.N; n++ {
38-
expr.Run(script, r)
95+
expr.Run(program, &env)
3996
}
4097
}

0 commit comments

Comments
 (0)