16TEST(NodeTests, RemoveOutputs)
21 const auto valueType = TestType::createValueType();
24 auto node = TestOperation::createNode(
27 std::vector<std::shared_ptr<const Type>>{ valueType,
38 auto & x1 = GraphExport::Create(*node->output(1),
"x1");
39 auto & x2 = GraphExport::Create(*node->output(2),
"x2");
40 auto & x3 = GraphExport::Create(*node->output(3),
"x3");
41 auto & x4 = GraphExport::Create(*node->output(4),
"x4");
42 auto & x5 = GraphExport::Create(*node->output(5),
"x5");
43 auto & x6 = GraphExport::Create(*node->output(6),
"x6");
44 auto & x7 = GraphExport::Create(*node->output(7),
"x7");
45 auto & x9 = GraphExport::Create(*node->output(9),
"x9");
49 size_t numRemovedOutputs = node->RemoveOutputs({ 0, 2, 4, 6, 8 });
52 EXPECT_EQ(numRemovedOutputs, 2u);
53 EXPECT_EQ(node->noutputs(), 8u);
54 EXPECT_EQ(x1.origin()->index(), 0u);
55 EXPECT_EQ(x2.origin()->index(), 1u);
56 EXPECT_EQ(x3.origin()->index(), 2u);
57 EXPECT_EQ(x4.origin()->index(), 3u);
58 EXPECT_EQ(x5.origin()->index(), 4u);
59 EXPECT_EQ(x6.origin()->index(), 5u);
60 EXPECT_EQ(x7.origin()->index(), 6u);
61 EXPECT_EQ(x9.origin()->index(), 7u);
67 numRemovedOutputs = node->RemoveOutputs({ 0, 2, 4, 6 });
68 EXPECT_EQ(numRemovedOutputs, 4u);
69 EXPECT_EQ(node->noutputs(), 4u);
70 EXPECT_EQ(node->output(0)->index(), 0u);
71 EXPECT_EQ(node->output(1)->index(), 1u);
72 EXPECT_EQ(node->output(2)->index(), 2u);
73 EXPECT_EQ(node->output(3)->index(), 3u);
76 numRemovedOutputs = node->RemoveOutputs({});
77 EXPECT_EQ(numRemovedOutputs, 0u);
78 EXPECT_EQ(node->noutputs(), 4u);
79 EXPECT_EQ(node->output(0)->index(), 0u);
80 EXPECT_EQ(node->output(1)->index(), 1u);
81 EXPECT_EQ(node->output(2)->index(), 2u);
82 EXPECT_EQ(node->output(3)->index(), 3u);
85 numRemovedOutputs = node->RemoveOutputs({ 15 });
86 EXPECT_EQ(numRemovedOutputs, 0u);
87 EXPECT_EQ(node->noutputs(), 4u);
90 numRemovedOutputs = node->RemoveOutputs({ 0, 1, 2, 3 });
91 EXPECT_EQ(numRemovedOutputs, 4u);
92 EXPECT_EQ(node->noutputs(), 0u);
95TEST(NodeTests, RemoveInputs)
102 const auto valueType = TestType::createValueType();
104 auto i0 = &GraphImport::Create(rvsdg, valueType,
"i0");
105 auto i1 = &GraphImport::Create(rvsdg, valueType,
"i1");
106 auto i2 = &GraphImport::Create(rvsdg, valueType,
"i2");
107 auto i3 = &GraphImport::Create(rvsdg, valueType,
"i3");
108 auto i4 = &GraphImport::Create(rvsdg, valueType,
"i4");
109 auto i5 = &GraphImport::Create(rvsdg, valueType,
"i5");
110 auto i6 = &GraphImport::Create(rvsdg, valueType,
"i6");
111 auto i7 = &GraphImport::Create(rvsdg, valueType,
"i7");
112 auto i8 = &GraphImport::Create(rvsdg, valueType,
"i8");
113 auto i9 = &GraphImport::Create(rvsdg, valueType,
"i9");
115 auto node = TestOperation::createNode(
117 { i0, i1, i2, i3, i4, i5, i6, i7, i8, i9 },
124 size_t numRemovedInputs = node->RemoveInputs({ 0, 2, 4, 6, 8 });
125 EXPECT_EQ(numRemovedInputs, 5u);
126 EXPECT_EQ(node->ninputs(), 5u);
127 EXPECT_EQ(node->input(0)->origin(), i1);
128 EXPECT_EQ(node->input(1)->origin(), i3);
129 EXPECT_EQ(node->input(2)->origin(), i5);
130 EXPECT_EQ(node->input(3)->origin(), i7);
131 EXPECT_EQ(node->input(4)->origin(), i9);
132 EXPECT_EQ(i0->nusers(), 0u);
133 EXPECT_EQ(i2->nusers(), 0u);
134 EXPECT_EQ(i4->nusers(), 0u);
135 EXPECT_EQ(i6->nusers(), 0u);
136 EXPECT_EQ(i8->nusers(), 0u);
141 numRemovedInputs = node->RemoveInputs({});
142 EXPECT_EQ(numRemovedInputs, 0u);
143 EXPECT_EQ(node->ninputs(), 5u);
147 numRemovedInputs = node->RemoveInputs({ 15 });
148 EXPECT_EQ(numRemovedInputs, 0u);
149 EXPECT_EQ(node->ninputs(), 5u);
153 numRemovedInputs = node->RemoveInputs({ 0, 1, 2, 3, 4 });
154 EXPECT_EQ(numRemovedInputs, 5u);
155 EXPECT_EQ(node->ninputs(), 0u);
156 EXPECT_EQ(i1->nusers(), 0u);
157 EXPECT_EQ(i3->nusers(), 0u);
158 EXPECT_EQ(i5->nusers(), 0u);
159 EXPECT_EQ(i7->nusers(), 0u);
160 EXPECT_EQ(i9->nusers(), 0u);
164 std::vector<size_t>({ 0, 2, 4, 6, 8, 0, 1, 2, 3, 4 }));
171TEST(NodeTests, NodeInputIteration)
176 const auto valueType = TestType::createValueType();
181 auto & node = CreateOpNode<TestOperation>(
183 std::vector<std::shared_ptr<const Type>>(5, valueType),
184 std::vector<std::shared_ptr<const Type>>{ valueType });
186 GraphExport::Create(*node.output(0),
"x0");
190 for (
auto & input : node.Inputs())
192 EXPECT_EQ(&input, node.input(n++));
194 EXPECT_EQ(n, node.ninputs());
197 const Node * constNode = &node;
198 for (
auto & input : constNode->
Inputs())
200 EXPECT_EQ(&input, node.input(n++));
202 EXPECT_EQ(n, node.ninputs());
280 auto node0 = TestOperation::createNode(&rvsdg1.
GetRootRegion(), {}, {});
281 auto node1 = TestOperation::createNode(&rvsdg1.
GetRootRegion(), {}, {});
282 auto node2 = TestOperation::createNode(&rvsdg1.
GetRootRegion(), {}, {});
284 NodeIds.
insert(node0->GetNodeId());
285 NodeIds.
insert(node1->GetNodeId());
286 NodeIds.
insert(node2->GetNodeId());
289 EXPECT_EQ(NodeIds.
Size(), 3u);
293 EXPECT_EQ(node0->GetNodeId(), 0u);
294 EXPECT_EQ(node1->GetNodeId(), 1u);
295 EXPECT_EQ(node2->GetNodeId(), 2u);
299 EXPECT_EQ(node0->GetNodeId(), 0u);
300 EXPECT_EQ(node2->GetNodeId(), 2u);
304 auto node3 = TestOperation::createNode(&rvsdg1.
GetRootRegion(), {}, {});
305 EXPECT_EQ(node3->GetNodeId(), 3u);
309 auto node4 = TestOperation::createNode(&rvsdg2.
GetRootRegion(), {}, {});
310 EXPECT_EQ(node4->GetNodeId(), 0u);