6 #include <gtest/gtest.h>
12 TEST(DotWriterTests, TestWriteGraphs)
29 auto & rootGraph = writer.
GetGraph(0);
31 rootGraph.GetProgramObject(),
33 EXPECT_EQ(rootGraph.NumNodes(), 1u);
34 EXPECT_EQ(rootGraph.NumResultNodes(), 1u);
35 auto & lambdaNode = *assertedCast<InOutNode>(&rootGraph.GetNode(0));
39 EXPECT_EQ(lambdaNode.NumInputPorts(), 0u);
40 EXPECT_EQ(lambdaNode.NumOutputPorts(), 1u);
41 EXPECT_EQ(lambdaNode.NumSubgraphs(), 1u);
43 auto & fctBody = lambdaNode.GetSubgraph(0);
44 EXPECT_EQ(fctBody.NumArgumentNodes(), 6u);
45 EXPECT_EQ(fctBody.NumResultNodes(), 2u);
48 auto & connections = fctBody.GetArgumentNode(1).GetConnections();
49 EXPECT_EQ(connections.size(), 1u);
50 auto & gammaNode = *assertedCast<InOutNode>(&connections[0]->GetTo().GetNode());
52 EXPECT_EQ(gammaNode.NumInputPorts(), 5u);
53 EXPECT_EQ(gammaNode.NumOutputPorts(), 2u);
54 EXPECT_EQ(gammaNode.NumSubgraphs(), 2u);
57 auto & argument = gammaNode.GetSubgraph(0).GetArgumentNode(1);
58 auto & input = gammaNode.GetInputPort(1);
59 EXPECT_EQ(argument.GetAttributeGraphElement(
"input"), &input);
61 EXPECT_EQ(argument.GetLabel(),
"a1 <- i1");
62 auto & result = argument.GetConnections().front()->GetOtherEnd(argument);
63 EXPECT_EQ(result.GetLabel(),
"r0 -> o0");
66 auto & stateConnections = fctBody.GetArgumentNode(5).GetConnections();
67 EXPECT_EQ(stateConnections.size(), 1u);
68 EXPECT_EQ(stateConnections.front()->GetAttributeString(
"color"),
"#FF0000");
71 auto & lambdaConnections = lambdaNode.GetOutputPort(0).GetConnections();
72 EXPECT_EQ(lambdaConnections.size(), 1u);
73 auto & graphExport = lambdaConnections.front()->GetTo().GetNode();
74 EXPECT_EQ(graphExport.GetLabel(),
"export[f]");
77 TEST(DotWriterTests, TestWriteGraph)
92 auto & rootGraph = writer.
GetGraph(0);
94 rootGraph.GetProgramObject(),
96 EXPECT_EQ(rootGraph.NumNodes(), 1u);
97 EXPECT_EQ(rootGraph.NumResultNodes(), 1u);
98 auto & lambdaNode = *assertedCast<InOutNode>(&rootGraph.GetNode(0));
102 EXPECT_EQ(lambdaNode.NumInputPorts(), 0u);
103 EXPECT_EQ(lambdaNode.NumOutputPorts(), 1u);
104 EXPECT_EQ(lambdaNode.NumSubgraphs(), 0u);
107 auto & lambdaConnections = lambdaNode.GetOutputPort(0).GetConnections();
108 EXPECT_EQ(lambdaConnections.size(), 1u);
109 auto & graphExport = lambdaConnections.front()->GetTo().GetNode();
110 EXPECT_EQ(graphExport.GetLabel(),
"export[f]");
113 TEST(DotWriterTests, TestTypeGraph)
134 auto & typeGraph = writer.
GetGraph(0);
135 EXPECT_EQ(typeGraph.GetProgramObject(), 0u);
138 [[maybe_unused]]
auto & ptrNode = typeGraph.GetFromProgramObject<
Node>(*ptrType);
139 [[maybe_unused]]
auto & bit32Node = typeGraph.GetFromProgramObject<
Node>(*ptrType);
140 auto & memNode = typeGraph.GetFromProgramObject<
Node>(*memType);
145 EXPECT_EQ(fGraph.GetArgumentNode(5).GetAttributeGraphElement(
"type"), &memNode);
TEST(DotWriterTests, TestWriteGraphs)
jlm::rvsdg::LambdaNode * lambda
static std::shared_ptr< const MemoryStateType > Create()
static std::shared_ptr< const PointerType > Create()
const rvsdg::Graph & graph()
static std::shared_ptr< const BitType > Create(std::size_t nbits)
Creates bit type of specified width.
util::graph::Graph & WriteGraphs(util::graph::Writer &writer, const Region ®ion, bool emitTypeGraph)
util::graph::Graph & WriteGraph(util::graph::Writer &writer, const Region ®ion)
Region & GetRootRegion() const noexcept
rvsdg::Region * subregion() const noexcept
std::string DebugString() const override
GraphElement * GetElementFromProgramObject(uintptr_t object) const
void outputAllGraphs(std::ostream &out, OutputFormat format)
Graph & GetGraph(size_t index)
Global memory state passed between functions.