1//===- unittests/ADT/IListNodeBaseTest.cpp - ilist_node_base unit tests ---===//
2//
3// 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
6//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/ADT/ilist_node_base.h"
10#include "gtest/gtest.h"
11
12using namespace llvm;
13
14namespace {
15
16typedef ilist_node_base<false> RawNode;
17typedef ilist_node_base<true> TrackingNode;
18
19TEST(IListNodeBaseTest, DefaultConstructor) {
20 RawNode A;
21 EXPECT_EQ(nullptr, A.getPrev());
22 EXPECT_EQ(nullptr, A.getNext());
23 EXPECT_FALSE(A.isKnownSentinel());
24
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());
30}
31
32TEST(IListNodeBaseTest, setPrevAndNext) {
33 RawNode A, B, C;
34 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());
49
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());
66}
67
68TEST(IListNodeBaseTest, isKnownSentinel) {
69 // Without sentinel tracking.
70 RawNode A, B;
71 EXPECT_FALSE(A.isKnownSentinel());
72 A.setPrev(&B);
73 A.setNext(&B);
74 EXPECT_EQ(&B, A.getPrev());
75 EXPECT_EQ(&B, A.getNext());
76 EXPECT_FALSE(A.isKnownSentinel());
77 A.initializeSentinel();
78 EXPECT_FALSE(A.isKnownSentinel());
79 EXPECT_EQ(&B, A.getPrev());
80 EXPECT_EQ(&B, A.getNext());
81
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());
97}
98
99} // end namespace
100

source code of llvm/unittests/ADT/IListNodeBaseTest.cpp