src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/go_fn_test.go (about) 1 package eval_test 2 3 import ( 4 "errors" 5 "fmt" 6 "math/big" 7 8 . "src.elv.sh/pkg/eval" 9 ) 10 11 type someOptions struct { 12 Foo string 13 Bar string 14 } 15 16 func (o *someOptions) SetDefaultOptions() { o.Bar = "default" } 17 18 type namedSlice []string 19 20 var goFnsMod = BuildNs().AddGoFns(map[string]any{ 21 "nullary": func() {}, 22 "takes-two-strings": func(fm *Frame, a, b string) { 23 fmt.Fprintf(fm.ByteOutput(), "a = %q, b = %q\n", a, b) 24 }, 25 "takes-variadic-strings": func(fm *Frame, args ...string) { 26 fmt.Fprintf(fm.ByteOutput(), "args = %q\n", args) 27 }, 28 "takes-string-and-variadic-strings": func(fm *Frame, first string, more ...string) { 29 fmt.Fprintf(fm.ByteOutput(), "first = %q, more = %q\n", first, more) 30 }, 31 "takes-int-float64": func(fm *Frame, i int, f float64) { 32 fmt.Fprintf(fm.ByteOutput(), "i = %v, f = %v\n", i, f) 33 }, 34 "takes-input": func(fm *Frame, i Inputs) { 35 i(func(x any) { 36 fmt.Fprintf(fm.ByteOutput(), "input: %v\n", x) 37 }) 38 }, 39 "takes-options": func(fm *Frame, opts someOptions) { 40 fmt.Fprintf(fm.ByteOutput(), "opts = %#v\n", opts) 41 }, 42 "takes-raw-options": func(fm *Frame, opts RawOptions) { 43 fmt.Fprintf(fm.ByteOutput(), "opts = %#v\n", opts) 44 }, 45 "returns-string": func() string { return "a string" }, 46 "returns-int": func() int { return 233 }, 47 "returns-small-big-int": func() *big.Int { return big.NewInt(233) }, 48 49 "returns-slice": func() []string { return []string{"foo", "bar"} }, 50 "returns-array": func() [2]string { return [2]string{"foo", "bar"} }, 51 "returns-named-slice-type": func() namedSlice { 52 return namedSlice{"foo", "bar"} 53 }, 54 55 "returns-non-nil-error": func() error { return errors.New("bad") }, 56 "returns-nil-error": func() error { return nil }, 57 })