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  })