6 #include <gtest/gtest.h>
16 TEST(NodeTests, RemoveOutputs)
27 std::vector<std::shared_ptr<const Type>>{ valueType,
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);
95 TEST(NodeTests, RemoveInputs)
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 }));
171 TEST(NodeTests, NodeInputIteration)
181 auto & node = CreateOpNode<TestOperation>(
183 std::vector<std::shared_ptr<const Type>>(5, valueType),
184 std::vector<std::shared_ptr<const Type>>{ valueType });
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());
205 TEST(NodeTests, NodeOutputIteration)
215 auto & node = CreateOpNode<TestOperation>(
217 std::vector<std::shared_ptr<const Type>>{ valueType },
218 std::vector<std::shared_ptr<const Type>>(5, valueType));
224 for (
auto & output : node.Outputs())
226 EXPECT_EQ(&output, node.output(n++));
228 EXPECT_EQ(n, node.noutputs());
231 const Node * constNode = &node;
232 for (
auto & output : constNode->
Outputs())
234 EXPECT_EQ(&output, constNode->
output(n++));
236 EXPECT_EQ(n, constNode->
noutputs());
239 TEST(NodeTests, zeroInputOutputIteration)
248 bool enteredLoopBody =
false;
249 for ([[maybe_unused]]
auto & _ : node->Inputs())
251 enteredLoopBody =
true;
253 for ([[maybe_unused]]
auto & _ : node->Outputs())
255 enteredLoopBody =
true;
258 const Node * constNode = node;
259 for ([[maybe_unused]]
auto & _ : constNode->
Inputs())
261 enteredLoopBody =
true;
263 for ([[maybe_unused]]
auto & _ : constNode->
Outputs())
265 enteredLoopBody =
true;
268 EXPECT_FALSE(enteredLoopBody);
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);
305 EXPECT_EQ(node3->GetNodeId(), 3u);
310 EXPECT_EQ(node4->GetNodeId(), 0u);
TEST(NodeTests, RemoveOutputs)
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
OutputIteratorRange Outputs() noexcept
InputIteratorRange Inputs() noexcept
NodeOutput * output(size_t index) const noexcept
size_t noutputs() const noexcept
const std::vector< size_t > & destroyedInputIndices() const noexcept
size_t RemoveResults(const util::HashSet< size_t > &indices)
TopNodeRange TopNodes() noexcept
size_t numTopNodes() const noexcept
static SimpleNode * createNode(Region *region, const std::vector< Output * > &operands, std::vector< std::shared_ptr< const Type >> resultTypes)
static std::shared_ptr< const TestType > createValueType()
bool insert(ItemType item)
std::size_t Size() const noexcept
static void remove(Node *node)