6 #include <gtest/gtest.h>
36 TEST(IntrusiveListTests, test_simple_list)
40 EXPECT_TRUE(l.
empty());
45 EXPECT_EQ(std::next(l.
begin()), l.
end());
46 EXPECT_EQ(std::prev(l.
end()).ptr(), &i2);
50 EXPECT_EQ(std::next(l.
begin()).ptr(), &i2);
51 EXPECT_EQ(std::next(l.
begin(), 2), l.
end());
52 EXPECT_EQ(std::prev(l.
end()).ptr(), &i2);
56 EXPECT_EQ(std::next(l.
begin()).ptr(), &i2);
57 EXPECT_EQ(std::next(l.
begin(), 2).ptr(), &i3);
58 EXPECT_EQ(std::next(l.
begin(), 3), l.
end());
59 EXPECT_EQ(std::prev(l.
end()).ptr(), &i3);
60 EXPECT_EQ(std::prev(l.
end(), 2).ptr(), &i2);
61 EXPECT_EQ(std::prev(l.
end(), 3).ptr(), &i1);
65 EXPECT_EQ(std::next(l.
begin()).ptr(), &i3);
66 EXPECT_EQ(std::next(l.
begin(), 2), l.
end());
67 EXPECT_EQ(std::prev(l.
end()).ptr(), &i3);
68 EXPECT_EQ(std::prev(l.
end(), 2).ptr(), &i1);
72 EXPECT_TRUE(l.
empty());
73 EXPECT_EQ(l2.
size(), 2u);
76 TEST(IntrusiveListTests, test_owner_list)
85 EXPECT_TRUE(l.
empty());
88 EXPECT_EQ(l.
begin()->p, &v2);
89 EXPECT_EQ(std::next(l.
begin()), l.
end());
90 EXPECT_EQ(std::prev(l.
end())->p, &v2);
93 EXPECT_EQ(l.
begin()->p, &v1);
94 EXPECT_EQ(std::next(l.
begin())->p, &v2);
95 EXPECT_EQ(std::next(l.
begin(), 2), l.
end());
96 EXPECT_EQ(std::prev(l.
end())->p, &v2);
99 EXPECT_EQ(l.
begin()->p, &v1);
100 EXPECT_EQ(std::next(l.
begin())->p, &v2);
101 EXPECT_EQ(std::next(l.
begin(), 2)->p, &v3);
102 EXPECT_EQ(std::next(l.
begin(), 3), l.
end());
103 EXPECT_EQ(std::prev(l.
end())->p, &v3);
104 EXPECT_EQ(std::prev(l.
end(), 2)->p, &v2);
105 EXPECT_EQ(std::prev(l.
end(), 3)->p, &v1);
112 EXPECT_EQ(l.
begin()->p, &v1);
113 EXPECT_EQ(std::next(l.
begin())->p, &v3);
114 EXPECT_EQ(std::next(l.
begin(), 2), l.
end());
115 EXPECT_EQ(std::prev(l.
end())->p, &v3);
116 EXPECT_EQ(std::prev(l.
end(), 2)->p, &v1);
126 EXPECT_EQ(l.
begin()->p, &v3);
127 EXPECT_EQ(std::next(l.
begin()), l.
end());
128 EXPECT_EQ(std::prev(l.
end())->p, &v3);
132 EXPECT_EQ(l.
size(), 0u);
133 EXPECT_EQ(l2.
size(), 1u);
jlm::util::OwnerIntrusiveList< MyItem, MyItem::accessor > my_owner_list
TEST(IntrusiveListTests, test_simple_list)
jlm::util::IntrusiveList< MyItem, MyItem::accessor > my_list
ElementType * ptr() const noexcept
bool empty() const noexcept
void erase(ElementType *element) noexcept
void splice(Iterator position, IntrusiveList &other) noexcept
size_type size() const noexcept
Iterator insert(Iterator i, ElementType *element) noexcept
Iterator begin() noexcept
void push_back(ElementType *element) noexcept
Iterator begin() noexcept
void splice(Iterator position, OwnerIntrusiveList &other) noexcept
std::unique_ptr< ElementType > unlink(Iterator i) noexcept
void erase(ElementType *element) noexcept
bool empty() const noexcept
Iterator insert(Iterator i, std::unique_ptr< ElementType > element) noexcept
void push_back(std::unique_ptr< ElementType > element) noexcept
size_type size() const noexcept
struct MyItem::@0 nullptr
jlm::util::IntrusiveListAccessor< MyItem, &MyItem::anchor > accessor
jlm::util::IntrusiveListAnchor< MyItem > anchor