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

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

Issue 2743023002: Migrate WTF::Deque::append() to ::push_back() (Closed)
Patch Set: rebase Created 3 years, 9 months 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') | no next file » | 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 ++index; 88 ++index;
89 } 89 }
90 } 90 }
91 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it); 91 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it);
92 EXPECT_EQ(increment ? deque.size() : 0, index); 92 EXPECT_EQ(increment ? deque.size() : 0, index);
93 } 93 }
94 94
95 template <size_t inlineCapacity> 95 template <size_t inlineCapacity>
96 void reverseTest() { 96 void reverseTest() {
97 Deque<int, inlineCapacity> intDeque; 97 Deque<int, inlineCapacity> intDeque;
98 intDeque.append(10); 98 intDeque.push_back(10);
99 intDeque.append(11); 99 intDeque.push_back(11);
100 intDeque.append(12); 100 intDeque.push_back(12);
101 intDeque.append(13); 101 intDeque.push_back(13);
102 102
103 checkNumberSequence(intDeque, 10, 13, true); 103 checkNumberSequence(intDeque, 10, 13, true);
104 checkNumberSequence(intDeque, 13, 10, false); 104 checkNumberSequence(intDeque, 13, 10, false);
105 checkNumberSequenceReverse(intDeque, 13, 10, true); 105 checkNumberSequenceReverse(intDeque, 13, 10, true);
106 checkNumberSequenceReverse(intDeque, 10, 13, false); 106 checkNumberSequenceReverse(intDeque, 10, 13, false);
107 107
108 intDeque.append(14); 108 intDeque.push_back(14);
109 intDeque.append(15); 109 intDeque.push_back(15);
110 EXPECT_EQ(10, intDeque.takeFirst()); 110 EXPECT_EQ(10, intDeque.takeFirst());
111 EXPECT_EQ(15, intDeque.takeLast()); 111 EXPECT_EQ(15, intDeque.takeLast());
112 checkNumberSequence(intDeque, 11, 14, true); 112 checkNumberSequence(intDeque, 11, 14, true);
113 checkNumberSequence(intDeque, 14, 11, false); 113 checkNumberSequence(intDeque, 14, 11, false);
114 checkNumberSequenceReverse(intDeque, 14, 11, true); 114 checkNumberSequenceReverse(intDeque, 14, 11, true);
115 checkNumberSequenceReverse(intDeque, 11, 14, false); 115 checkNumberSequenceReverse(intDeque, 11, 14, false);
116 116
117 for (int i = 15; i < 200; ++i) 117 for (int i = 15; i < 200; ++i)
118 intDeque.append(i); 118 intDeque.push_back(i);
119 checkNumberSequence(intDeque, 11, 199, true); 119 checkNumberSequence(intDeque, 11, 199, true);
120 checkNumberSequence(intDeque, 199, 11, false); 120 checkNumberSequence(intDeque, 199, 11, false);
121 checkNumberSequenceReverse(intDeque, 199, 11, true); 121 checkNumberSequenceReverse(intDeque, 199, 11, true);
122 checkNumberSequenceReverse(intDeque, 11, 199, false); 122 checkNumberSequenceReverse(intDeque, 11, 199, false);
123 123
124 for (int i = 0; i < 180; ++i) { 124 for (int i = 0; i < 180; ++i) {
125 EXPECT_EQ(i + 11, intDeque[0]); 125 EXPECT_EQ(i + 11, intDeque[0]);
126 EXPECT_EQ(i + 11, intDeque.takeFirst()); 126 EXPECT_EQ(i + 11, intDeque.takeFirst());
127 } 127 }
128 checkNumberSequence(intDeque, 191, 199, true); 128 checkNumberSequence(intDeque, 191, 199, true);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 168
169 private: 169 private:
170 int m_i; 170 int m_i;
171 int* m_destructNumber; 171 int* m_destructNumber;
172 }; 172 };
173 173
174 template <typename OwnPtrDeque> 174 template <typename OwnPtrDeque>
175 void ownPtrTest() { 175 void ownPtrTest() {
176 int destructNumber = 0; 176 int destructNumber = 0;
177 OwnPtrDeque deque; 177 OwnPtrDeque deque;
178 deque.append(WTF::wrapUnique(new DestructCounter(0, &destructNumber))); 178 deque.push_back(WTF::wrapUnique(new DestructCounter(0, &destructNumber)));
179 deque.append(WTF::wrapUnique(new DestructCounter(1, &destructNumber))); 179 deque.push_back(WTF::wrapUnique(new DestructCounter(1, &destructNumber)));
180 EXPECT_EQ(2u, deque.size()); 180 EXPECT_EQ(2u, deque.size());
181 181
182 std::unique_ptr<DestructCounter>& counter0 = deque.first(); 182 std::unique_ptr<DestructCounter>& counter0 = deque.first();
183 EXPECT_EQ(0, counter0->get()); 183 EXPECT_EQ(0, counter0->get());
184 int counter1 = deque.last()->get(); 184 int counter1 = deque.last()->get();
185 EXPECT_EQ(1, counter1); 185 EXPECT_EQ(1, counter1);
186 EXPECT_EQ(0, destructNumber); 186 EXPECT_EQ(0, destructNumber);
187 187
188 size_t index = 0; 188 size_t index = 0;
189 for (auto iter = deque.begin(); iter != deque.end(); ++iter) { 189 for (auto iter = deque.begin(); iter != deque.end(); ++iter) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 258
259 int value() const { return m_i; } 259 int value() const { return m_i; }
260 260
261 private: 261 private:
262 WTF_MAKE_NONCOPYABLE(MoveOnly); 262 WTF_MAKE_NONCOPYABLE(MoveOnly);
263 int m_i; 263 int m_i;
264 }; 264 };
265 265
266 TEST(DequeTest, MoveOnlyType) { 266 TEST(DequeTest, MoveOnlyType) {
267 Deque<MoveOnly> deque; 267 Deque<MoveOnly> deque;
268 deque.append(MoveOnly(1)); 268 deque.push_back(MoveOnly(1));
269 deque.append(MoveOnly(2)); 269 deque.push_back(MoveOnly(2));
270 EXPECT_EQ(2u, deque.size()); 270 EXPECT_EQ(2u, deque.size());
271 271
272 ASSERT_EQ(1, deque.first().value()); 272 ASSERT_EQ(1, deque.first().value());
273 ASSERT_EQ(2, deque.last().value()); 273 ASSERT_EQ(2, deque.last().value());
274 274
275 MoveOnly oldFirst = deque.takeFirst(); 275 MoveOnly oldFirst = deque.takeFirst();
276 ASSERT_EQ(1, oldFirst.value()); 276 ASSERT_EQ(1, oldFirst.value());
277 EXPECT_EQ(1u, deque.size()); 277 EXPECT_EQ(1u, deque.size());
278 278
279 Deque<MoveOnly> otherDeque; 279 Deque<MoveOnly> otherDeque;
(...skipping 30 matching lines...) Expand all
310 int get() const { return m_i; } 310 int get() const { return m_i; }
311 311
312 private: 312 private:
313 void* m_originalThisPtr; 313 void* m_originalThisPtr;
314 int m_i; 314 int m_i;
315 }; 315 };
316 316
317 template <size_t inlineCapacity> 317 template <size_t inlineCapacity>
318 void swapWithOrWithoutInlineCapacity() { 318 void swapWithOrWithoutInlineCapacity() {
319 Deque<WrappedInt, inlineCapacity> dequeA; 319 Deque<WrappedInt, inlineCapacity> dequeA;
320 dequeA.append(WrappedInt(1)); 320 dequeA.push_back(WrappedInt(1));
321 Deque<WrappedInt, inlineCapacity> dequeB; 321 Deque<WrappedInt, inlineCapacity> dequeB;
322 dequeB.append(WrappedInt(2)); 322 dequeB.push_back(WrappedInt(2));
323 323
324 ASSERT_EQ(dequeA.size(), dequeB.size()); 324 ASSERT_EQ(dequeA.size(), dequeB.size());
325 dequeA.swap(dequeB); 325 dequeA.swap(dequeB);
326 326
327 ASSERT_EQ(1u, dequeA.size()); 327 ASSERT_EQ(1u, dequeA.size());
328 EXPECT_EQ(2, dequeA.first().get()); 328 EXPECT_EQ(2, dequeA.first().get());
329 ASSERT_EQ(1u, dequeB.size()); 329 ASSERT_EQ(1u, dequeB.size());
330 EXPECT_EQ(1, dequeB.first().get()); 330 EXPECT_EQ(1, dequeB.first().get());
331 331
332 dequeA.append(WrappedInt(3)); 332 dequeA.push_back(WrappedInt(3));
333 333
334 ASSERT_GT(dequeA.size(), dequeB.size()); 334 ASSERT_GT(dequeA.size(), dequeB.size());
335 dequeA.swap(dequeB); 335 dequeA.swap(dequeB);
336 336
337 ASSERT_EQ(1u, dequeA.size()); 337 ASSERT_EQ(1u, dequeA.size());
338 EXPECT_EQ(1, dequeA.first().get()); 338 EXPECT_EQ(1, dequeA.first().get());
339 ASSERT_EQ(2u, dequeB.size()); 339 ASSERT_EQ(2u, dequeB.size());
340 EXPECT_EQ(2, dequeB.first().get()); 340 EXPECT_EQ(2, dequeB.first().get());
341 341
342 ASSERT_LT(dequeA.size(), dequeB.size()); 342 ASSERT_LT(dequeA.size(), dequeB.size());
343 dequeA.swap(dequeB); 343 dequeA.swap(dequeB);
344 344
345 ASSERT_EQ(2u, dequeA.size()); 345 ASSERT_EQ(2u, dequeA.size());
346 EXPECT_EQ(2, dequeA.first().get()); 346 EXPECT_EQ(2, dequeA.first().get());
347 ASSERT_EQ(1u, dequeB.size()); 347 ASSERT_EQ(1u, dequeB.size());
348 EXPECT_EQ(1, dequeB.first().get()); 348 EXPECT_EQ(1, dequeB.first().get());
349 349
350 dequeA.append(WrappedInt(4)); 350 dequeA.push_back(WrappedInt(4));
351 dequeA.swap(dequeB); 351 dequeA.swap(dequeB);
352 352
353 ASSERT_EQ(1u, dequeA.size()); 353 ASSERT_EQ(1u, dequeA.size());
354 EXPECT_EQ(1, dequeA.first().get()); 354 EXPECT_EQ(1, dequeA.first().get());
355 ASSERT_EQ(3u, dequeB.size()); 355 ASSERT_EQ(3u, dequeB.size());
356 EXPECT_EQ(2, dequeB.first().get()); 356 EXPECT_EQ(2, dequeB.first().get());
357 357
358 dequeB.swap(dequeA); 358 dequeB.swap(dequeA);
359 } 359 }
360 360
(...skipping 20 matching lines...) Expand all
381 } 381 }
382 382
383 template <size_t inlineCapacity> 383 template <size_t inlineCapacity>
384 void testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity() { 384 void testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity() {
385 LivenessCounter::s_live = 0; 385 LivenessCounter::s_live = 0;
386 LivenessCounter counter; 386 LivenessCounter counter;
387 EXPECT_EQ(0u, LivenessCounter::s_live); 387 EXPECT_EQ(0u, LivenessCounter::s_live);
388 388
389 Deque<RefPtr<LivenessCounter>, inlineCapacity> deque; 389 Deque<RefPtr<LivenessCounter>, inlineCapacity> deque;
390 Deque<RefPtr<LivenessCounter>, inlineCapacity> deque2; 390 Deque<RefPtr<LivenessCounter>, inlineCapacity> deque2;
391 deque.append(&counter); 391 deque.push_back(&counter);
392 deque2.append(&counter); 392 deque2.push_back(&counter);
393 EXPECT_EQ(2u, LivenessCounter::s_live); 393 EXPECT_EQ(2u, LivenessCounter::s_live);
394 394
395 // Add various numbers of elements to deques, then remove various numbers 395 // Add various numbers of elements to deques, then remove various numbers
396 // of elements from the head. This creates in-use ranges in the backing 396 // of elements from the head. This creates in-use ranges in the backing
397 // that sometimes wrap around the end of the buffer, testing various ways 397 // that sometimes wrap around the end of the buffer, testing various ways
398 // in which the in-use ranges of the inline buffers can overlap when we 398 // in which the in-use ranges of the inline buffers can overlap when we
399 // call swap(). 399 // call swap().
400 for (unsigned i = 0; i < 12; i++) { 400 for (unsigned i = 0; i < 12; i++) {
401 if (!interestingNumber(i)) 401 if (!interestingNumber(i))
402 continue; 402 continue;
403 for (unsigned j = i; j < 12; j++) { 403 for (unsigned j = i; j < 12; j++) {
404 if (!interestingNumber(j)) 404 if (!interestingNumber(j))
405 continue; 405 continue;
406 deque.clear(); 406 deque.clear();
407 deque2.clear(); 407 deque2.clear();
408 EXPECT_EQ(0u, LivenessCounter::s_live); 408 EXPECT_EQ(0u, LivenessCounter::s_live);
409 for (unsigned k = 0; k < j; k++) 409 for (unsigned k = 0; k < j; k++)
410 deque.append(&counter); 410 deque.push_back(&counter);
411 EXPECT_EQ(j, LivenessCounter::s_live); 411 EXPECT_EQ(j, LivenessCounter::s_live);
412 EXPECT_EQ(j, deque.size()); 412 EXPECT_EQ(j, deque.size());
413 for (unsigned k = 0; k < i; k++) 413 for (unsigned k = 0; k < i; k++)
414 deque.removeFirst(); 414 deque.removeFirst();
415 415
416 EXPECT_EQ(j - i, LivenessCounter::s_live); 416 EXPECT_EQ(j - i, LivenessCounter::s_live);
417 EXPECT_EQ(j - i, deque.size()); 417 EXPECT_EQ(j - i, deque.size());
418 deque.swap(deque2); 418 deque.swap(deque2);
419 EXPECT_EQ(j - i, LivenessCounter::s_live); 419 EXPECT_EQ(j - i, LivenessCounter::s_live);
420 EXPECT_EQ(0u, deque.size()); 420 EXPECT_EQ(0u, deque.size());
421 EXPECT_EQ(j - i, deque2.size()); 421 EXPECT_EQ(j - i, deque2.size());
422 deque.swap(deque2); 422 deque.swap(deque2);
423 EXPECT_EQ(j - i, LivenessCounter::s_live); 423 EXPECT_EQ(j - i, LivenessCounter::s_live);
424 424
425 deque2.append(&counter); 425 deque2.push_back(&counter);
426 deque2.append(&counter); 426 deque2.push_back(&counter);
427 deque2.append(&counter); 427 deque2.push_back(&counter);
428 428
429 for (unsigned k = 0; k < 12; k++) { 429 for (unsigned k = 0; k < 12; k++) {
430 EXPECT_EQ(3 + j - i, LivenessCounter::s_live); 430 EXPECT_EQ(3 + j - i, LivenessCounter::s_live);
431 EXPECT_EQ(j - i, deque.size()); 431 EXPECT_EQ(j - i, deque.size());
432 EXPECT_EQ(3u, deque2.size()); 432 EXPECT_EQ(3u, deque2.size());
433 deque.swap(deque2); 433 deque.swap(deque2);
434 EXPECT_EQ(3 + j - i, LivenessCounter::s_live); 434 EXPECT_EQ(3 + j - i, LivenessCounter::s_live);
435 EXPECT_EQ(j - i, deque2.size()); 435 EXPECT_EQ(j - i, deque2.size());
436 EXPECT_EQ(3u, deque.size()); 436 EXPECT_EQ(3u, deque.size());
437 deque.swap(deque2); 437 deque.swap(deque2);
438 EXPECT_EQ(3 + j - i, LivenessCounter::s_live); 438 EXPECT_EQ(3 + j - i, LivenessCounter::s_live);
439 EXPECT_EQ(j - i, deque.size()); 439 EXPECT_EQ(j - i, deque.size());
440 EXPECT_EQ(3u, deque2.size()); 440 EXPECT_EQ(3u, deque2.size());
441 441
442 deque2.removeFirst(); 442 deque2.removeFirst();
443 deque2.append(&counter); 443 deque2.push_back(&counter);
444 } 444 }
445 } 445 }
446 } 446 }
447 } 447 }
448 448
449 TEST(DequeTest, SwapWithConstructorsAndDestructors) { 449 TEST(DequeTest, SwapWithConstructorsAndDestructors) {
450 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<0>(); 450 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<0>();
451 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<4>(); 451 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<4>();
452 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<9>(); 452 testDestructorAndConstructorCallsWhenSwappingWithInlineCapacity<9>();
453 } 453 }
(...skipping 16 matching lines...) Expand all
470 continue; 470 continue;
471 for (unsigned size = 0; size < 12; size++) { 471 for (unsigned size = 0; size < 12; size++) {
472 if (!interestingNumber(size)) 472 if (!interestingNumber(size))
473 continue; 473 continue;
474 for (unsigned size2 = 0; size2 < 12; size2++) { 474 for (unsigned size2 = 0; size2 < 12; size2++) {
475 if (!interestingNumber(size2)) 475 if (!interestingNumber(size2))
476 continue; 476 continue;
477 deque.clear(); 477 deque.clear();
478 deque2.clear(); 478 deque2.clear();
479 for (unsigned i = 0; i < pad; i++) 479 for (unsigned i = 0; i < pad; i++)
480 deque.append(103); 480 deque.push_back(103);
481 for (unsigned i = 0; i < pad2; i++) 481 for (unsigned i = 0; i < pad2; i++)
482 deque2.append(888); 482 deque2.push_back(888);
483 for (unsigned i = 0; i < size; i++) 483 for (unsigned i = 0; i < size; i++)
484 deque.append(i); 484 deque.push_back(i);
485 for (unsigned i = 0; i < size2; i++) 485 for (unsigned i = 0; i < size2; i++)
486 deque2.append(i + 42); 486 deque2.push_back(i + 42);
487 for (unsigned i = 0; i < pad; i++) 487 for (unsigned i = 0; i < pad; i++)
488 EXPECT_EQ(103u, deque.takeFirst()); 488 EXPECT_EQ(103u, deque.takeFirst());
489 for (unsigned i = 0; i < pad2; i++) 489 for (unsigned i = 0; i < pad2; i++)
490 EXPECT_EQ(888u, deque2.takeFirst()); 490 EXPECT_EQ(888u, deque2.takeFirst());
491 EXPECT_EQ(size, deque.size()); 491 EXPECT_EQ(size, deque.size());
492 EXPECT_EQ(size2, deque2.size()); 492 EXPECT_EQ(size2, deque2.size());
493 deque.swap(deque2); 493 deque.swap(deque2);
494 for (unsigned i = 0; i < size; i++) 494 for (unsigned i = 0; i < size; i++)
495 EXPECT_EQ(i, deque2.takeFirst()); 495 EXPECT_EQ(i, deque2.takeFirst());
496 for (unsigned i = 0; i < size2; i++) 496 for (unsigned i = 0; i < size2; i++)
497 EXPECT_EQ(i + 42, deque.takeFirst()); 497 EXPECT_EQ(i + 42, deque.takeFirst());
498 } 498 }
499 } 499 }
500 } 500 }
501 } 501 }
502 } 502 }
503 503
504 TEST(DequeTest, ValuesMovedAndSwappedWithInlineCapacity) { 504 TEST(DequeTest, ValuesMovedAndSwappedWithInlineCapacity) {
505 testValuesMovedAndSwappedWithInlineCapacity<0>(); 505 testValuesMovedAndSwappedWithInlineCapacity<0>();
506 testValuesMovedAndSwappedWithInlineCapacity<4>(); 506 testValuesMovedAndSwappedWithInlineCapacity<4>();
507 testValuesMovedAndSwappedWithInlineCapacity<9>(); 507 testValuesMovedAndSwappedWithInlineCapacity<9>();
508 } 508 }
509 509
510 TEST(DequeTest, UniquePtr) { 510 TEST(DequeTest, UniquePtr) {
511 using Pointer = std::unique_ptr<int>; 511 using Pointer = std::unique_ptr<int>;
512 Deque<Pointer> deque; 512 Deque<Pointer> deque;
513 deque.append(Pointer(new int(1))); 513 deque.push_back(Pointer(new int(1)));
514 deque.append(Pointer(new int(2))); 514 deque.push_back(Pointer(new int(2)));
515 deque.prepend(Pointer(new int(-1))); 515 deque.prepend(Pointer(new int(-1)));
516 deque.prepend(Pointer(new int(-2))); 516 deque.prepend(Pointer(new int(-2)));
517 ASSERT_EQ(4u, deque.size()); 517 ASSERT_EQ(4u, deque.size());
518 EXPECT_EQ(-2, *deque[0]); 518 EXPECT_EQ(-2, *deque[0]);
519 EXPECT_EQ(-1, *deque[1]); 519 EXPECT_EQ(-1, *deque[1]);
520 EXPECT_EQ(1, *deque[2]); 520 EXPECT_EQ(1, *deque[2]);
521 EXPECT_EQ(2, *deque[3]); 521 EXPECT_EQ(2, *deque[3]);
522 522
523 Pointer first(deque.takeFirst()); 523 Pointer first(deque.takeFirst());
524 EXPECT_EQ(-2, *first); 524 EXPECT_EQ(-2, *first);
525 Pointer last(deque.takeLast()); 525 Pointer last(deque.takeLast());
526 EXPECT_EQ(2, *last); 526 EXPECT_EQ(2, *last);
527 527
528 EXPECT_EQ(2u, deque.size()); 528 EXPECT_EQ(2u, deque.size());
529 deque.removeFirst(); 529 deque.removeFirst();
530 deque.pop_back(); 530 deque.pop_back();
531 EXPECT_EQ(0u, deque.size()); 531 EXPECT_EQ(0u, deque.size());
532 532
533 deque.append(Pointer(new int(42))); 533 deque.push_back(Pointer(new int(42)));
534 deque[0] = Pointer(new int(24)); 534 deque[0] = Pointer(new int(24));
535 ASSERT_EQ(1u, deque.size()); 535 ASSERT_EQ(1u, deque.size());
536 EXPECT_EQ(24, *deque[0]); 536 EXPECT_EQ(24, *deque[0]);
537 537
538 deque.clear(); 538 deque.clear();
539 } 539 }
540 540
541 class CountCopy final { 541 class CountCopy final {
542 public: 542 public:
543 explicit CountCopy(int* counter = nullptr) : m_counter(counter) {} 543 explicit CountCopy(int* counter = nullptr) : m_counter(counter) {}
(...skipping 11 matching lines...) Expand all
555 private: 555 private:
556 int* m_counter; 556 int* m_counter;
557 }; 557 };
558 558
559 TEST(DequeTest, MoveShouldNotMakeCopy) { 559 TEST(DequeTest, MoveShouldNotMakeCopy) {
560 // Because data in inline buffer may be swapped or moved individually, we 560 // Because data in inline buffer may be swapped or moved individually, we
561 // force the creation of out-of-line buffer so we can make sure there's no 561 // force the creation of out-of-line buffer so we can make sure there's no
562 // element-wise copy/move. 562 // element-wise copy/move.
563 Deque<CountCopy, 1> deque; 563 Deque<CountCopy, 1> deque;
564 int counter = 0; 564 int counter = 0;
565 deque.append(CountCopy(&counter)); 565 deque.push_back(CountCopy(&counter));
566 deque.append(CountCopy(&counter)); 566 deque.push_back(CountCopy(&counter));
567 567
568 Deque<CountCopy, 1> other(deque); 568 Deque<CountCopy, 1> other(deque);
569 counter = 0; 569 counter = 0;
570 deque = std::move(other); // Move assignment. 570 deque = std::move(other); // Move assignment.
571 EXPECT_EQ(0, counter); 571 EXPECT_EQ(0, counter);
572 572
573 counter = 0; 573 counter = 0;
574 Deque<CountCopy, 1> yetAnother(std::move(deque)); // Move construction. 574 Deque<CountCopy, 1> yetAnother(std::move(deque)); // Move construction.
575 EXPECT_EQ(0, counter); 575 EXPECT_EQ(0, counter);
576 } 576 }
577 577
578 TEST(DequeTest, RemoveWhileIterating) { 578 TEST(DequeTest, RemoveWhileIterating) {
579 Deque<int> deque; 579 Deque<int> deque;
580 for (int i = 0; i < 10; ++i) 580 for (int i = 0; i < 10; ++i)
581 deque.append(i); 581 deque.push_back(i);
582 582
583 // All numbers present. 583 // All numbers present.
584 { 584 {
585 int i = 0; 585 int i = 0;
586 for (int v : deque) 586 for (int v : deque)
587 EXPECT_EQ(i++, v); 587 EXPECT_EQ(i++, v);
588 } 588 }
589 589
590 // Remove the even numbers while iterating. 590 // Remove the even numbers while iterating.
591 for (auto it = deque.begin(); it != deque.end(); ++it) { 591 for (auto it = deque.begin(); it != deque.end(); ++it) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 EXPECT_EQ(2u, deque.size()); 629 EXPECT_EQ(2u, deque.size());
630 EXPECT_EQ(3, deque[0].value1); 630 EXPECT_EQ(3, deque[0].value1);
631 EXPECT_EQ(4, deque[0].value2); 631 EXPECT_EQ(4, deque[0].value2);
632 EXPECT_EQ(1, deque[1].value1); 632 EXPECT_EQ(1, deque[1].value1);
633 EXPECT_EQ(2, deque[1].value2); 633 EXPECT_EQ(2, deque[1].value2);
634 } 634 }
635 635
636 } // anonymous namespace 636 } // anonymous namespace
637 637
638 } // namespace WTF 638 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/Deque.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698