xref: /llvm-project/clang/unittests/AST/UnresolvedSetTest.cpp (revision 626c789d92bc917e7db30478e9b6d4c9b567ee17)
14ade8b7eSJohn Brawn #include "clang/AST/UnresolvedSet.h"
2*626c789dSJohn Brawn #include "clang/AST/Decl.h"
34ade8b7eSJohn Brawn #include "gtest/gtest.h"
44ade8b7eSJohn Brawn 
54ade8b7eSJohn Brawn using namespace clang;
64ade8b7eSJohn Brawn 
74ade8b7eSJohn Brawn class UnresolvedSetTest : public ::testing::Test {
84ade8b7eSJohn Brawn protected:
9*626c789dSJohn Brawn   // For this test we don't care about the contents of the NamedDecl,
10*626c789dSJohn Brawn   // so just use a dummy struct of appropriate size and alignment.
11*626c789dSJohn Brawn   struct alignas(NamedDecl) DummyDecl {
12*626c789dSJohn Brawn     char contents[sizeof(NamedDecl)];
13*626c789dSJohn Brawn   };
14*626c789dSJohn Brawn   DummyDecl d0, d1, d2, d3;
15*626c789dSJohn Brawn   NamedDecl *n0, *n1, *n2, *n3;
164ade8b7eSJohn Brawn   UnresolvedSet<2> set;
174ade8b7eSJohn Brawn 
SetUp()184ade8b7eSJohn Brawn   void SetUp() override {
19*626c789dSJohn Brawn     n0 = reinterpret_cast<NamedDecl*>(&d0);
20*626c789dSJohn Brawn     n1 = reinterpret_cast<NamedDecl*>(&d1);
21*626c789dSJohn Brawn     n2 = reinterpret_cast<NamedDecl*>(&d2);
22*626c789dSJohn Brawn     n3 = reinterpret_cast<NamedDecl*>(&d3);
23*626c789dSJohn Brawn     set.addDecl(n0);
24*626c789dSJohn Brawn     set.addDecl(n1);
25*626c789dSJohn Brawn     set.addDecl(n2);
26*626c789dSJohn Brawn     set.addDecl(n3);
274ade8b7eSJohn Brawn   }
284ade8b7eSJohn Brawn };
294ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,Size)304ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, Size) { EXPECT_EQ(set.size(), 4u); }
314ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,ArrayOperator)324ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, ArrayOperator) {
33*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
34*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
35*626c789dSJohn Brawn   EXPECT_EQ(set[2].getDecl(), n2);
36*626c789dSJohn Brawn   EXPECT_EQ(set[3].getDecl(), n3);
374ade8b7eSJohn Brawn }
384ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,EraseIntegerFromStart)394ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, EraseIntegerFromStart) {
404ade8b7eSJohn Brawn   set.erase(0);
414ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 3u);
42*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n3);
43*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
44*626c789dSJohn Brawn   EXPECT_EQ(set[2].getDecl(), n2);
454ade8b7eSJohn Brawn 
464ade8b7eSJohn Brawn   set.erase(0);
474ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 2u);
48*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n2);
49*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
504ade8b7eSJohn Brawn 
514ade8b7eSJohn Brawn   set.erase(0);
524ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 1u);
53*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n1);
544ade8b7eSJohn Brawn 
554ade8b7eSJohn Brawn   set.erase(0);
564ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 0u);
574ade8b7eSJohn Brawn }
584ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,EraseIntegerFromEnd)594ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, EraseIntegerFromEnd) {
604ade8b7eSJohn Brawn   set.erase(3);
614ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 3u);
62*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
63*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
64*626c789dSJohn Brawn   EXPECT_EQ(set[2].getDecl(), n2);
654ade8b7eSJohn Brawn 
664ade8b7eSJohn Brawn   set.erase(2);
674ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 2u);
68*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
69*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
704ade8b7eSJohn Brawn 
714ade8b7eSJohn Brawn   set.erase(1);
724ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 1u);
73*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
744ade8b7eSJohn Brawn 
754ade8b7eSJohn Brawn   set.erase(0);
764ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 0u);
774ade8b7eSJohn Brawn }
784ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,EraseIteratorFromStart)794ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, EraseIteratorFromStart) {
804ade8b7eSJohn Brawn   set.erase(set.begin());
814ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 3u);
82*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n3);
83*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
84*626c789dSJohn Brawn   EXPECT_EQ(set[2].getDecl(), n2);
854ade8b7eSJohn Brawn 
864ade8b7eSJohn Brawn   set.erase(set.begin());
874ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 2u);
88*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n2);
89*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
904ade8b7eSJohn Brawn 
914ade8b7eSJohn Brawn   set.erase(set.begin());
924ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 1u);
93*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n1);
944ade8b7eSJohn Brawn 
954ade8b7eSJohn Brawn   set.erase(set.begin());
964ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 0u);
974ade8b7eSJohn Brawn }
984ade8b7eSJohn Brawn 
TEST_F(UnresolvedSetTest,EraseIteratorFromEnd)994ade8b7eSJohn Brawn TEST_F(UnresolvedSetTest, EraseIteratorFromEnd) {
1004ade8b7eSJohn Brawn   set.erase(--set.end());
1014ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 3u);
102*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
103*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
104*626c789dSJohn Brawn   EXPECT_EQ(set[2].getDecl(), n2);
1054ade8b7eSJohn Brawn 
1064ade8b7eSJohn Brawn   set.erase(--set.end());
1074ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 2u);
108*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
109*626c789dSJohn Brawn   EXPECT_EQ(set[1].getDecl(), n1);
1104ade8b7eSJohn Brawn 
1114ade8b7eSJohn Brawn   set.erase(--set.end());
1124ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 1u);
113*626c789dSJohn Brawn   EXPECT_EQ(set[0].getDecl(), n0);
1144ade8b7eSJohn Brawn 
1154ade8b7eSJohn Brawn   set.erase(--set.end());
1164ade8b7eSJohn Brawn   EXPECT_EQ(set.size(), 0u);
1174ade8b7eSJohn Brawn }
118