19f5c83b9SDuncan P. N. Exon Smith //===- unittests/ADT/IListNodeBaseTest.cpp - ilist_node_base unit tests ---===//
29f5c83b9SDuncan P. N. Exon Smith //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
69f5c83b9SDuncan P. N. Exon Smith //
79f5c83b9SDuncan P. N. Exon Smith //===----------------------------------------------------------------------===//
89f5c83b9SDuncan P. N. Exon Smith
979185d80SDuncan P. N. Exon Smith #include "llvm/ADT/ilist_node_base.h"
109f5c83b9SDuncan P. N. Exon Smith #include "gtest/gtest.h"
119f5c83b9SDuncan P. N. Exon Smith
129f5c83b9SDuncan P. N. Exon Smith using namespace llvm;
139f5c83b9SDuncan P. N. Exon Smith
149f5c83b9SDuncan P. N. Exon Smith namespace {
159f5c83b9SDuncan P. N. Exon Smith
16085bbf1eSDuncan P. N. Exon Smith typedef ilist_node_base<false> RawNode;
17085bbf1eSDuncan P. N. Exon Smith typedef ilist_node_base<true> TrackingNode;
18085bbf1eSDuncan P. N. Exon Smith
TEST(IListNodeBaseTest,DefaultConstructor)199f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, DefaultConstructor) {
20085bbf1eSDuncan P. N. Exon Smith RawNode A;
219f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getPrev());
229f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getNext());
239f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel());
24085bbf1eSDuncan P. N. Exon Smith
25085bbf1eSDuncan P. N. Exon Smith TrackingNode TA;
26085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getPrev());
27085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getNext());
28085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel());
29085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel());
309f5c83b9SDuncan P. N. Exon Smith }
319f5c83b9SDuncan P. N. Exon Smith
TEST(IListNodeBaseTest,setPrevAndNext)329f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, setPrevAndNext) {
33085bbf1eSDuncan P. N. Exon Smith RawNode A, B, C;
349f5c83b9SDuncan P. N. Exon Smith A.setPrev(&B);
359f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev());
369f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, A.getNext());
379f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getPrev());
389f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getNext());
399f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getPrev());
409f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getNext());
419f5c83b9SDuncan P. N. Exon Smith
429f5c83b9SDuncan P. N. Exon Smith A.setNext(&C);
439f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev());
449f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&C, A.getNext());
459f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getPrev());
469f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, B.getNext());
479f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getPrev());
489f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(nullptr, C.getNext());
49085bbf1eSDuncan P. N. Exon Smith
50085bbf1eSDuncan P. N. Exon Smith TrackingNode TA, TB, TC;
51085bbf1eSDuncan P. N. Exon Smith TA.setPrev(&TB);
52085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev());
53085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TA.getNext());
54085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getPrev());
55085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getNext());
56085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getPrev());
57085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getNext());
58085bbf1eSDuncan P. N. Exon Smith
59085bbf1eSDuncan P. N. Exon Smith TA.setNext(&TC);
60085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev());
61085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TC, TA.getNext());
62085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getPrev());
63085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TB.getNext());
64085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getPrev());
65085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(nullptr, TC.getNext());
669f5c83b9SDuncan P. N. Exon Smith }
679f5c83b9SDuncan P. N. Exon Smith
TEST(IListNodeBaseTest,isKnownSentinel)689f5c83b9SDuncan P. N. Exon Smith TEST(IListNodeBaseTest, isKnownSentinel) {
69085bbf1eSDuncan P. N. Exon Smith // Without sentinel tracking.
70085bbf1eSDuncan P. N. Exon Smith RawNode A, B;
719f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel());
729f5c83b9SDuncan P. N. Exon Smith A.setPrev(&B);
739f5c83b9SDuncan P. N. Exon Smith A.setNext(&B);
749f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev());
759f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getNext());
769f5c83b9SDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel());
77085bbf1eSDuncan P. N. Exon Smith A.initializeSentinel();
78085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(A.isKnownSentinel());
799f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getPrev());
809f5c83b9SDuncan P. N. Exon Smith EXPECT_EQ(&B, A.getNext());
81085bbf1eSDuncan P. N. Exon Smith
82085bbf1eSDuncan P. N. Exon Smith // With sentinel tracking.
83085bbf1eSDuncan P. N. Exon Smith TrackingNode TA, TB;
84085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel());
85085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel());
86085bbf1eSDuncan P. N. Exon Smith TA.setPrev(&TB);
87085bbf1eSDuncan P. N. Exon Smith TA.setNext(&TB);
88085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev());
89085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getNext());
90085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isKnownSentinel());
91085bbf1eSDuncan P. N. Exon Smith EXPECT_FALSE(TA.isSentinel());
92085bbf1eSDuncan P. N. Exon Smith TA.initializeSentinel();
93085bbf1eSDuncan P. N. Exon Smith EXPECT_TRUE(TA.isKnownSentinel());
94085bbf1eSDuncan P. N. Exon Smith EXPECT_TRUE(TA.isSentinel());
95085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getPrev());
96085bbf1eSDuncan P. N. Exon Smith EXPECT_EQ(&TB, TA.getNext());
979f5c83b9SDuncan P. N. Exon Smith }
989f5c83b9SDuncan P. N. Exon Smith
999f5c83b9SDuncan P. N. Exon Smith } // end namespace
100