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

Side by Side Diff: base/containers/vector_buffer_unittest.cc

Issue 2898213003: Add skeleton circular queue file.
Patch Set: Fix merge 2 Created 3 years, 5 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 | « base/containers/vector_buffer.h ('k') | base/template_util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/containers/vector_buffer.h"
6
7 #include "base/test/copy_only_int.h"
8 #include "base/test/move_only_int.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace base {
12 namespace internal {
13
14 TEST(VectorBuffer, DeletePOD) {
15 constexpr int size = 10;
16 VectorBuffer<int> buffer(size);
17 for (int i = 0; i < size; i++)
18 buffer.begin()[i] = i + 1;
19
20 buffer.DestructRange(buffer.begin(), buffer.end());
21
22 // Delete should do nothing.
23 for (int i = 0; i < size; i++)
24 EXPECT_EQ(i + 1, buffer.begin()[i]);
25 }
26
27 TEST(VectorBuffer, DeleteMoveOnly) {
28 constexpr int size = 10;
29 VectorBuffer<MoveOnlyInt> buffer(size);
30 for (int i = 0; i < size; i++)
31 new (buffer.begin() + i) MoveOnlyInt(i + 1);
32
33 buffer.DestructRange(buffer.begin(), buffer.end());
34
35 // Delete should have reset all of the values to 0.
36 for (int i = 0; i < size; i++)
37 EXPECT_EQ(0, buffer.begin()[i].data());
38 }
39
40 TEST(VectorBuffer, PODMove) {
41 constexpr int size = 10;
42 VectorBuffer<int> dest(size);
43
44 VectorBuffer<int> original(size);
45 for (int i = 0; i < size; i++)
46 original.begin()[i] = i + 1;
47
48 original.MoveRange(original.begin(), original.end(), dest.begin());
49 for (int i = 0; i < size; i++)
50 EXPECT_EQ(i + 1, dest.begin()[i]);
51 }
52
53 TEST(VectorBuffer, MovableMove) {
54 constexpr int size = 10;
55 VectorBuffer<MoveOnlyInt> dest(size);
56
57 VectorBuffer<MoveOnlyInt> original(size);
58 for (int i = 0; i < size; i++)
59 new (original.begin() + i) MoveOnlyInt(i + 1);
60
61 original.MoveRange(original.begin(), original.end(), dest.begin());
62
63 // Moving from a MoveOnlyInt resets to 0.
64 for (int i = 0; i < size; i++) {
65 EXPECT_EQ(0, original.begin()[i].data());
66 EXPECT_EQ(i + 1, dest.begin()[i].data());
67 }
68 }
69
70 TEST(VectorBuffer, CopyToMove) {
71 constexpr int size = 10;
72 VectorBuffer<CopyOnlyInt> dest(size);
73
74 VectorBuffer<CopyOnlyInt> original(size);
75 for (int i = 0; i < size; i++)
76 new (original.begin() + i) CopyOnlyInt(i + 1);
77
78 original.MoveRange(original.begin(), original.end(), dest.begin());
79
80 // The original should have been destructed, which should reset the value to
81 // 0. Technically this dereferences the destructed object.
82 for (int i = 0; i < size; i++) {
83 EXPECT_EQ(0, original.begin()[i].data());
84 EXPECT_EQ(i + 1, dest.begin()[i].data());
85 }
86 }
87
88 } // namespace internal
89 } // namespace base
OLDNEW
« no previous file with comments | « base/containers/vector_buffer.h ('k') | base/template_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698