6 #include <gtest/gtest.h>
12 TEST(ThetaTests, TestThetaCreation)
25 auto lv1 = theta->AddLoopVar(imp1);
26 auto lv2 = theta->AddLoopVar(imp2);
27 auto lv3 = theta->AddLoopVar(imp3);
29 lv2.post->divert_to(lv3.pre);
30 lv3.post->divert_to(lv3.pre);
31 theta->set_predicate(lv1.pre);
36 { imp1, imp2, imp3 });
39 EXPECT_EQ(jlm::rvsdg::TryGetOwnerNode<jlm::rvsdg::ThetaNode>(*lv1.output), theta);
40 EXPECT_EQ(jlm::rvsdg::TryGetOwnerNode<jlm::rvsdg::ThetaNode>(*lv2.output), theta);
41 EXPECT_EQ(jlm::rvsdg::TryGetOwnerNode<jlm::rvsdg::ThetaNode>(*lv3.output), theta);
43 EXPECT_EQ(theta->predicate(), theta->subregion()->result(0));
44 EXPECT_EQ(theta->GetLoopVars().size(), 3u);
45 EXPECT_EQ(theta->GetLoopVars()[0].post, theta->subregion()->result(1));
50 TEST(ThetaTests, TestThetaLoopVarRemoval)
64 auto lv0 = thetaNode->AddLoopVar(ctl);
65 auto lv1 = thetaNode->AddLoopVar(x);
66 auto lv2 = thetaNode->AddLoopVar(y);
67 thetaNode->set_predicate(lv0.pre);
72 thetaNode->RemoveLoopVars({ lv1 });
73 auto loopvars = thetaNode->GetLoopVars();
74 EXPECT_EQ(loopvars.size(), 2u);
75 EXPECT_EQ(loopvars[0].input, lv0.input);
76 EXPECT_EQ(loopvars[0].pre, lv0.pre);
77 EXPECT_EQ(loopvars[0].post, lv0.post);
78 EXPECT_EQ(loopvars[0].output, lv0.output);
79 EXPECT_EQ(loopvars[1].input, lv2.input);
80 EXPECT_EQ(loopvars[1].pre, lv2.pre);
81 EXPECT_EQ(loopvars[1].post, lv2.post);
82 EXPECT_EQ(loopvars[1].output, lv2.output);
static std::shared_ptr< const ControlType > Create(std::size_t nalternatives)
Instantiates control type.
static GraphExport & Create(Output &origin, std::string name)
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Region & GetRootRegion() const noexcept
static std::shared_ptr< const TestType > createValueType()
static ThetaNode * create(rvsdg::Region *parent)
TEST(ThetaConversionTests, TestUnknownBoundaries)
std::string view(const rvsdg::Region *region)