Jlm
InputTests.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2025 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
8 #include <jlm/rvsdg/graph.hpp>
10 #include <jlm/rvsdg/TestType.hpp>
11 
12 TEST(InputTests, TestInputIterator)
13 {
14  using namespace jlm::rvsdg;
15 
16  // Arrange
17  auto valueType = TestType::createValueType();
18 
19  Graph rvsdg;
20  auto & rootRegion = rvsdg.GetRootRegion();
21  auto i = &jlm::rvsdg::GraphImport::Create(rvsdg, valueType, "i");
22 
23  auto & node = CreateOpNode<TestOperation>(
24  { i, i, i, i, i },
25  std::vector<std::shared_ptr<const Type>>(5, valueType),
26  std::vector<std::shared_ptr<const Type>>{ valueType });
27 
28  GraphExport::Create(*node.output(0), "x0");
29  GraphExport::Create(*node.output(0), "x1");
30  GraphExport::Create(*node.output(0), "x2");
31 
32  // Act & Assert
33  auto nodeIt = Input::Iterator(node.input(0));
34  EXPECT_EQ(nodeIt.GetInput(), node.input(0));
35  EXPECT_EQ(nodeIt->index(), node.input(0)->index());
36  EXPECT_EQ((*nodeIt).index(), node.input(0)->index());
37  EXPECT_EQ(nodeIt, Input::Iterator(node.input(0)));
38  EXPECT_NE(nodeIt, Input::Iterator(node.input(1)));
39 
40  nodeIt++;
41  EXPECT_EQ(nodeIt.GetInput(), node.input(1));
42 
43  ++nodeIt;
44  EXPECT_EQ(nodeIt.GetInput(), node.input(2));
45 
46  ++nodeIt;
47  ++nodeIt;
48  EXPECT_EQ(nodeIt.GetInput(), node.input(4));
49 
50  ++nodeIt;
51  EXPECT_EQ(nodeIt.GetInput(), nullptr);
52 
53  auto regionIt = Input::Iterator(rootRegion.result(0));
54  EXPECT_EQ(regionIt.GetInput(), rootRegion.result(0));
55  EXPECT_EQ(regionIt->index(), rootRegion.result(0)->index());
56  EXPECT_EQ((*regionIt).index(), rootRegion.result(0)->index());
57  EXPECT_EQ(regionIt, Input::Iterator(rootRegion.result(0)));
58  EXPECT_NE(regionIt, Input::Iterator(rootRegion.result(1)));
59 
60  regionIt++;
61  regionIt++;
62  EXPECT_EQ(regionIt.GetInput(), rootRegion.result(2));
63 
64  regionIt++;
65  EXPECT_EQ(regionIt.GetInput(), nullptr);
66 
67  auto it = Input::Iterator(nullptr);
68  it++;
69  ++it;
70  EXPECT_EQ(it.GetInput(), nullptr);
71 }
72 
73 TEST(InputTests, TestInputConstIterator)
74 {
75  using namespace jlm::rvsdg;
76 
77  // Arrange
78  auto valueType = TestType::createValueType();
79 
80  Graph rvsdg;
81  auto & rootRegion = rvsdg.GetRootRegion();
82  auto i = &jlm::rvsdg::GraphImport::Create(rvsdg, valueType, "i");
83 
84  auto & node = CreateOpNode<TestOperation>(
85  { i, i, i, i, i },
86  std::vector<std::shared_ptr<const Type>>(5, valueType),
87  std::vector<std::shared_ptr<const Type>>{ valueType });
88 
89  GraphExport::Create(*node.output(0), "x0");
90  GraphExport::Create(*node.output(0), "x1");
91  GraphExport::Create(*node.output(0), "x2");
92 
93  // Act & Assert
94  auto nodeIt = Input::ConstIterator(node.input(0));
95  EXPECT_EQ(nodeIt.GetInput(), node.input(0));
96  EXPECT_EQ(nodeIt->index(), node.input(0)->index());
97  EXPECT_EQ((*nodeIt).index(), node.input(0)->index());
98  EXPECT_EQ(nodeIt, Input::ConstIterator(node.input(0)));
99  EXPECT_NE(nodeIt, Input::ConstIterator(node.input(1)));
100 
101  nodeIt++;
102  EXPECT_EQ(nodeIt.GetInput(), node.input(1));
103 
104  ++nodeIt;
105  EXPECT_EQ(nodeIt.GetInput(), node.input(2));
106 
107  ++nodeIt;
108  ++nodeIt;
109  EXPECT_EQ(nodeIt.GetInput(), node.input(4));
110 
111  ++nodeIt;
112  EXPECT_EQ(nodeIt.GetInput(), nullptr);
113 
114  auto regionIt = Input::ConstIterator(rootRegion.result(0));
115  EXPECT_EQ(regionIt.GetInput(), rootRegion.result(0));
116  EXPECT_EQ(regionIt->index(), rootRegion.result(0)->index());
117  EXPECT_EQ((*regionIt).index(), rootRegion.result(0)->index());
118  EXPECT_EQ(regionIt, Input::ConstIterator(rootRegion.result(0)));
119  EXPECT_NE(regionIt, Input::ConstIterator(rootRegion.result(1)));
120 
121  regionIt++;
122  regionIt++;
123  EXPECT_EQ(regionIt.GetInput(), rootRegion.result(2));
124 
125  regionIt++;
126  EXPECT_EQ(regionIt.GetInput(), nullptr);
127 
128  auto it = Input::ConstIterator(nullptr);
129  it++;
130  ++it;
131  EXPECT_EQ(it.GetInput(), nullptr);
132 }
TEST(InputTests, TestInputIterator)
Definition: InputTests.cpp:12
static GraphExport & Create(Output &origin, std::string name)
Definition: graph.cpp:62
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Definition: graph.cpp:36
Region & GetRootRegion() const noexcept
Definition: graph.hpp:99
static std::shared_ptr< const TestType > createValueType()
Definition: TestType.cpp:67