Skip to content

Commit 288c3b9

Browse files
l46kokcopybara-github
authored andcommitted
Add cel.@block test coverage for parsed-only mode
PiperOrigin-RevId: 899267021
1 parent 63cc846 commit 288c3b9

3 files changed

Lines changed: 63 additions & 26 deletions

File tree

extensions/src/main/java/dev/cel/extensions/CelComprehensionsExtensions.java

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -118,29 +118,18 @@ public void setRuntimeOptions(CelRuntimeBuilder runtimeBuilder) {
118118
@Override
119119
public void setRuntimeOptions(
120120
CelRuntimeBuilder runtimeBuilder, RuntimeEquality runtimeEquality, CelOptions celOptions) {
121-
for (Function function : functions) {
122-
for (CelOverloadDecl overload : function.functionDecl.overloads()) {
123-
switch (overload.overloadId()) {
124-
case MAP_INSERT_OVERLOAD_MAP_MAP:
125-
runtimeBuilder.addFunctionBindings(
126-
CelFunctionBinding.from(
127-
MAP_INSERT_OVERLOAD_MAP_MAP,
128-
Map.class,
129-
Map.class,
130-
(map1, map2) -> mapInsertMap(map1, map2, runtimeEquality)));
131-
break;
132-
case MAP_INSERT_OVERLOAD_KEY_VALUE:
133-
runtimeBuilder.addFunctionBindings(
134-
CelFunctionBinding.from(
135-
MAP_INSERT_OVERLOAD_KEY_VALUE,
136-
ImmutableList.of(Map.class, Object.class, Object.class),
137-
args -> mapInsertKeyValue(args, runtimeEquality)));
138-
break;
139-
default:
140-
// Nothing to add.
141-
}
142-
}
143-
}
121+
runtimeBuilder.addFunctionBindings(
122+
CelFunctionBinding.fromOverloads(
123+
MAP_INSERT_FUNCTION,
124+
CelFunctionBinding.from(
125+
MAP_INSERT_OVERLOAD_MAP_MAP,
126+
Map.class,
127+
Map.class,
128+
(map1, map2) -> mapInsertMap(map1, map2, runtimeEquality)),
129+
CelFunctionBinding.from(
130+
MAP_INSERT_OVERLOAD_KEY_VALUE,
131+
ImmutableList.of(Map.class, Object.class, Object.class),
132+
args -> mapInsertKeyValue(args, runtimeEquality))));
144133
}
145134

146135
@Override

optimizer/src/test/java/dev/cel/optimizer/optimizers/SubexpressionOptimizerBaselineTest.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,13 @@ private static Cel setupCelEnv(CelBuilder celBuilder) {
8383
.addFunctionBindings(
8484
// This is pure, but for the purposes of excluding it as a CSE candidate, pretend that
8585
// it isn't.
86-
CelFunctionBinding.from("non_pure_custom_func_overload", Long.class, val -> val),
87-
CelFunctionBinding.from("pure_custom_func_overload", Long.class, val -> val))
86+
CelFunctionBinding.fromOverloads(
87+
"non_pure_custom_func",
88+
CelFunctionBinding.from("non_pure_custom_func_overload", Long.class, val -> val)))
89+
.addFunctionBindings(
90+
CelFunctionBinding.fromOverloads(
91+
"pure_custom_func",
92+
CelFunctionBinding.from("pure_custom_func_overload", Long.class, val -> val)))
8893
.addVar("x", SimpleType.DYN)
8994
.addVar("y", SimpleType.DYN)
9095
.addVar("opt_x", OptionalType.create(SimpleType.DYN))
@@ -153,6 +158,28 @@ public void allOptimizers_producesSameEvaluationResult(
153158
assertThat(optimizedEvalResult).isEqualTo(expectedEvalResult);
154159
}
155160

161+
@Test
162+
public void allOptimizers_producesSameEvaluationResult_parsedOnly(
163+
@TestParameter CseTestCase cseTestCase, @TestParameter CseTestOptimizer cseTestOptimizer)
164+
throws Exception {
165+
skipBaselineVerification();
166+
if (runtimeEnv == RuntimeEnv.LEGACY) {
167+
return;
168+
}
169+
CelAbstractSyntaxTree ast = runtimeEnv.cel.compile(cseTestCase.source).getAst();
170+
ImmutableMap<String, Object> inputMap =
171+
ImmutableMap.of("msg", TEST_ALL_TYPES_INPUT, "x", 5L, "y", 6L, "opt_x", Optional.of(5L));
172+
Object expectedEvalResult = runtimeEnv.cel.createProgram(ast).eval(inputMap);
173+
174+
CelAbstractSyntaxTree optimizedAst = cseTestOptimizer.newCseOptimizer(runtimeEnv).optimize(ast);
175+
CelAbstractSyntaxTree parsedOnlyOptimizedAst =
176+
CelAbstractSyntaxTree.newParsedAst(optimizedAst.getExpr(), optimizedAst.getSource());
177+
178+
Object optimizedEvalResult =
179+
runtimeEnv.cel.createProgram(parsedOnlyOptimizedAst).eval(inputMap);
180+
assertThat(optimizedEvalResult).isEqualTo(expectedEvalResult);
181+
}
182+
156183
@Test
157184
public void subexpression_unparsed() throws Exception {
158185
for (CseTestCase cseTestCase : EnumSet.allOf(CseTestCase.class)) {

optimizer/src/test/java/dev/cel/optimizer/optimizers/SubexpressionOptimizerTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,19 @@ public void block_success(@TestParameter BlockTestCase testCase) throws Exceptio
416416
assertThat(evaluatedResult).isNotNull();
417417
}
418418

419+
@Test
420+
public void block_success_parsedOnly(@TestParameter BlockTestCase testCase) throws Exception {
421+
if (runtimeEnv == RuntimeEnv.LEGACY) {
422+
return;
423+
}
424+
CelAbstractSyntaxTree ast =
425+
compileUsingInternalFunctions(testCase.source, /* parsedOnly= */ true);
426+
427+
Object evaluatedResult = runtimeEnv.celForEvaluatingBlock.createProgram(ast).eval();
428+
429+
assertThat(evaluatedResult).isNotNull();
430+
}
431+
419432
@Test
420433
@SuppressWarnings("Immutable") // Test only
421434
public void lazyEval_blockIndexNeverReferenced() throws Exception {
@@ -694,7 +707,7 @@ public void block_lazyEvaluationContainsError_cleansUpCycleState() throws Except
694707
* Converts AST containing cel.block related test functions to internal functions (e.g: cel.block
695708
* -> cel.@block)
696709
*/
697-
private CelAbstractSyntaxTree compileUsingInternalFunctions(String expression)
710+
private CelAbstractSyntaxTree compileUsingInternalFunctions(String expression, boolean parsedOnly)
698711
throws CelValidationException {
699712
CelAbstractSyntaxTree astToModify =
700713
runtimeEnv.celForEvaluatingBlock.compile(expression).getAst();
@@ -719,6 +732,14 @@ private CelAbstractSyntaxTree compileUsingInternalFunctions(String expression)
719732
indexExpr.ident().setName(internalIdentName);
720733
});
721734

735+
if (parsedOnly) {
736+
return mutableAst.toParsedAst();
737+
}
722738
return runtimeEnv.celForEvaluatingBlock.check(mutableAst.toParsedAst()).getAst();
723739
}
740+
741+
private CelAbstractSyntaxTree compileUsingInternalFunctions(String expression)
742+
throws CelValidationException {
743+
return compileUsingInternalFunctions(expression, false);
744+
}
724745
}

0 commit comments

Comments
 (0)