Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: third_party/WebKit/Source/wtf/DequeTest.cpp

Issue 1436153002: Apply clang-format with Chromium-style without column limit. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/wtf/Deque.h ('k') | third_party/WebKit/Source/wtf/DoublyLinkedList.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 17 matching lines...) Expand all
28 28
29 #include "wtf/HashSet.h" 29 #include "wtf/HashSet.h"
30 #include "wtf/OwnPtr.h" 30 #include "wtf/OwnPtr.h"
31 #include "wtf/PassOwnPtr.h" 31 #include "wtf/PassOwnPtr.h"
32 #include <gtest/gtest.h> 32 #include <gtest/gtest.h>
33 33
34 namespace WTF { 34 namespace WTF {
35 35
36 namespace { 36 namespace {
37 37
38 TEST(DequeTest, Basic) 38 TEST(DequeTest, Basic) {
39 { 39 Deque<int> intDeque;
40 Deque<int> intDeque; 40 EXPECT_TRUE(intDeque.isEmpty());
41 EXPECT_TRUE(intDeque.isEmpty()); 41 EXPECT_EQ(0ul, intDeque.size());
42 EXPECT_EQ(0ul, intDeque.size()); 42 }
43 } 43
44 44 void checkNumberSequence(Deque<int>& deque, int from, int to, bool increment) {
45 void checkNumberSequence(Deque<int>& deque, int from, int to, bool increment) 45 Deque<int>::iterator it = increment ? deque.begin() : deque.end();
46 { 46 size_t index = increment ? 0 : deque.size();
47 Deque<int>::iterator it = increment ? deque.begin() : deque.end(); 47 int step = from < to ? 1 : -1;
48 size_t index = increment ? 0 : deque.size(); 48 for (int i = from; i != to + step; i += step) {
49 int step = from < to ? 1 : -1; 49 if (!increment) {
50 for (int i = from; i != to + step; i += step) { 50 --it;
51 if (!increment) { 51 --index;
52 --it; 52 }
53 --index; 53
54 } 54 EXPECT_EQ(i, *it);
55 55 EXPECT_EQ(i, deque[index]);
56 EXPECT_EQ(i, *it); 56
57 EXPECT_EQ(i, deque[index]); 57 if (increment) {
58 58 ++it;
59 if (increment) { 59 ++index;
60 ++it; 60 }
61 ++index; 61 }
62 } 62 EXPECT_EQ(increment ? deque.end() : deque.begin(), it);
63 } 63 EXPECT_EQ(increment ? deque.size() : 0, index);
64 EXPECT_EQ(increment ? deque.end() : deque.begin(), it); 64 }
65 EXPECT_EQ(increment ? deque.size() : 0, index); 65
66 } 66 void checkNumberSequenceReverse(Deque<int>& deque, int from, int to, bool increm ent) {
67 67 Deque<int>::reverse_iterator it = increment ? deque.rbegin() : deque.rend();
68 void checkNumberSequenceReverse(Deque<int>& deque, int from, int to, bool increm ent) 68 size_t index = increment ? 0 : deque.size();
69 { 69 int step = from < to ? 1 : -1;
70 Deque<int>::reverse_iterator it = increment ? deque.rbegin() : deque.rend(); 70 for (int i = from; i != to + step; i += step) {
71 size_t index = increment ? 0 : deque.size(); 71 if (!increment) {
72 int step = from < to ? 1 : -1; 72 --it;
73 for (int i = from; i != to + step; i += step) { 73 --index;
74 if (!increment) { 74 }
75 --it; 75
76 --index; 76 EXPECT_EQ(i, *it);
77 } 77 EXPECT_EQ(i, deque.at(deque.size() - 1 - index));
78 78
79 EXPECT_EQ(i, *it); 79 if (increment) {
80 EXPECT_EQ(i, deque.at(deque.size() - 1 - index)); 80 ++it;
81 81 ++index;
82 if (increment) { 82 }
83 ++it; 83 }
84 ++index; 84 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it);
85 } 85 EXPECT_EQ(increment ? deque.size() : 0, index);
86 } 86 }
87 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it); 87
88 EXPECT_EQ(increment ? deque.size() : 0, index); 88 TEST(DequeTest, Reverse) {
89 } 89 Deque<int> intDeque;
90 90 intDeque.append(10);
91 TEST(DequeTest, Reverse) 91 intDeque.append(11);
92 { 92 intDeque.append(12);
93 Deque<int> intDeque; 93 intDeque.append(13);
94 intDeque.append(10); 94
95 intDeque.append(11); 95 checkNumberSequence(intDeque, 10, 13, true);
96 intDeque.append(12); 96 checkNumberSequence(intDeque, 13, 10, false);
97 intDeque.append(13); 97 checkNumberSequenceReverse(intDeque, 13, 10, true);
98 98 checkNumberSequenceReverse(intDeque, 10, 13, false);
99 checkNumberSequence(intDeque, 10, 13, true); 99
100 checkNumberSequence(intDeque, 13, 10, false); 100 intDeque.append(14);
101 checkNumberSequenceReverse(intDeque, 13, 10, true); 101 intDeque.append(15);
102 checkNumberSequenceReverse(intDeque, 10, 13, false); 102 EXPECT_EQ(10, intDeque.takeFirst());
103 103 EXPECT_EQ(15, intDeque.takeLast());
104 intDeque.append(14); 104 checkNumberSequence(intDeque, 11, 14, true);
105 intDeque.append(15); 105 checkNumberSequence(intDeque, 14, 11, false);
106 EXPECT_EQ(10, intDeque.takeFirst()); 106 checkNumberSequenceReverse(intDeque, 14, 11, true);
107 EXPECT_EQ(15, intDeque.takeLast()); 107 checkNumberSequenceReverse(intDeque, 11, 14, false);
108 checkNumberSequence(intDeque, 11, 14, true); 108
109 checkNumberSequence(intDeque, 14, 11, false); 109 for (int i = 15; i < 200; ++i)
110 checkNumberSequenceReverse(intDeque, 14, 11, true); 110 intDeque.append(i);
111 checkNumberSequenceReverse(intDeque, 11, 14, false); 111 checkNumberSequence(intDeque, 11, 199, true);
112 112 checkNumberSequence(intDeque, 199, 11, false);
113 for (int i = 15; i < 200; ++i) 113 checkNumberSequenceReverse(intDeque, 199, 11, true);
114 intDeque.append(i); 114 checkNumberSequenceReverse(intDeque, 11, 199, false);
115 checkNumberSequence(intDeque, 11, 199, true); 115
116 checkNumberSequence(intDeque, 199, 11, false); 116 for (int i = 0; i < 180; ++i) {
117 checkNumberSequenceReverse(intDeque, 199, 11, true); 117 EXPECT_EQ(i + 11, intDeque[0]);
118 checkNumberSequenceReverse(intDeque, 11, 199, false); 118 EXPECT_EQ(i + 11, intDeque.takeFirst());
119 119 }
120 for (int i = 0; i < 180; ++i) { 120 checkNumberSequence(intDeque, 191, 199, true);
121 EXPECT_EQ(i + 11, intDeque[0]); 121 checkNumberSequence(intDeque, 199, 191, false);
122 EXPECT_EQ(i + 11, intDeque.takeFirst()); 122 checkNumberSequenceReverse(intDeque, 199, 191, true);
123 } 123 checkNumberSequenceReverse(intDeque, 191, 199, false);
124 checkNumberSequence(intDeque, 191, 199, true); 124
125 checkNumberSequence(intDeque, 199, 191, false); 125 Deque<int> intDeque2;
126 checkNumberSequenceReverse(intDeque, 199, 191, true); 126 swap(intDeque, intDeque2);
127 checkNumberSequenceReverse(intDeque, 191, 199, false); 127
128 128 checkNumberSequence(intDeque2, 191, 199, true);
129 Deque<int> intDeque2; 129 checkNumberSequence(intDeque2, 199, 191, false);
130 swap(intDeque, intDeque2); 130 checkNumberSequenceReverse(intDeque2, 199, 191, true);
131 131 checkNumberSequenceReverse(intDeque2, 191, 199, false);
132 checkNumberSequence(intDeque2, 191, 199, true); 132
133 checkNumberSequence(intDeque2, 199, 191, false); 133 intDeque.swap(intDeque2);
134 checkNumberSequenceReverse(intDeque2, 199, 191, true); 134
135 checkNumberSequenceReverse(intDeque2, 191, 199, false); 135 checkNumberSequence(intDeque, 191, 199, true);
136 136 checkNumberSequence(intDeque, 199, 191, false);
137 intDeque.swap(intDeque2); 137 checkNumberSequenceReverse(intDeque, 199, 191, true);
138 138 checkNumberSequenceReverse(intDeque, 191, 199, false);
139 checkNumberSequence(intDeque, 191, 199, true); 139
140 checkNumberSequence(intDeque, 199, 191, false); 140 intDeque.swap(intDeque2);
141 checkNumberSequenceReverse(intDeque, 199, 191, true); 141
142 checkNumberSequenceReverse(intDeque, 191, 199, false); 142 checkNumberSequence(intDeque2, 191, 199, true);
143 143 checkNumberSequence(intDeque2, 199, 191, false);
144 intDeque.swap(intDeque2); 144 checkNumberSequenceReverse(intDeque2, 199, 191, true);
145 145 checkNumberSequenceReverse(intDeque2, 191, 199, false);
146 checkNumberSequence(intDeque2, 191, 199, true);
147 checkNumberSequence(intDeque2, 199, 191, false);
148 checkNumberSequenceReverse(intDeque2, 199, 191, true);
149 checkNumberSequenceReverse(intDeque2, 191, 199, false);
150 } 146 }
151 147
152 class DestructCounter { 148 class DestructCounter {
153 public: 149 public:
154 explicit DestructCounter(int i, int* destructNumber) 150 explicit DestructCounter(int i, int* destructNumber)
155 : m_i(i) 151 : m_i(i), m_destructNumber(destructNumber) {}
156 , m_destructNumber(destructNumber) 152
157 { } 153 ~DestructCounter() { ++(*m_destructNumber); }
158 154 int get() const { return m_i; }
159 ~DestructCounter() { ++(*m_destructNumber); } 155
160 int get() const { return m_i; } 156 private:
161 157 int m_i;
162 private: 158 int* m_destructNumber;
163 int m_i;
164 int* m_destructNumber;
165 }; 159 };
166 160
167 using OwnPtrDeque = Deque<OwnPtr<DestructCounter>>; 161 using OwnPtrDeque = Deque<OwnPtr<DestructCounter>>;
168 162
169 TEST(DequeTest, OwnPtr) 163 TEST(DequeTest, OwnPtr) {
170 { 164 int destructNumber = 0;
171 int destructNumber = 0; 165 OwnPtrDeque deque;
172 OwnPtrDeque deque; 166 deque.append(adoptPtr(new DestructCounter(0, &destructNumber)));
173 deque.append(adoptPtr(new DestructCounter(0, &destructNumber))); 167 deque.append(adoptPtr(new DestructCounter(1, &destructNumber)));
174 deque.append(adoptPtr(new DestructCounter(1, &destructNumber))); 168 EXPECT_EQ(2u, deque.size());
175 EXPECT_EQ(2u, deque.size()); 169
176 170 OwnPtr<DestructCounter>& counter0 = deque.first();
177 OwnPtr<DestructCounter>& counter0 = deque.first(); 171 EXPECT_EQ(0, counter0->get());
178 EXPECT_EQ(0, counter0->get()); 172 int counter1 = deque.last()->get();
179 int counter1 = deque.last()->get(); 173 EXPECT_EQ(1, counter1);
180 EXPECT_EQ(1, counter1); 174 EXPECT_EQ(0, destructNumber);
181 EXPECT_EQ(0, destructNumber); 175
182 176 size_t index = 0;
183 size_t index = 0; 177 for (OwnPtrDeque::iterator iter = deque.begin(); iter != deque.end(); ++iter) {
184 for (OwnPtrDeque::iterator iter = deque.begin(); iter != deque.end(); ++iter ) { 178 OwnPtr<DestructCounter>& refCounter = *iter;
185 OwnPtr<DestructCounter>& refCounter = *iter; 179 EXPECT_EQ(index, static_cast<size_t>(refCounter->get()));
186 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); 180 EXPECT_EQ(index, static_cast<size_t>((*refCounter).get()));
187 EXPECT_EQ(index, static_cast<size_t>((*refCounter).get())); 181 index++;
188 index++; 182 }
189 } 183 EXPECT_EQ(0, destructNumber);
190 EXPECT_EQ(0, destructNumber); 184
191 185 OwnPtrDeque::iterator it = deque.begin();
192 OwnPtrDeque::iterator it = deque.begin(); 186 for (index = 0; index < deque.size(); ++index) {
193 for (index = 0; index < deque.size(); ++index) { 187 OwnPtr<DestructCounter>& refCounter = *it;
194 OwnPtr<DestructCounter>& refCounter = *it; 188 EXPECT_EQ(index, static_cast<size_t>(refCounter->get()));
195 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); 189 index++;
196 index++; 190 ++it;
197 ++it; 191 }
198 } 192 EXPECT_EQ(0, destructNumber);
199 EXPECT_EQ(0, destructNumber); 193
200 194 EXPECT_EQ(0, deque.first()->get());
201 EXPECT_EQ(0, deque.first()->get()); 195 deque.removeFirst();
202 deque.removeFirst(); 196 EXPECT_EQ(1, deque.first()->get());
203 EXPECT_EQ(1, deque.first()->get()); 197 EXPECT_EQ(1u, deque.size());
204 EXPECT_EQ(1u, deque.size()); 198 EXPECT_EQ(1, destructNumber);
205 EXPECT_EQ(1, destructNumber); 199
206 200 OwnPtr<DestructCounter> ownCounter1 = deque.first().release();
207 OwnPtr<DestructCounter> ownCounter1 = deque.first().release(); 201 deque.removeFirst();
208 deque.removeFirst(); 202 EXPECT_EQ(counter1, ownCounter1->get());
209 EXPECT_EQ(counter1, ownCounter1->get()); 203 EXPECT_EQ(0u, deque.size());
210 EXPECT_EQ(0u, deque.size()); 204 EXPECT_EQ(1, destructNumber);
211 EXPECT_EQ(1, destructNumber); 205
212 206 ownCounter1.clear();
213 ownCounter1.clear(); 207 EXPECT_EQ(2, destructNumber);
214 EXPECT_EQ(2, destructNumber); 208
215 209 size_t count = 1025;
216 size_t count = 1025; 210 destructNumber = 0;
217 destructNumber = 0; 211 for (size_t i = 0; i < count; ++i)
218 for (size_t i = 0; i < count; ++i) 212 deque.prepend(adoptPtr(new DestructCounter(i, &destructNumber)));
219 deque.prepend(adoptPtr(new DestructCounter(i, &destructNumber))); 213
220 214 // Deque relocation must not destruct OwnPtr element.
221 // Deque relocation must not destruct OwnPtr element. 215 EXPECT_EQ(0, destructNumber);
222 EXPECT_EQ(0, destructNumber); 216 EXPECT_EQ(count, deque.size());
223 EXPECT_EQ(count, deque.size()); 217
224 218 OwnPtrDeque copyDeque;
225 OwnPtrDeque copyDeque; 219 deque.swap(copyDeque);
226 deque.swap(copyDeque); 220 EXPECT_EQ(0, destructNumber);
227 EXPECT_EQ(0, destructNumber); 221 EXPECT_EQ(count, copyDeque.size());
228 EXPECT_EQ(count, copyDeque.size()); 222 EXPECT_EQ(0u, deque.size());
229 EXPECT_EQ(0u, deque.size()); 223
230 224 copyDeque.clear();
231 copyDeque.clear(); 225 EXPECT_EQ(count, static_cast<size_t>(destructNumber));
232 EXPECT_EQ(count, static_cast<size_t>(destructNumber));
233 } 226 }
234 227
235 // WrappedInt class will fail if it was memmoved or memcpyed. 228 // WrappedInt class will fail if it was memmoved or memcpyed.
236 HashSet<void*> constructedWrappedInts; 229 HashSet<void*> constructedWrappedInts;
237 230
238 class WrappedInt { 231 class WrappedInt {
239 public: 232 public:
240 WrappedInt(int i = 0) 233 WrappedInt(int i = 0)
241 : m_originalThisPtr(this) 234 : m_originalThisPtr(this), m_i(i) {
242 , m_i(i) 235 constructedWrappedInts.add(this);
243 { 236 }
244 constructedWrappedInts.add(this); 237
245 } 238 WrappedInt(const WrappedInt& other)
246 239 : m_originalThisPtr(this), m_i(other.m_i) {
247 WrappedInt(const WrappedInt& other) 240 constructedWrappedInts.add(this);
248 : m_originalThisPtr(this) 241 }
249 , m_i(other.m_i) 242
250 { 243 WrappedInt& operator=(const WrappedInt& other) {
251 constructedWrappedInts.add(this); 244 m_i = other.m_i;
252 } 245 return *this;
253 246 }
254 WrappedInt& operator=(const WrappedInt& other) 247
255 { 248 ~WrappedInt() {
256 m_i = other.m_i; 249 EXPECT_EQ(m_originalThisPtr, this);
257 return *this; 250 EXPECT_TRUE(constructedWrappedInts.contains(this));
258 } 251 constructedWrappedInts.remove(this);
259 252 }
260 ~WrappedInt() 253
261 { 254 int get() const { return m_i; }
262 EXPECT_EQ(m_originalThisPtr, this); 255
263 EXPECT_TRUE(constructedWrappedInts.contains(this)); 256 private:
264 constructedWrappedInts.remove(this); 257 void* m_originalThisPtr;
265 } 258 int m_i;
266
267 int get() const { return m_i; }
268
269 private:
270 void* m_originalThisPtr;
271 int m_i;
272 }; 259 };
273 260
274 TEST(DequeTest, SwapWithoutInlineCapacity) 261 TEST(DequeTest, SwapWithoutInlineCapacity) {
275 { 262 Deque<WrappedInt> dequeA;
276 Deque<WrappedInt> dequeA; 263 dequeA.append(WrappedInt(1));
277 dequeA.append(WrappedInt(1)); 264 Deque<WrappedInt> dequeB;
278 Deque<WrappedInt> dequeB; 265 dequeB.append(WrappedInt(2));
279 dequeB.append(WrappedInt(2)); 266
280 267 ASSERT_EQ(dequeA.size(), dequeB.size());
281 ASSERT_EQ(dequeA.size(), dequeB.size()); 268 dequeA.swap(dequeB);
282 dequeA.swap(dequeB); 269
283 270 ASSERT_EQ(1u, dequeA.size());
284 ASSERT_EQ(1u, dequeA.size()); 271 EXPECT_EQ(2, dequeA.first().get());
285 EXPECT_EQ(2, dequeA.first().get()); 272 ASSERT_EQ(1u, dequeB.size());
286 ASSERT_EQ(1u, dequeB.size()); 273 EXPECT_EQ(1, dequeB.first().get());
287 EXPECT_EQ(1, dequeB.first().get()); 274
288 275 dequeA.append(WrappedInt(3));
289 dequeA.append(WrappedInt(3)); 276
290 277 ASSERT_GT(dequeA.size(), dequeB.size());
291 ASSERT_GT(dequeA.size(), dequeB.size()); 278 dequeA.swap(dequeB);
292 dequeA.swap(dequeB); 279
293 280 ASSERT_EQ(1u, dequeA.size());
294 ASSERT_EQ(1u, dequeA.size()); 281 EXPECT_EQ(1, dequeA.first().get());
295 EXPECT_EQ(1, dequeA.first().get()); 282 ASSERT_EQ(2u, dequeB.size());
296 ASSERT_EQ(2u, dequeB.size()); 283 EXPECT_EQ(2, dequeB.first().get());
297 EXPECT_EQ(2, dequeB.first().get()); 284
298 285 ASSERT_LT(dequeA.size(), dequeB.size());
299 ASSERT_LT(dequeA.size(), dequeB.size()); 286 dequeA.swap(dequeB);
300 dequeA.swap(dequeB); 287
301 288 ASSERT_EQ(2u, dequeA.size());
302 ASSERT_EQ(2u, dequeA.size()); 289 EXPECT_EQ(2, dequeA.first().get());
303 EXPECT_EQ(2, dequeA.first().get()); 290 ASSERT_EQ(1u, dequeB.size());
304 ASSERT_EQ(1u, dequeB.size()); 291 EXPECT_EQ(1, dequeB.first().get());
305 EXPECT_EQ(1, dequeB.first().get()); 292
306 293 dequeA.append(WrappedInt(4));
307 dequeA.append(WrappedInt(4)); 294 dequeA.swap(dequeB);
308 dequeA.swap(dequeB); 295
309 296 ASSERT_EQ(1u, dequeA.size());
310 ASSERT_EQ(1u, dequeA.size()); 297 EXPECT_EQ(1, dequeA.first().get());
311 EXPECT_EQ(1, dequeA.first().get()); 298 ASSERT_EQ(3u, dequeB.size());
312 ASSERT_EQ(3u, dequeB.size()); 299 EXPECT_EQ(2, dequeB.first().get());
313 EXPECT_EQ(2, dequeB.first().get()); 300
314 301 dequeB.swap(dequeA);
315 dequeB.swap(dequeA); 302 }
316 } 303
317 304 } // anonymous namespace
318 } // anonymous namespace 305
319 306 } // namespace WTF
320 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/Deque.h ('k') | third_party/WebKit/Source/wtf/DoublyLinkedList.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698