blob: 8819ab118a599eb58489942720095e66e8b8dcb5 [file] [log] [blame]
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +00001//===- unittests/ADT/IListNodeBaseTest.cpp - ilist_node_base unit tests ---===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Duncan P. N. Exon Smith79185d82016-08-30 01:37:58 +000010#include "llvm/ADT/ilist_node_base.h"
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000011#include "gtest/gtest.h"
12
13using namespace llvm;
14
15namespace {
16
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000017typedef ilist_node_base<false> RawNode;
18typedef ilist_node_base<true> TrackingNode;
19
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000020TEST(IListNodeBaseTest, DefaultConstructor) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000021 RawNode A;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000022 EXPECT_EQ(nullptr, A.getPrev());
23 EXPECT_EQ(nullptr, A.getNext());
24 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000025
26 TrackingNode TA;
27 EXPECT_EQ(nullptr, TA.getPrev());
28 EXPECT_EQ(nullptr, TA.getNext());
29 EXPECT_FALSE(TA.isKnownSentinel());
30 EXPECT_FALSE(TA.isSentinel());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000031}
32
33TEST(IListNodeBaseTest, setPrevAndNext) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000034 RawNode A, B, C;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000035 A.setPrev(&B);
36 EXPECT_EQ(&B, A.getPrev());
37 EXPECT_EQ(nullptr, A.getNext());
38 EXPECT_EQ(nullptr, B.getPrev());
39 EXPECT_EQ(nullptr, B.getNext());
40 EXPECT_EQ(nullptr, C.getPrev());
41 EXPECT_EQ(nullptr, C.getNext());
42
43 A.setNext(&C);
44 EXPECT_EQ(&B, A.getPrev());
45 EXPECT_EQ(&C, A.getNext());
46 EXPECT_EQ(nullptr, B.getPrev());
47 EXPECT_EQ(nullptr, B.getNext());
48 EXPECT_EQ(nullptr, C.getPrev());
49 EXPECT_EQ(nullptr, C.getNext());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000050
51 TrackingNode TA, TB, TC;
52 TA.setPrev(&TB);
53 EXPECT_EQ(&TB, TA.getPrev());
54 EXPECT_EQ(nullptr, TA.getNext());
55 EXPECT_EQ(nullptr, TB.getPrev());
56 EXPECT_EQ(nullptr, TB.getNext());
57 EXPECT_EQ(nullptr, TC.getPrev());
58 EXPECT_EQ(nullptr, TC.getNext());
59
60 TA.setNext(&TC);
61 EXPECT_EQ(&TB, TA.getPrev());
62 EXPECT_EQ(&TC, TA.getNext());
63 EXPECT_EQ(nullptr, TB.getPrev());
64 EXPECT_EQ(nullptr, TB.getNext());
65 EXPECT_EQ(nullptr, TC.getPrev());
66 EXPECT_EQ(nullptr, TC.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000067}
68
69TEST(IListNodeBaseTest, isKnownSentinel) {
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000070 // Without sentinel tracking.
71 RawNode A, B;
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000072 EXPECT_FALSE(A.isKnownSentinel());
73 A.setPrev(&B);
74 A.setNext(&B);
75 EXPECT_EQ(&B, A.getPrev());
76 EXPECT_EQ(&B, A.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000077 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000078 A.initializeSentinel();
79 EXPECT_FALSE(A.isKnownSentinel());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000080 EXPECT_EQ(&B, A.getPrev());
81 EXPECT_EQ(&B, A.getNext());
Duncan P. N. Exon Smith085bbf12016-09-11 16:20:53 +000082
83 // With sentinel tracking.
84 TrackingNode TA, TB;
85 EXPECT_FALSE(TA.isKnownSentinel());
86 EXPECT_FALSE(TA.isSentinel());
87 TA.setPrev(&TB);
88 TA.setNext(&TB);
89 EXPECT_EQ(&TB, TA.getPrev());
90 EXPECT_EQ(&TB, TA.getNext());
91 EXPECT_FALSE(TA.isKnownSentinel());
92 EXPECT_FALSE(TA.isSentinel());
93 TA.initializeSentinel();
94 EXPECT_TRUE(TA.isKnownSentinel());
95 EXPECT_TRUE(TA.isSentinel());
96 EXPECT_EQ(&TB, TA.getPrev());
97 EXPECT_EQ(&TB, TA.getNext());
Duncan P. N. Exon Smith9f5c83b2016-08-22 22:21:07 +000098}
99
100} // end namespace