diff options
Diffstat (limited to 'llvm/unittests/ADT/IListNodeBaseTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/IListNodeBaseTest.cpp | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/llvm/unittests/ADT/IListNodeBaseTest.cpp b/llvm/unittests/ADT/IListNodeBaseTest.cpp index 0fb1282b21d..8819ab118a5 100644 --- a/llvm/unittests/ADT/IListNodeBaseTest.cpp +++ b/llvm/unittests/ADT/IListNodeBaseTest.cpp @@ -14,15 +14,24 @@ using namespace llvm; namespace { +typedef ilist_node_base<false> RawNode; +typedef ilist_node_base<true> TrackingNode; + TEST(IListNodeBaseTest, DefaultConstructor) { - ilist_node_base A; + RawNode A; EXPECT_EQ(nullptr, A.getPrev()); EXPECT_EQ(nullptr, A.getNext()); EXPECT_FALSE(A.isKnownSentinel()); + + TrackingNode TA; + EXPECT_EQ(nullptr, TA.getPrev()); + EXPECT_EQ(nullptr, TA.getNext()); + EXPECT_FALSE(TA.isKnownSentinel()); + EXPECT_FALSE(TA.isSentinel()); } TEST(IListNodeBaseTest, setPrevAndNext) { - ilist_node_base A, B, C; + RawNode A, B, C; A.setPrev(&B); EXPECT_EQ(&B, A.getPrev()); EXPECT_EQ(nullptr, A.getNext()); @@ -38,23 +47,54 @@ TEST(IListNodeBaseTest, setPrevAndNext) { EXPECT_EQ(nullptr, B.getNext()); EXPECT_EQ(nullptr, C.getPrev()); EXPECT_EQ(nullptr, C.getNext()); + + TrackingNode TA, TB, TC; + TA.setPrev(&TB); + EXPECT_EQ(&TB, TA.getPrev()); + EXPECT_EQ(nullptr, TA.getNext()); + EXPECT_EQ(nullptr, TB.getPrev()); + EXPECT_EQ(nullptr, TB.getNext()); + EXPECT_EQ(nullptr, TC.getPrev()); + EXPECT_EQ(nullptr, TC.getNext()); + + TA.setNext(&TC); + EXPECT_EQ(&TB, TA.getPrev()); + EXPECT_EQ(&TC, TA.getNext()); + EXPECT_EQ(nullptr, TB.getPrev()); + EXPECT_EQ(nullptr, TB.getNext()); + EXPECT_EQ(nullptr, TC.getPrev()); + EXPECT_EQ(nullptr, TC.getNext()); } TEST(IListNodeBaseTest, isKnownSentinel) { - ilist_node_base A, B; + // Without sentinel tracking. + RawNode A, B; EXPECT_FALSE(A.isKnownSentinel()); A.setPrev(&B); A.setNext(&B); EXPECT_EQ(&B, A.getPrev()); EXPECT_EQ(&B, A.getNext()); + EXPECT_FALSE(A.isKnownSentinel()); A.initializeSentinel(); -#ifdef LLVM_ENABLE_ABI_BREAKING_CHECKS - EXPECT_TRUE(A.isKnownSentinel()); -#else EXPECT_FALSE(A.isKnownSentinel()); -#endif EXPECT_EQ(&B, A.getPrev()); EXPECT_EQ(&B, A.getNext()); + + // With sentinel tracking. + TrackingNode TA, TB; + EXPECT_FALSE(TA.isKnownSentinel()); + EXPECT_FALSE(TA.isSentinel()); + TA.setPrev(&TB); + TA.setNext(&TB); + EXPECT_EQ(&TB, TA.getPrev()); + EXPECT_EQ(&TB, TA.getNext()); + EXPECT_FALSE(TA.isKnownSentinel()); + EXPECT_FALSE(TA.isSentinel()); + TA.initializeSentinel(); + EXPECT_TRUE(TA.isKnownSentinel()); + EXPECT_TRUE(TA.isSentinel()); + EXPECT_EQ(&TB, TA.getPrev()); + EXPECT_EQ(&TB, TA.getNext()); } } // end namespace |