annotate unittests/ADT/BumpPtrListTest.cpp @ 120:1172e4bd9c6f

update 4.0.0
author mir3636
date Fri, 25 Nov 2016 19:14:25 +0900
parents
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
1 //===- unittests/ADT/BumpPtrListTest.cpp - BumpPtrList unit tests ---------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
2 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
3 // The LLVM Compiler Infrastructure
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
4 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
5 // This file is distributed under the University of Illinois Open Source
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
6 // License. See LICENSE.TXT for details.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
7 //
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
9
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
10 #include "llvm/ADT/AllocatorList.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
11 #include "llvm/ADT/STLExtras.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
12 #include "gtest/gtest.h"
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
13
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
14 using namespace llvm;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
15
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
16 namespace {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
17
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
18 struct CountsDestructors {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
19 static unsigned NumCalls;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
20 ~CountsDestructors() { ++NumCalls; }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
21 };
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
22 unsigned CountsDestructors::NumCalls = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
23
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
24 struct MoveOnly {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
25 int V;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
26 explicit MoveOnly(int V) : V(V) {}
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
27 MoveOnly() = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
28 MoveOnly(MoveOnly &&X) { V = X.V; }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
29 MoveOnly(const MoveOnly &X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
30 MoveOnly &operator=(MoveOnly &&X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
31 MoveOnly &operator=(const MoveOnly &X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
32 };
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
33
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
34 struct EmplaceOnly {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
35 int V1, V2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
36 explicit EmplaceOnly(int V1, int V2) : V1(V1), V2(V2) {}
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
37 EmplaceOnly() = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
38 EmplaceOnly(EmplaceOnly &&X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
39 EmplaceOnly(const EmplaceOnly &X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
40 EmplaceOnly &operator=(EmplaceOnly &&X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
41 EmplaceOnly &operator=(const EmplaceOnly &X) = delete;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
42 };
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
43
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
44 TEST(BumpPtrListTest, DefaultConstructor) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
45 BumpPtrList<int> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
46 EXPECT_TRUE(L.empty());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
47 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
48
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
49 TEST(BumpPtrListTest, pushPopBack) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
50 // Build a list with push_back.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
51 BumpPtrList<int> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
52 int Ns[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
53 for (const int N : Ns)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
54 L.push_back(N);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
55
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
56 // Use iterators to check contents.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
57 auto I = L.begin();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
58 for (int N : Ns)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
59 EXPECT_EQ(N, *I++);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
60 EXPECT_EQ(I, L.end());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
61
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
62 // Unbuild the list with pop_back.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
63 for (int N : llvm::reverse(Ns)) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
64 EXPECT_EQ(N, L.back());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
65 L.pop_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
66 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
67 EXPECT_TRUE(L.empty());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
68 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
69
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
70 TEST(BumpPtrListTest, pushPopFront) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
71 // Build a list with push_front.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
72 BumpPtrList<int> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
73 int Ns[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
74 for (const int N : Ns)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
75 L.push_front(N);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
76
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
77 // Use reverse iterators to check contents.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
78 auto I = L.rbegin();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
79 for (int N : Ns)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
80 EXPECT_EQ(N, *I++);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
81 EXPECT_EQ(I, L.rend());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
82
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
83 // Unbuild the list with pop_front.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
84 for (int N : llvm::reverse(Ns)) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
85 EXPECT_EQ(N, L.front());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
86 L.pop_front();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
87 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
88 EXPECT_TRUE(L.empty());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
89 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
90
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
91 TEST(BumpPtrListTest, pushBackMoveOnly) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
92 BumpPtrList<MoveOnly> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
93 int Ns[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
94 for (const int N : Ns) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
95 L.push_back(MoveOnly(N));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
96 EXPECT_EQ(N, L.back().V);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
97 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
98 // Instantiate with MoveOnly.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
99 while (!L.empty())
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
100 L.pop_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
101 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
102
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
103 TEST(BumpPtrListTest, pushFrontMoveOnly) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
104 BumpPtrList<MoveOnly> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
105 int Ns[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
106 for (const int N : Ns) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
107 L.push_front(MoveOnly(N));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
108 EXPECT_EQ(N, L.front().V);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
109 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
110 // Instantiate with MoveOnly.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
111 while (!L.empty())
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
112 L.pop_front();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
113 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
114
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
115 TEST(BumpPtrListTest, emplaceBack) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
116 BumpPtrList<EmplaceOnly> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
117 int N1s[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
118 int N2s[] = {7, 3, 1, 8, 2};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
119 for (int I = 0; I != 5; ++I) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
120 L.emplace_back(N1s[I], N2s[I]);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
121 EXPECT_EQ(N1s[I], L.back().V1);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
122 EXPECT_EQ(N2s[I], L.back().V2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
123 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
124 // Instantiate with EmplaceOnly.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
125 while (!L.empty())
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
126 L.pop_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
127 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
128
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
129 TEST(BumpPtrListTest, emplaceFront) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
130 BumpPtrList<EmplaceOnly> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
131 int N1s[] = {1, 3, 9, 5, 7};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
132 int N2s[] = {7, 3, 1, 8, 2};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
133 for (int I = 0; I != 5; ++I) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
134 L.emplace_front(N1s[I], N2s[I]);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
135 EXPECT_EQ(N1s[I], L.front().V1);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
136 EXPECT_EQ(N2s[I], L.front().V2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
137 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
138 // Instantiate with EmplaceOnly.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
139 while (!L.empty())
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
140 L.pop_front();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
141 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
142
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
143 TEST(BumpPtrListTest, swap) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
144 // Build two lists with different lifetimes and swap them.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
145 int N1s[] = {1, 3, 5, 7, 9};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
146 int N2s[] = {2, 4, 6, 8, 10};
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
147
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
148 BumpPtrList<int> L1;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
149 L1.insert(L1.end(), std::begin(N1s), std::end(N1s));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
150 {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
151 BumpPtrList<int> L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
152 L2.insert(L2.end(), std::begin(N2s), std::end(N2s));
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
153
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
154 // Swap the lists.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
155 L1.swap(L2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
156
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
157 // Check L2's contents before it goes out of scope.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
158 auto I = L2.begin();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
159 for (int N : N1s)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
160 EXPECT_EQ(N, *I++);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
161 EXPECT_EQ(I, L2.end());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
162 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
163
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
164 // Check L1's contents now that L2 is out of scope (with its allocation
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
165 // blocks).
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
166 auto I = L1.begin();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
167 for (int N : N2s)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
168 EXPECT_EQ(N, *I++);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
169 EXPECT_EQ(I, L1.end());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
170 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
171
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
172 TEST(BumpPtrListTest, clear) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
173 CountsDestructors::NumCalls = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
174 CountsDestructors N;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
175 BumpPtrList<CountsDestructors> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
176 L.push_back(N);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
177 L.push_back(N);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
178 L.push_back(N);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
179 EXPECT_EQ(3u, L.size());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
180 EXPECT_EQ(0u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
181 L.pop_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
182 EXPECT_EQ(1u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
183 L.clear();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
184 EXPECT_EQ(3u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
185 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
186
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
187 TEST(BumpPtrListTest, move) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
188 BumpPtrList<int> L1, L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
189 L1.push_back(1);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
190 L2.push_back(2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
191 L1 = std::move(L2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
192 EXPECT_EQ(1u, L1.size());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
193 EXPECT_EQ(2, L1.front());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
194 EXPECT_EQ(0u, L2.size());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
195 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
196
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
197 TEST(BumpPtrListTest, moveCallsDestructors) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
198 CountsDestructors::NumCalls = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
199 BumpPtrList<CountsDestructors> L1, L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
200 L1.emplace_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
201 EXPECT_EQ(0u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
202 L1 = std::move(L2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
203 EXPECT_EQ(1u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
204 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
205
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
206 TEST(BumpPtrListTest, copy) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
207 BumpPtrList<int> L1, L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
208 L1.push_back(1);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
209 L2.push_back(2);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
210 L1 = L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
211 EXPECT_EQ(1u, L1.size());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
212 EXPECT_EQ(2, L1.front());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
213 EXPECT_EQ(1u, L2.size());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
214 EXPECT_EQ(2, L2.front());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
215 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
216
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
217 TEST(BumpPtrListTest, copyCallsDestructors) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
218 CountsDestructors::NumCalls = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
219 BumpPtrList<CountsDestructors> L1, L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
220 L1.emplace_back();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
221 EXPECT_EQ(0u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
222 L1 = L2;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
223 EXPECT_EQ(1u, CountsDestructors::NumCalls);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
224 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
225
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
226 TEST(BumpPtrListTest, resetAlloc) {
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
227 // Resetting an empty list should work.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
228 BumpPtrList<int> L;
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
229
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
230 // Resetting an empty list that has allocated should also work.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
231 L.resetAlloc();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
232 L.push_back(5);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
233 L.erase(L.begin());
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
234 L.resetAlloc();
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
235
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
236 // Resetting a non-empty list should crash.
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
237 L.push_back(5);
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
238 #if defined(GTEST_HAS_DEATH_TEST) && !defined(NDEBUG)
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
239 EXPECT_DEATH(L.resetAlloc(), "Cannot reset allocator if not empty");
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
240 #endif
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
241 }
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
242
1172e4bd9c6f update 4.0.0
mir3636
parents:
diff changeset
243 } // end namespace