github.com/expr-lang/expr@v1.16.9/test/pipes/pipes_test.go (about) 1 package pipes_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/expr-lang/expr/internal/testify/require" 8 9 "github.com/expr-lang/expr" 10 ) 11 12 func TestPipes(t *testing.T) { 13 env := map[string]any{ 14 "sprintf": fmt.Sprintf, 15 } 16 17 tests := []struct { 18 input string 19 want any 20 }{ 21 { 22 `-1 | abs()`, 23 1, 24 }, 25 { 26 `"%s bar %d" | sprintf("foo", -42 | abs())`, 27 "foo bar 42", 28 }, 29 { 30 `[] | first() ?? "foo"`, 31 "foo", 32 }, 33 { 34 `"a" | upper() + "B" | lower()`, 35 "ab", 36 }, 37 } 38 39 for _, test := range tests { 40 t.Run(test.input, func(t *testing.T) { 41 program, err := expr.Compile(test.input, expr.Env(env)) 42 require.NoError(t, err) 43 44 out, err := expr.Run(program, env) 45 require.NoError(t, err) 46 require.Equal(t, test.want, out) 47 }) 48 } 49 } 50 51 func TestPipes_map_filter(t *testing.T) { 52 program, err := expr.Compile(`1..9 | map(# + 1) | filter(# % 2 == 0)`) 53 require.NoError(t, err) 54 55 out, err := expr.Run(program, nil) 56 require.NoError(t, err) 57 require.Equal(t, []any{2, 4, 6, 8, 10}, out) 58 }