|  | #include "clang/AST/UnresolvedSet.h" | 
|  | #include "clang/AST/Decl.h" | 
|  | #include "gtest/gtest.h" | 
|  |  | 
|  | using namespace clang; | 
|  |  | 
|  | class UnresolvedSetTest : public ::testing::Test { | 
|  | protected: | 
|  | // For this test we don't care about the contents of the NamedDecl, | 
|  | // so just use a dummy struct of appropriate size and alignment. | 
|  | struct alignas(NamedDecl) DummyDecl { | 
|  | char contents[sizeof(NamedDecl)]; | 
|  | }; | 
|  | DummyDecl d0, d1, d2, d3; | 
|  | NamedDecl *n0, *n1, *n2, *n3; | 
|  | UnresolvedSet<2> set; | 
|  |  | 
|  | void SetUp() override { | 
|  | n0 = reinterpret_cast<NamedDecl*>(&d0); | 
|  | n1 = reinterpret_cast<NamedDecl*>(&d1); | 
|  | n2 = reinterpret_cast<NamedDecl*>(&d2); | 
|  | n3 = reinterpret_cast<NamedDecl*>(&d3); | 
|  | set.addDecl(n0); | 
|  | set.addDecl(n1); | 
|  | set.addDecl(n2); | 
|  | set.addDecl(n3); | 
|  | } | 
|  | }; | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, Size) { EXPECT_EQ(set.size(), 4u); } | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, ArrayOperator) { | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  | EXPECT_EQ(set[2].getDecl(), n2); | 
|  | EXPECT_EQ(set[3].getDecl(), n3); | 
|  | } | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, EraseIntegerFromStart) { | 
|  | set.erase(0); | 
|  | EXPECT_EQ(set.size(), 3u); | 
|  | EXPECT_EQ(set[0].getDecl(), n3); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  | EXPECT_EQ(set[2].getDecl(), n2); | 
|  |  | 
|  | set.erase(0); | 
|  | EXPECT_EQ(set.size(), 2u); | 
|  | EXPECT_EQ(set[0].getDecl(), n2); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  |  | 
|  | set.erase(0); | 
|  | EXPECT_EQ(set.size(), 1u); | 
|  | EXPECT_EQ(set[0].getDecl(), n1); | 
|  |  | 
|  | set.erase(0); | 
|  | EXPECT_EQ(set.size(), 0u); | 
|  | } | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, EraseIntegerFromEnd) { | 
|  | set.erase(3); | 
|  | EXPECT_EQ(set.size(), 3u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  | EXPECT_EQ(set[2].getDecl(), n2); | 
|  |  | 
|  | set.erase(2); | 
|  | EXPECT_EQ(set.size(), 2u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  |  | 
|  | set.erase(1); | 
|  | EXPECT_EQ(set.size(), 1u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  |  | 
|  | set.erase(0); | 
|  | EXPECT_EQ(set.size(), 0u); | 
|  | } | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, EraseIteratorFromStart) { | 
|  | set.erase(set.begin()); | 
|  | EXPECT_EQ(set.size(), 3u); | 
|  | EXPECT_EQ(set[0].getDecl(), n3); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  | EXPECT_EQ(set[2].getDecl(), n2); | 
|  |  | 
|  | set.erase(set.begin()); | 
|  | EXPECT_EQ(set.size(), 2u); | 
|  | EXPECT_EQ(set[0].getDecl(), n2); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  |  | 
|  | set.erase(set.begin()); | 
|  | EXPECT_EQ(set.size(), 1u); | 
|  | EXPECT_EQ(set[0].getDecl(), n1); | 
|  |  | 
|  | set.erase(set.begin()); | 
|  | EXPECT_EQ(set.size(), 0u); | 
|  | } | 
|  |  | 
|  | TEST_F(UnresolvedSetTest, EraseIteratorFromEnd) { | 
|  | set.erase(--set.end()); | 
|  | EXPECT_EQ(set.size(), 3u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  | EXPECT_EQ(set[2].getDecl(), n2); | 
|  |  | 
|  | set.erase(--set.end()); | 
|  | EXPECT_EQ(set.size(), 2u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  | EXPECT_EQ(set[1].getDecl(), n1); | 
|  |  | 
|  | set.erase(--set.end()); | 
|  | EXPECT_EQ(set.size(), 1u); | 
|  | EXPECT_EQ(set[0].getDecl(), n0); | 
|  |  | 
|  | set.erase(--set.end()); | 
|  | EXPECT_EQ(set.size(), 0u); | 
|  | } |