(t *testing.T)
| 29 | ) |
| 30 | |
| 31 | func TestSets(t *testing.T) { |
| 32 | tests := []struct { |
| 33 | expr string |
| 34 | vars []cel.EnvOption |
| 35 | in map[string]any |
| 36 | hints map[string]uint64 |
| 37 | estimatedCost checker.CostEstimate |
| 38 | actualCost uint64 |
| 39 | }{ |
| 40 | // set containment |
| 41 | { |
| 42 | expr: `sets.contains(x, [1, 2, 3])`, |
| 43 | vars: []cel.EnvOption{cel.Variable("x", cel.ListType(cel.IntType))}, |
| 44 | in: map[string]any{"x": []int64{5, 4, 3, 2, 1}}, |
| 45 | hints: map[string]uint64{"x": 10}, |
| 46 | // min cost is input 'x' length 0, 10 for list creation, 2 for arg costs |
| 47 | // max cost is input 'x' length 10, 10 for list creation, 2 for arg costs |
| 48 | estimatedCost: checker.CostEstimate{Min: 12, Max: 42}, |
| 49 | // actual cost is 'x' length 5 * list literal length 3, 10 for list creation, 2 for arg cost |
| 50 | actualCost: 27, |
| 51 | }, |
| 52 | { |
| 53 | expr: `sets.contains(x, [1, 1, 1, 1, 1])`, |
| 54 | vars: []cel.EnvOption{cel.Variable("x", cel.ListType(cel.IntType))}, |
| 55 | in: map[string]any{"x": []int64{5, 4, 3, 2, 1}}, |
| 56 | // min cost is input 'x' length 0, 10 for list creation, 2 for arg costs |
| 57 | // max cost is effectively infinite due to missing size hint for 'x' |
| 58 | estimatedCost: checker.CostEstimate{Min: 12, Max: math.MaxUint64}, |
| 59 | // actual cost is 'x' length 5 * list literal length 5, 10 for list creation, 2 for arg cost |
| 60 | actualCost: 37, |
| 61 | }, |
| 62 | { |
| 63 | expr: `sets.contains([], [])`, |
| 64 | estimatedCost: checker.FixedCostEstimate(21), |
| 65 | actualCost: 21, |
| 66 | }, |
| 67 | { |
| 68 | expr: `sets.contains([1], [])`, |
| 69 | estimatedCost: checker.FixedCostEstimate(21), |
| 70 | actualCost: 21, |
| 71 | }, |
| 72 | { |
| 73 | expr: `sets.contains([1], [1])`, |
| 74 | estimatedCost: checker.FixedCostEstimate(22), |
| 75 | actualCost: 22, |
| 76 | }, |
| 77 | { |
| 78 | expr: `sets.contains([1], [1, 1])`, |
| 79 | estimatedCost: checker.FixedCostEstimate(23), |
| 80 | actualCost: 23, |
| 81 | }, |
| 82 | { |
| 83 | expr: `sets.contains([1, 1], [1])`, |
| 84 | estimatedCost: checker.FixedCostEstimate(23), |
| 85 | actualCost: 23, |
| 86 | }, |
| 87 | { |
| 88 | expr: `sets.contains([2, 1], [1])`, |
nothing calls this directly
no test coverage detected