#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(&d0); n1 = reinterpret_cast(&d1); n2 = reinterpret_cast(&d2); n3 = reinterpret_cast(&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); }