Jlm
Loading...
Searching...
No Matches
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>
11
12TEST(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
73TEST(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)
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