11TEST(ControlFlowGraphOrderTests, test)
19 auto bb0 = BasicBlock::create(cfg);
20 auto bb1 = BasicBlock::create(cfg);
21 auto bb2 = BasicBlock::create(cfg);
22 auto bb3 = BasicBlock::create(cfg);
25 bb0->add_outedge(bb1);
26 bb0->add_outedge(bb2);
27 bb1->add_outedge(bb3);
28 bb2->add_outedge(bb3);
29 bb3->add_outedge(cfg.
exit());
32 std::vector<ControlFlowGraphNode *> po1({ cfg.
exit(), bb3, bb2, bb1, bb0, cfg.
entry() });
33 std::vector<ControlFlowGraphNode *> po2({ cfg.
exit(), bb3, bb1, bb2, bb0, cfg.
entry() });
34 EXPECT_TRUE(postorder(cfg) == po1 || postorder(cfg) == po2);
36 std::vector<ControlFlowGraphNode *> rpo1({ cfg.
entry(), bb0, bb1, bb2, bb3, cfg.
exit() });
37 std::vector<ControlFlowGraphNode *> rpo2({ cfg.
entry(), bb0, bb2, bb1, bb3, cfg.
exit() });
38 EXPECT_TRUE(reverse_postorder(cfg) == rpo1 || reverse_postorder(cfg) == rpo2);