19f5c83b9SDuncan P. N. Exon Smith //===- unittests/ADT/IListNodeBaseTest.cpp - ilist_node_base unit tests ---===// 29f5c83b9SDuncan P. N. Exon Smith // 39f5c83b9SDuncan P. N. Exon Smith // The LLVM Compiler Infrastructure 49f5c83b9SDuncan P. N. Exon Smith // 59f5c83b9SDuncan P. N. Exon Smith // This file is distributed under the University of Illinois Open Source 69f5c83b9SDuncan P. N. Exon Smith // License. See LICENSE.TXT for details. 79f5c83b9SDuncan P. N. Exon Smith // 89f5c83b9SDuncan P. N. Exon Smith //===----------------------------------------------------------------------===// 99f5c83b9SDuncan P. N. Exon Smith 1079185d80SDuncan P. N. Exon Smith #include "llvm/ADT/ilist_node_base.h" 119f5c83b9SDuncan P. N. Exon Smith #include "gtest/gtest.h" 129f5c83b9SDuncan P. N. Exon Smith 139f5c83b9SDuncan P. N. Exon Smith using namespace llvm; 149f5c83b9SDuncan P. N. Exon Smith 159f5c83b9SDuncan P. N. Exon Smith namespace { 169f5c83b9SDuncan P. N. Exon Smith 17*085bbf1eSDuncan P. N. Exon Smith typedef ilist_node_base<false> RawNode; 18*085bbf1eSDuncan P. N. Exon Smith typedef ilist_node_base<true> TrackingNode; 19*085bbf1eSDuncan P. N. Exon Smith 209f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, DefaultConstructor) { 21*085bbf1eSDuncan P. N. Exon Smith RawNode A; 229f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getPrev()); 239f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getNext()); 249f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel()); 25*085bbf1eSDuncan P. N. Exon Smith 26*085bbf1eSDuncan P. N. Exon Smith TrackingNode TA; 27*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getPrev()); 28*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getNext()); 29*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel()); 30*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel()); 319f5c83b9SDuncan P. N. Exon Smith } 329f5c83b9SDuncan P. N. Exon Smith 339f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, setPrevAndNext) { 34*085bbf1eSDuncan P. N. Exon Smith RawNode A, B, C; 359f5c83b9SDuncan P. N. Exon Smith A.setPrev(&B); 369f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev()); 379f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getNext()); 389f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getPrev()); 399f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getNext()); 409f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getPrev()); 419f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getNext()); 429f5c83b9SDuncan P. N. Exon Smith 439f5c83b9SDuncan P. N. Exon Smith A.setNext(&C); 449f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev()); 459f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&C, A.getNext()); 469f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getPrev()); 479f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getNext()); 489f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getPrev()); 499f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getNext()); 50*085bbf1eSDuncan P. N. Exon Smith 51*085bbf1eSDuncan P. N. Exon Smith TrackingNode TA, TB, TC; 52*085bbf1eSDuncan P. N. Exon Smith TA.setPrev(&TB); 53*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev()); 54*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getNext()); 55*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getPrev()); 56*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getNext()); 57*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getPrev()); 58*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getNext()); 59*085bbf1eSDuncan P. N. Exon Smith 60*085bbf1eSDuncan P. N. Exon Smith TA.setNext(&TC); 61*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev()); 62*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TC, TA.getNext()); 63*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getPrev()); 64*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getNext()); 65*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getPrev()); 66*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getNext()); 679f5c83b9SDuncan P. N. Exon Smith } 689f5c83b9SDuncan P. N. Exon Smith 699f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, isKnownSentinel) { 70*085bbf1eSDuncan P. N. Exon Smith // Without sentinel tracking. 71*085bbf1eSDuncan P. N. Exon Smith RawNode A, B; 729f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel()); 739f5c83b9SDuncan P. N. Exon Smith A.setPrev(&B); 749f5c83b9SDuncan P. N. Exon Smith A.setNext(&B); 759f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev()); 769f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getNext()); 779f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel()); 78*085bbf1eSDuncan P. N. Exon Smith A.initializeSentinel(); 79*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel()); 809f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev()); 819f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getNext()); 82*085bbf1eSDuncan P. N. Exon Smith 83*085bbf1eSDuncan P. N. Exon Smith // With sentinel tracking. 84*085bbf1eSDuncan P. N. Exon Smith TrackingNode TA, TB; 85*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel()); 86*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel()); 87*085bbf1eSDuncan P. N. Exon Smith TA.setPrev(&TB); 88*085bbf1eSDuncan P. N. Exon Smith TA.setNext(&TB); 89*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev()); 90*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getNext()); 91*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel()); 92*085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel()); 93*085bbf1eSDuncan P. N. Exon Smith TA.initializeSentinel(); 94*085bbf1eSDuncan P. N. Exon Smith EXPECT_TRUE(TA.isKnownSentinel()); 95*085bbf1eSDuncan P. N. Exon Smith EXPECT_TRUE(TA.isSentinel()); 96*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev()); 97*085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getNext()); 989f5c83b9SDuncan P. N. Exon Smith } 999f5c83b9SDuncan P. N. Exon Smith 1009f5c83b9SDuncan P. N. Exon Smith } // end namespace 101