Skip to content

Commit d8f4c25

Browse files
committed
Add fuzz_coverage_test.go
1 parent c9d4a55 commit d8f4c25

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

test/fuzz/fuzz_coverage_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package fuzz_test
2+
3+
import (
4+
_ "embed"
5+
"github.com/stretchr/testify/require"
6+
"strings"
7+
"testing"
8+
9+
"github.com/antonmedv/expr"
10+
)
11+
12+
//go:embed fuzz_corpus.txt
13+
var fuzzCorpus string
14+
15+
func TestFuzzExpr_Coverage(t *testing.T) {
16+
inputs := strings.Split(strings.TrimSpace(fuzzCorpus), "\n")
17+
18+
var env = map[string]any{
19+
"ok": true,
20+
"f64": .5,
21+
"f32": float32(.5),
22+
"i": 1,
23+
"i64": int64(1),
24+
"i32": int32(1),
25+
"array": []int{1, 2, 3, 4, 5},
26+
"list": []Foo{{"bar"}, {"baz"}},
27+
"foo": Foo{"bar"},
28+
"add": func(a, b int) int { return a + b },
29+
"div": func(a, b int) int { return a / b },
30+
"half": func(a float64) float64 { return a / 2 },
31+
"score": func(a int, x ...int) int {
32+
s := a
33+
for _, n := range x {
34+
s += n
35+
}
36+
return s
37+
},
38+
"greet": func(name string) string { return "Hello, " + name },
39+
}
40+
41+
for _, code := range inputs {
42+
t.Run(code, func(t *testing.T) {
43+
program, err := expr.Compile(code, expr.Env(env))
44+
require.NoError(t, err)
45+
46+
_, err = expr.Run(program, env)
47+
require.NoError(t, err)
48+
})
49+
}
50+
}
51+
52+
type Foo struct {
53+
Bar string
54+
}
55+
56+
func (f Foo) String() string {
57+
return "foo"
58+
}
59+
60+
func (f Foo) Qux(s string) string {
61+
return f.Bar + s
62+
}

0 commit comments

Comments
 (0)