Skip to content

Commit 9ba5094

Browse files
committed
fuzz: add custom function to fuzzer
1 parent d7fe04b commit 9ba5094

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

repl/repl.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/expr-lang/expr/test/fuzz"
1010

1111
"github.com/bettercap/readline"
12+
1213
"github.com/expr-lang/expr"
1314
"github.com/expr-lang/expr/builtin"
1415
"github.com/expr-lang/expr/debug"
@@ -29,6 +30,8 @@ func main() {
2930
for name := range env {
3031
keywords = append(keywords, name)
3132
}
33+
fn := fuzz.Func()
34+
keywords = append(keywords, "fn")
3235
home, err := os.UserHomeDir()
3336
if err != nil {
3437
panic(err)
@@ -81,7 +84,7 @@ func main() {
8184
continue
8285
}
8386

84-
program, err = expr.Compile(line, expr.Env(env))
87+
program, err = expr.Compile(line, expr.Env(env), fn)
8588
if err != nil {
8689
fmt.Printf("compile error: %s\n", err)
8790
continue

test/fuzz/fuzz_env.go

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package fuzz
22

3+
import (
4+
"fmt"
5+
6+
"github.com/expr-lang/expr"
7+
)
8+
39
func NewEnv() map[string]any {
410
return map[string]any{
511
"ok": true,
@@ -25,6 +31,12 @@ func NewEnv() map[string]any {
2531
}
2632
}
2733

34+
func Func() expr.Option {
35+
return expr.Function("fn", func(params ...any) (any, error) {
36+
return fmt.Sprintf("fn(%v)", params), nil
37+
})
38+
}
39+
2840
type Foo struct {
2941
Bar string
3042
}

test/fuzz/fuzz_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,14 @@ func FuzzExpr(f *testing.F) {
5454
}
5555

5656
env := NewEnv()
57+
fn := Func()
5758

5859
f.Fuzz(func(t *testing.T, code string) {
5960
if len(code) > 1000 {
6061
t.Skip("too long code")
6162
}
6263

63-
program, err := expr.Compile(code, expr.Env(env))
64+
program, err := expr.Compile(code, expr.Env(env), fn)
6465
if err != nil {
6566
t.Skipf("compile error: %s", err)
6667
}

0 commit comments

Comments
 (0)