MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / ASSERT_OK_AND_ASSIGN

Function ASSERT_OK_AND_ASSIGN

tools/navigable_ast_test.cc:227–355  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

225
226TEST(NavigableProtoAst, ParentRelationCreateList) {
227 ASSERT_OK_AND_ASSIGN(auto parsed_expr, Parse("[123]"));
228
229 NavigableProtoAst ast = NavigableProtoAst::Build(parsed_expr.expr());
230 const NavigableProtoAstNode& root = ast.Root();
231
232 EXPECT_EQ(root.node_kind(), NodeKind::kList);
233 ASSERT_THAT(root.children(), SizeIs(1));
234 const auto* child = root.children()[0];
235
236 EXPECT_EQ(child->parent_relation(), ChildKind::kListElem);
237 EXPECT_EQ(child->node_kind(), NodeKind::kConstant);
238}
239
240TEST(NavigableProtoAst, ParentRelationComprehension) {
241 ASSERT_OK_AND_ASSIGN(auto parsed_expr, Parse("[1].all(x, x < 2)"));
242
243 NavigableProtoAst ast = NavigableProtoAst::Build(parsed_expr.expr());
244 const NavigableProtoAstNode& root = ast.Root();
245
246 EXPECT_EQ(root.node_kind(), NodeKind::kComprehension);
247 ASSERT_THAT(root.children(), SizeIs(5));
248 const auto* range = root.children()[0];
249 const auto* init = root.children()[1];
250 const auto* condition = root.children()[2];
251 const auto* step = root.children()[3];
252 const auto* finish = root.children()[4];
253
254 EXPECT_EQ(range->parent_relation(), ChildKind::kComprehensionRange);
255 EXPECT_EQ(init->parent_relation(), ChildKind::kComprehensionInit);
256 EXPECT_EQ(condition->parent_relation(), ChildKind::kComprehensionCondition);
257 EXPECT_EQ(step->parent_relation(), ChildKind::kComprehensionLoopStep);
258 EXPECT_EQ(finish->parent_relation(), ChildKind::kComprensionResult);
259}
260
261TEST(NavigableProtoAst, DescendantsPostorder) {
262 ASSERT_OK_AND_ASSIGN(auto parsed_expr, Parse("1 + (x * 3)"));
263
264 NavigableProtoAst ast = NavigableProtoAst::Build(parsed_expr.expr());
265 const NavigableProtoAstNode& root = ast.Root();
266
267 EXPECT_EQ(root.node_kind(), NodeKind::kCall);
268
269 std::vector<int> constants;
270 std::vector<NodeKind> node_kinds;
271
272 for (const NavigableProtoAstNode& node : root.DescendantsPostorder()) {
273 if (node.node_kind() == NodeKind::kConstant) {
274 constants.push_back(node.expr()->const_expr().int64_value());
275 }
276 node_kinds.push_back(node.node_kind());
277 }
278
279 EXPECT_THAT(node_kinds, ElementsAre(NodeKind::kConstant, NodeKind::kIdent,
280 NodeKind::kConstant, NodeKind::kCall,
281 NodeKind::kCall));
282 EXPECT_THAT(constants, ElementsAre(1, 3));
283}
284

Callers 5

TESTFunction · 0.70
TESTFunction · 0.50
AssertValueMethod · 0.50
TEST_PFunction · 0.50
TESTFunction · 0.50

Calls 10

node_kindMethod · 0.80
childrenMethod · 0.80
parent_relationMethod · 0.80
DescendantsPostorderMethod · 0.80
DescendantsPreorderMethod · 0.80
tree_sizeMethod · 0.80
TESTFunction · 0.70
ParseFunction · 0.50
exprMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected