xref: /llvm-project/clang/unittests/AST/UnresolvedSetTest.cpp (revision 626c789d92bc917e7db30478e9b6d4c9b567ee17)
1 #include "clang/AST/UnresolvedSet.h"
2 #include "clang/AST/Decl.h"
3 #include "gtest/gtest.h"
4 
5 using namespace clang;
6 
7 class UnresolvedSetTest : public ::testing::Test {
8 protected:
9   // For this test we don't care about the contents of the NamedDecl,
10   // so just use a dummy struct of appropriate size and alignment.
11   struct alignas(NamedDecl) DummyDecl {
12     char contents[sizeof(NamedDecl)];
13   };
14   DummyDecl d0, d1, d2, d3;
15   NamedDecl *n0, *n1, *n2, *n3;
16   UnresolvedSet<2> set;
17 
SetUp()18   void SetUp() override {
19     n0 = reinterpret_cast<NamedDecl*>(&d0);
20     n1 = reinterpret_cast<NamedDecl*>(&d1);
21     n2 = reinterpret_cast<NamedDecl*>(&d2);
22     n3 = reinterpret_cast<NamedDecl*>(&d3);
23     set.addDecl(n0);
24     set.addDecl(n1);
25     set.addDecl(n2);
26     set.addDecl(n3);
27   }
28 };
29 
TEST_F(UnresolvedSetTest,Size)30 TEST_F(UnresolvedSetTest, Size) { EXPECT_EQ(set.size(), 4u); }
31 
TEST_F(UnresolvedSetTest,ArrayOperator)32 TEST_F(UnresolvedSetTest, ArrayOperator) {
33   EXPECT_EQ(set[0].getDecl(), n0);
34   EXPECT_EQ(set[1].getDecl(), n1);
35   EXPECT_EQ(set[2].getDecl(), n2);
36   EXPECT_EQ(set[3].getDecl(), n3);
37 }
38 
TEST_F(UnresolvedSetTest,EraseIntegerFromStart)39 TEST_F(UnresolvedSetTest, EraseIntegerFromStart) {
40   set.erase(0);
41   EXPECT_EQ(set.size(), 3u);
42   EXPECT_EQ(set[0].getDecl(), n3);
43   EXPECT_EQ(set[1].getDecl(), n1);
44   EXPECT_EQ(set[2].getDecl(), n2);
45 
46   set.erase(0);
47   EXPECT_EQ(set.size(), 2u);
48   EXPECT_EQ(set[0].getDecl(), n2);
49   EXPECT_EQ(set[1].getDecl(), n1);
50 
51   set.erase(0);
52   EXPECT_EQ(set.size(), 1u);
53   EXPECT_EQ(set[0].getDecl(), n1);
54 
55   set.erase(0);
56   EXPECT_EQ(set.size(), 0u);
57 }
58 
TEST_F(UnresolvedSetTest,EraseIntegerFromEnd)59 TEST_F(UnresolvedSetTest, EraseIntegerFromEnd) {
60   set.erase(3);
61   EXPECT_EQ(set.size(), 3u);
62   EXPECT_EQ(set[0].getDecl(), n0);
63   EXPECT_EQ(set[1].getDecl(), n1);
64   EXPECT_EQ(set[2].getDecl(), n2);
65 
66   set.erase(2);
67   EXPECT_EQ(set.size(), 2u);
68   EXPECT_EQ(set[0].getDecl(), n0);
69   EXPECT_EQ(set[1].getDecl(), n1);
70 
71   set.erase(1);
72   EXPECT_EQ(set.size(), 1u);
73   EXPECT_EQ(set[0].getDecl(), n0);
74 
75   set.erase(0);
76   EXPECT_EQ(set.size(), 0u);
77 }
78 
TEST_F(UnresolvedSetTest,EraseIteratorFromStart)79 TEST_F(UnresolvedSetTest, EraseIteratorFromStart) {
80   set.erase(set.begin());
81   EXPECT_EQ(set.size(), 3u);
82   EXPECT_EQ(set[0].getDecl(), n3);
83   EXPECT_EQ(set[1].getDecl(), n1);
84   EXPECT_EQ(set[2].getDecl(), n2);
85 
86   set.erase(set.begin());
87   EXPECT_EQ(set.size(), 2u);
88   EXPECT_EQ(set[0].getDecl(), n2);
89   EXPECT_EQ(set[1].getDecl(), n1);
90 
91   set.erase(set.begin());
92   EXPECT_EQ(set.size(), 1u);
93   EXPECT_EQ(set[0].getDecl(), n1);
94 
95   set.erase(set.begin());
96   EXPECT_EQ(set.size(), 0u);
97 }
98 
TEST_F(UnresolvedSetTest,EraseIteratorFromEnd)99 TEST_F(UnresolvedSetTest, EraseIteratorFromEnd) {
100   set.erase(--set.end());
101   EXPECT_EQ(set.size(), 3u);
102   EXPECT_EQ(set[0].getDecl(), n0);
103   EXPECT_EQ(set[1].getDecl(), n1);
104   EXPECT_EQ(set[2].getDecl(), n2);
105 
106   set.erase(--set.end());
107   EXPECT_EQ(set.size(), 2u);
108   EXPECT_EQ(set[0].getDecl(), n0);
109   EXPECT_EQ(set[1].getDecl(), n1);
110 
111   set.erase(--set.end());
112   EXPECT_EQ(set.size(), 1u);
113   EXPECT_EQ(set[0].getDecl(), n0);
114 
115   set.erase(--set.end());
116   EXPECT_EQ(set.size(), 0u);
117 }
118