Skip to content

Commit 8f1e880

Browse files
committed
Add more tests for filter_map optimization
1 parent 579de74 commit 8f1e880

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

expr_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2764,7 +2764,7 @@ func TestExpr_env_types_map_error(t *testing.T) {
27642764
require.Error(t, err)
27652765
}
27662766

2767-
func TestIssue758_FilterMapIndex(t *testing.T) {
2767+
func TestIssue758_filter_map_index(t *testing.T) {
27682768
env := map[string]interface{}{}
27692769

27702770
exprStr := `

optimizer/filter_map_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,43 @@ func TestOptimize_filter_map_with_index_pointer(t *testing.T) {
7272

7373
assert.Equal(t, Dump(expected), Dump(tree.Node))
7474
}
75+
76+
func TestOptimize_filter_map_with_index_pointer_with_index_pointer_in_first_argument(t *testing.T) {
77+
tree, err := parser.Parse(`1..2 | map(map(filter([#index], true), 42))`)
78+
require.NoError(t, err)
79+
80+
err = optimizer.Optimize(&tree.Node, nil)
81+
require.NoError(t, err)
82+
83+
expected := &BuiltinNode{
84+
Name: "map",
85+
Arguments: []Node{
86+
&BinaryNode{
87+
Operator: "..",
88+
Left: &IntegerNode{Value: 1},
89+
Right: &IntegerNode{Value: 2},
90+
},
91+
&PredicateNode{
92+
Node: &BuiltinNode{
93+
Name: "filter",
94+
Arguments: []Node{
95+
&ArrayNode{
96+
Nodes: []Node{
97+
&PointerNode{Name: "index"},
98+
},
99+
},
100+
&PredicateNode{
101+
Node: &BoolNode{Value: true},
102+
},
103+
},
104+
Throws: false,
105+
Map: &IntegerNode{Value: 42},
106+
},
107+
},
108+
},
109+
Throws: false,
110+
Map: nil,
111+
}
112+
113+
assert.Equal(t, Dump(expected), Dump(tree.Node))
114+
}

0 commit comments

Comments
 (0)