| 1275 | BENCHMARK(BM_ComprehensionCpp)->Range(1, 1 << 20); |
| 1276 | |
| 1277 | void BM_MapTransformComprehension(benchmark::State& state) { |
| 1278 | ASSERT_OK_AND_ASSIGN(auto source, |
| 1279 | NewSource("map_var.transformMapEntry(k, v, {v:k})")); |
| 1280 | |
| 1281 | MacroRegistry registry; |
| 1282 | ASSERT_THAT( |
| 1283 | extensions::RegisterComprehensionsV2Macros(registry, ParserOptions()), |
| 1284 | IsOk()); |
| 1285 | |
| 1286 | ASSERT_OK_AND_ASSIGN(auto parsed_expr, |
| 1287 | EnrichedParse(*source, registry, ParserOptions())); |
| 1288 | |
| 1289 | RuntimeOptions options = GetOptions(); |
| 1290 | options.comprehension_max_iterations = 10000000; |
| 1291 | |
| 1292 | // This is a critical optimization: it allows the comprehension to accumulate |
| 1293 | // results in a mutable map instead of cloning and augmenting an unmodifiable |
| 1294 | // map on every iteration. |
| 1295 | options.enable_comprehension_mutable_map = true; |
| 1296 | |
| 1297 | ASSERT_OK_AND_ASSIGN(auto builder, |
| 1298 | CreateStandardRuntimeBuilder( |
| 1299 | internal::GetTestingDescriptorPool(), options)); |
| 1300 | |
| 1301 | ASSERT_THAT(extensions::RegisterComprehensionsV2Functions( |
| 1302 | builder.function_registry(), options), |
| 1303 | IsOk()); |
| 1304 | |
| 1305 | ASSERT_OK_AND_ASSIGN(auto runtime, std::move(builder).Build()); |
| 1306 | |
| 1307 | google::protobuf::Arena arena; |
| 1308 | Activation activation; |
| 1309 | |
| 1310 | auto map_builder = cel::NewMapValueBuilder(&arena); |
| 1311 | |
| 1312 | int len = state.range(0); |
| 1313 | map_builder->Reserve(len); |
| 1314 | for (int i = 0; i < len; i++) { |
| 1315 | ASSERT_THAT(map_builder->Put(IntValue(i), IntValue(i)), IsOk()); |
| 1316 | } |
| 1317 | |
| 1318 | activation.InsertOrAssignValue("map_var", std::move(*map_builder).Build()); |
| 1319 | |
| 1320 | ASSERT_OK_AND_ASSIGN(auto cel_expr, ProtobufRuntimeAdapter::CreateProgram( |
| 1321 | *runtime, parsed_expr.parsed_expr())); |
| 1322 | |
| 1323 | for (auto _ : state) { |
| 1324 | ASSERT_OK_AND_ASSIGN(cel::Value result, |
| 1325 | cel_expr->Evaluate(&arena, activation)); |
| 1326 | ASSERT_TRUE(InstanceOf<MapValue>(result)); |
| 1327 | ASSERT_THAT(Cast<MapValue>(result).Size(), IsOkAndHolds(len)); |
| 1328 | } |
| 1329 | } |
| 1330 | |
| 1331 | BENCHMARK(BM_MapTransformComprehension)->Range(1, 1 << 16); |
| 1332 |
nothing calls this directly
no test coverage detected