diff options
Diffstat (limited to 'unittests/ADT/FoldingSet.cpp')
-rw-r--r-- | unittests/ADT/FoldingSet.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/unittests/ADT/FoldingSet.cpp b/unittests/ADT/FoldingSet.cpp index 5addf27e13635..927ef313cb936 100644 --- a/unittests/ADT/FoldingSet.cpp +++ b/unittests/ADT/FoldingSet.cpp @@ -35,5 +35,138 @@ TEST(FoldingSetTest, UnalignedStringTest) { EXPECT_EQ(a.ComputeHash(), b.ComputeHash()); } +struct TrivialPair : public FoldingSetNode { + unsigned Key = 0; + unsigned Value = 0; + TrivialPair(unsigned K, unsigned V) : FoldingSetNode(), Key(K), Value(V) {} + + void Profile(FoldingSetNodeID &ID) const { + ID.AddInteger(Key); + ID.AddInteger(Value); + } +}; + +TEST(FoldingSetTest, IDComparison) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair T(99, 42); + Trivial.InsertNode(&T); + + void *InsertPos = nullptr; + FoldingSetNodeID ID; + T.Profile(ID); + TrivialPair *N = Trivial.FindNodeOrInsertPos(ID, InsertPos); + EXPECT_EQ(&T, N); + EXPECT_EQ(nullptr, InsertPos); +} + +TEST(FoldingSetTest, MissedIDComparison) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair S(100, 42); + TrivialPair T(99, 42); + Trivial.InsertNode(&T); + + void *InsertPos = nullptr; + FoldingSetNodeID ID; + S.Profile(ID); + TrivialPair *N = Trivial.FindNodeOrInsertPos(ID, InsertPos); + EXPECT_EQ(nullptr, N); + EXPECT_NE(nullptr, InsertPos); +} + +TEST(FoldingSetTest, RemoveNodeThatIsPresent) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair T(99, 42); + Trivial.InsertNode(&T); + EXPECT_EQ(Trivial.size(), 1U); + + bool WasThere = Trivial.RemoveNode(&T); + EXPECT_TRUE(WasThere); + EXPECT_EQ(0U, Trivial.size()); +} + +TEST(FoldingSetTest, RemoveNodeThatIsAbsent) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair T(99, 42); + bool WasThere = Trivial.RemoveNode(&T); + EXPECT_FALSE(WasThere); + EXPECT_EQ(0U, Trivial.size()); +} + +TEST(FoldingSetTest, GetOrInsertInserting) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair T(99, 42); + TrivialPair *N = Trivial.GetOrInsertNode(&T); + EXPECT_EQ(&T, N); +} + +TEST(FoldingSetTest, GetOrInsertGetting) { + FoldingSet<TrivialPair> Trivial; + + TrivialPair T(99, 42); + TrivialPair T2(99, 42); + Trivial.InsertNode(&T); + TrivialPair *N = Trivial.GetOrInsertNode(&T2); + EXPECT_EQ(&T, N); +} + +TEST(FoldingSetTest, InsertAtPos) { + FoldingSet<TrivialPair> Trivial; + + void *InsertPos = nullptr; + TrivialPair Finder(99, 42); + FoldingSetNodeID ID; + Finder.Profile(ID); + Trivial.FindNodeOrInsertPos(ID, InsertPos); + + TrivialPair T(99, 42); + Trivial.InsertNode(&T, InsertPos); + EXPECT_EQ(1U, Trivial.size()); +} + +TEST(FoldingSetTest, EmptyIsTrue) { + FoldingSet<TrivialPair> Trivial; + EXPECT_TRUE(Trivial.empty()); +} + +TEST(FoldingSetTest, EmptyIsFalse) { + FoldingSet<TrivialPair> Trivial; + TrivialPair T(99, 42); + Trivial.InsertNode(&T); + EXPECT_FALSE(Trivial.empty()); +} + +TEST(FoldingSetTest, ClearOnEmpty) { + FoldingSet<TrivialPair> Trivial; + Trivial.clear(); + EXPECT_TRUE(Trivial.empty()); +} + +TEST(FoldingSetTest, ClearOnNonEmpty) { + FoldingSet<TrivialPair> Trivial; + TrivialPair T(99, 42); + Trivial.InsertNode(&T); + Trivial.clear(); + EXPECT_TRUE(Trivial.empty()); +} + +TEST(FoldingSetTest, CapacityLargerThanReserve) { + FoldingSet<TrivialPair> Trivial; + auto OldCapacity = Trivial.capacity(); + Trivial.reserve(OldCapacity + 1); + EXPECT_GE(Trivial.capacity(), OldCapacity + 1); +} + +TEST(FoldingSetTest, SmallReserveChangesNothing) { + FoldingSet<TrivialPair> Trivial; + auto OldCapacity = Trivial.capacity(); + Trivial.reserve(OldCapacity - 1); + EXPECT_EQ(Trivial.capacity(), OldCapacity); +} + } |