@@ -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