blob: 65f85fc3a237e197b26f312422efd2eef846605e [file] [log] [blame]
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +00001//===- unittests/ADT/IListNodeBaseTest.cpp - ilist_node_base unit tests ---===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +00006//
7//===----------------------------------------------------------------------===//
8
Duncan P. N. Exon Smith79185d82016-08-30 01:37:58 +00009#include "llvm/ADT/ilist_node_base.h"
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000010#include "gtest/gtest.h"
11
12using namespace llvm;
13
14namespace {
15
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000016typedef ilist_node_base<false> RawNode;
17typedef ilist_node_base<true> TrackingNode;
18
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000019TEST(IListNodeBaseTest, DefaultConstructor) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000020 RawNode A;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000021 EXPECT_EQ(nullptr, A.getPrev());
22 EXPECT_EQ(nullptr, A.getNext());
23 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000024
25 TrackingNode TA;
26 EXPECT_EQ(nullptr, TA.getPrev());
27 EXPECT_EQ(nullptr, TA.getNext());
28 EXPECT_FALSE(TA.isKnownSentinel());
29 EXPECT_FALSE(TA.isSentinel());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000030}
31
32TEST(IListNodeBaseTest, setPrevAndNext) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000033 RawNode A, B, C;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000034 A.setPrev(&B);
35 EXPECT_EQ(&B, A.getPrev());
36 EXPECT_EQ(nullptr, A.getNext());
37 EXPECT_EQ(nullptr, B.getPrev());
38 EXPECT_EQ(nullptr, B.getNext());
39 EXPECT_EQ(nullptr, C.getPrev());
40 EXPECT_EQ(nullptr, C.getNext());
41
42 A.setNext(&C);
43 EXPECT_EQ(&B, A.getPrev());
44 EXPECT_EQ(&C, A.getNext());
45 EXPECT_EQ(nullptr, B.getPrev());
46 EXPECT_EQ(nullptr, B.getNext());
47 EXPECT_EQ(nullptr, C.getPrev());
48 EXPECT_EQ(nullptr, C.getNext());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000049
50 TrackingNode TA, TB, TC;
51 TA.setPrev(&TB);
52 EXPECT_EQ(&TB, TA.getPrev());
53 EXPECT_EQ(nullptr, TA.getNext());
54 EXPECT_EQ(nullptr, TB.getPrev());
55 EXPECT_EQ(nullptr, TB.getNext());
56 EXPECT_EQ(nullptr, TC.getPrev());
57 EXPECT_EQ(nullptr, TC.getNext());
58
59 TA.setNext(&TC);
60 EXPECT_EQ(&TB, TA.getPrev());
61 EXPECT_EQ(&TC, TA.getNext());
62 EXPECT_EQ(nullptr, TB.getPrev());
63 EXPECT_EQ(nullptr, TB.getNext());
64 EXPECT_EQ(nullptr, TC.getPrev());
65 EXPECT_EQ(nullptr, TC.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000066}
67
68TEST(IListNodeBaseTest, isKnownSentinel) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000069 // Without sentinel tracking.
70 RawNode A, B;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000071 EXPECT_FALSE(A.isKnownSentinel());
72 A.setPrev(&B);
73 A.setNext(&B);
74 EXPECT_EQ(&B, A.getPrev());
75 EXPECT_EQ(&B, A.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000076 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000077 A.initializeSentinel();
78 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000079 EXPECT_EQ(&B, A.getPrev());
80 EXPECT_EQ(&B, A.getNext());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000081
82 // With sentinel tracking.
83 TrackingNode TA, TB;
84 EXPECT_FALSE(TA.isKnownSentinel());
85 EXPECT_FALSE(TA.isSentinel());
86 TA.setPrev(&TB);
87 TA.setNext(&TB);
88 EXPECT_EQ(&TB, TA.getPrev());
89 EXPECT_EQ(&TB, TA.getNext());
90 EXPECT_FALSE(TA.isKnownSentinel());
91 EXPECT_FALSE(TA.isSentinel());
92 TA.initializeSentinel();
93 EXPECT_TRUE(TA.isKnownSentinel());
94 EXPECT_TRUE(TA.isSentinel());
95 EXPECT_EQ(&TB, TA.getPrev());
96 EXPECT_EQ(&TB, TA.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000097}
98
99} // end namespace