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

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

Issue 2396533004: Introduce a FlatMap and FlatSet into WTF (Closed)
Patch Set: Add missing ostream override Created 4 years, 2 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/FlatMap.h ('k') | third_party/WebKit/Source/wtf/FlatSet.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 2016 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 "wtf/FlatMap.h"
6
7 #include "testing/gmock/include/gmock/gmock.h"
8
9 using testing::ElementsAre;
10
11 namespace WTF {
12
13 TEST(FlatMapTest, Basic) {
14 FlatMap<int, int> map;
15 EXPECT_TRUE(map.empty());
16 EXPECT_EQ(0ul, map.size());
17 }
18
19 TEST(FlatMapTest, InsertBasic) {
20 FlatMap<int, int> map;
21
22 EXPECT_TRUE(map.insert(std::make_pair(1, 2)).second);
23 EXPECT_FALSE(map.empty());
24 EXPECT_EQ(1ul, map.size());
25 EXPECT_EQ(2, map.find(1)->second);
26
27 EXPECT_FALSE(map.insert(std::make_pair(1, 3)).second);
28 EXPECT_EQ(3, map.find(1)->second);
29 }
30
31 TEST(FlatMapTest, InsertIncrementing) {
32 FlatMap<int, int> map;
33
34 for (int i = 0; i < 16; i++) {
35 EXPECT_EQ(static_cast<size_t>(i), map.size());
36 EXPECT_TRUE(map.insert(std::make_pair(i, 100 + i)).second);
37 }
38
39 EXPECT_EQ(16ul, map.size());
40
41 for (int i = 0; i < 16; i++) {
42 EXPECT_EQ(100 + i, map.find(i)->second) << "i = " << i;
43 }
44 }
45
46 TEST(FlatMapTest, InsertDecrementing) {
47 FlatMap<int, int> map;
48
49 for (int i = 0; i < 16; i++) {
50 EXPECT_EQ(static_cast<size_t>(i), map.size());
51 EXPECT_TRUE(map.insert(std::make_pair(16 - i, 100 + i)).second);
52 }
53
54 EXPECT_EQ(16ul, map.size());
55
56 for (int i = 0; i < 16; i++) {
57 EXPECT_EQ(100 + i, map.find(16 - i)->second) << "i = " << i;
58 }
59 }
60
61 TEST(FlatMapTest, InsertOutsidesIn) {
62 FlatMap<int, int> map;
63
64 for (int i = 0; i < 16; i++) {
65 EXPECT_EQ(static_cast<size_t>(i * 2), map.size());
66 EXPECT_TRUE(map.insert(std::make_pair(i, 100 + i)).second);
67 EXPECT_TRUE(map.insert(std::make_pair(32 - i, 200 + i)).second);
68 }
69
70 for (int i = 0; i < 16; i++) {
71 EXPECT_EQ(100 + i, map.find(i)->second) << "i = " << i;
72 EXPECT_EQ(200 + i, map.find(32 - i)->second) << "i = " << i;
73 }
74 }
75
76 TEST(FlatMapTest, InsertOutsidesIn2) {
77 FlatMap<int, int> map;
78
79 for (int i = 0; i < 16; i++) {
80 EXPECT_EQ(static_cast<size_t>(i * 2), map.size());
81 EXPECT_TRUE(map.insert(std::make_pair(32 - i, 200 + i)).second);
82 EXPECT_TRUE(map.insert(std::make_pair(i, 100 + i)).second);
83 }
84
85 for (int i = 0; i < 16; i++) {
86 EXPECT_EQ(100 + i, map.find(i)->second) << "i = " << i;
87 EXPECT_EQ(200 + i, map.find(32 - i)->second) << "i = " << i;
88 }
89 }
90
91 TEST(FlatMapTest, Erase) {
92 FlatMap<int, int> map;
93
94 for (int i = 0; i < 50; i++)
95 map.insertUnique(std::make_pair(i * 2, i * 10));
96
97 for (size_t i = 49; !map.empty(); i--) {
98 EXPECT_EQ(i + 1u, map.size());
99 ASSERT_EQ(1u, map.erase(i * 2));
100 EXPECT_EQ(0u, map.erase(i * 2 + 1));
101 }
102 }
103
104 TEST(FlatMapTest, EraseOutsideIn) {
105 FlatMap<int, int> map;
106
107 for (int i = 0; i < 16; i++) {
108 map.insert(std::make_pair(i, 100 + i));
109 map.insert(std::make_pair(32 - i, 200 + i));
110 }
111
112 for (int i = 0; i < 16; i++) {
113 EXPECT_EQ(static_cast<size_t>(32 - i * 2), map.size());
114 ASSERT_EQ(1u, map.erase(i)) << "i = " << i;
115 ASSERT_EQ(1u, map.erase(32 - i)) << "i = " << i;
116 }
117
118 EXPECT_TRUE(map.empty());
119 }
120
121 TEST(FlatMapTest, EraseIterator) {
122 FlatMap<int, int> map;
123
124 for (int i = 0; i < 50; i++)
125 map.insertUnique(std::make_pair(i * 2, i * 10));
126
127 for (size_t i = 0; !map.empty(); i++) {
128 EXPECT_EQ(50ul - i, map.size());
129 EXPECT_EQ(static_cast<int>(i * 2), map.begin()->first);
130 EXPECT_EQ(static_cast<int>(i * 10), map.begin()->second);
131 EXPECT_EQ(98, map.rbegin()->first);
132 EXPECT_EQ(490, map.rbegin()->second);
133 map.erase(map.begin());
134 }
135
136 EXPECT_TRUE(map.empty());
137 }
138
139 TEST(FlatMapTest, EraseReverseIterator) {
140 FlatMap<int, int> map;
141
142 for (int i = 0; i < 50; i++)
143 map.insertUnique(std::make_pair(i * 2, i * 10));
144
145 for (size_t i = 0; !map.empty(); i++) {
146 EXPECT_EQ(50ul - i, map.size());
147 EXPECT_EQ(0, map.begin()->first);
148 EXPECT_EQ(0, map.begin()->second);
149 EXPECT_EQ(static_cast<int>((49 - i) * 2), map.rbegin()->first);
150 EXPECT_EQ(static_cast<int>((49 - i) * 10), map.rbegin()->second);
151 map.erase(map.rbegin());
152 }
153
154 EXPECT_TRUE(map.empty());
155 }
156
157 TEST(FlatMapTest, EraseNonExistant) {
158 FlatMap<int, int> map;
159
160 map.insert(std::make_pair(1, 100));
161 EXPECT_EQ(0u, map.erase(2));
162 }
163
164 TEST(FlatMapTest, EraseAllButOneThenInsertOne) {
165 FlatMap<int, int> map;
166
167 map.insert(std::make_pair(1, 1));
168 map.insert(std::make_pair(2, 2));
169 map.insert(std::make_pair(3, 3));
170 map.insert(std::make_pair(4, 4));
171 map.insert(std::make_pair(5, 5));
172
173 map.erase(1);
174 map.erase(2);
175 map.erase(3);
176 map.erase(4);
177
178 EXPECT_TRUE(map.find(5) != map.end());
179
180 map.insert(std::make_pair(6, 6));
181 EXPECT_TRUE(map.find(6) != map.end());
182 }
183
184 TEST(FlatMapTest, ChangeKey) {
185 FlatMap<int, int> map;
186
187 map.insert(std::make_pair(1, 11));
188 map.insert(std::make_pair(3, 33));
189 map.insert(std::make_pair(5, 55));
190 map.insert(std::make_pair(7, 77));
191 map.insert(std::make_pair(9, 99));
192
193 map.ChangeKey(map.find(7), 2);
194
195 EXPECT_THAT(map, ElementsAre(std::make_pair(1, 11), std::make_pair(2, 77),
196 std::make_pair(3, 33), std::make_pair(5, 55),
197 std::make_pair(9, 99)));
198
199 map.ChangeKey(map.find(2), 0);
200
201 EXPECT_THAT(map, ElementsAre(std::make_pair(0, 77), std::make_pair(1, 11),
202 std::make_pair(3, 33), std::make_pair(5, 55),
203 std::make_pair(9, 99)));
204
205 map.ChangeKey(map.begin(), 10);
206
207 EXPECT_THAT(map, ElementsAre(std::make_pair(1, 11), std::make_pair(3, 33),
208 std::make_pair(5, 55), std::make_pair(9, 99),
209 std::make_pair(10, 77)));
210 }
211
212 TEST(FlatMapTest, ChangeKeyReplaceElement) {
213 FlatMap<int, int> map;
214
215 map.insert(std::make_pair(1, 11));
216 map.insert(std::make_pair(3, 33));
217 map.insert(std::make_pair(5, 55));
218 map.insert(std::make_pair(7, 77));
219 map.insert(std::make_pair(9, 99));
220
221 map.ChangeKey(map.find(3), 7);
222
223 EXPECT_THAT(map, ElementsAre(std::make_pair(1, 11), std::make_pair(5, 55),
224 std::make_pair(7, 33), std::make_pair(9, 99)));
225 }
226
227 TEST(FlatMapTest, ChangeKeyUnique) {
228 FlatMap<int, int> map;
229
230 map.insert(std::make_pair(1, 11));
231 map.insert(std::make_pair(3, 33));
232 map.insert(std::make_pair(5, 55));
233 map.insert(std::make_pair(7, 77));
234 map.insert(std::make_pair(9, 99));
235
236 map.ChangeKeyUnique(map.find(7), 2);
237
238 EXPECT_THAT(map, ElementsAre(std::make_pair(1, 11), std::make_pair(2, 77),
239 std::make_pair(3, 33), std::make_pair(5, 55),
240 std::make_pair(9, 99)));
241
242 map.ChangeKeyUnique(map.find(2), 0);
243
244 EXPECT_THAT(map, ElementsAre(std::make_pair(0, 77), std::make_pair(1, 11),
245 std::make_pair(3, 33), std::make_pair(5, 55),
246 std::make_pair(9, 99)));
247
248 map.ChangeKeyUnique(map.begin(), 10);
249
250 EXPECT_THAT(map, ElementsAre(std::make_pair(1, 11), std::make_pair(3, 33),
251 std::make_pair(5, 55), std::make_pair(9, 99),
252 std::make_pair(10, 77)));
253 }
254
255 TEST(FlatMapTest, ChangeKeyUp) {
256 FlatMap<int, int> map;
257
258 for (int i = 0; i < 100; i++)
259 map.insert(std::make_pair(i, i));
260
261 for (int i = 0; i < 100; i++)
262 map.ChangeKey(map.begin(), 100 + i);
263
264 auto it = map.begin();
265 for (int i = 0; i < 100; i++, it++) {
266 EXPECT_EQ(i + 100, it->first);
267 EXPECT_EQ(i, it->second);
268 }
269 }
270
271 TEST(FlatMapTest, ChangeKeyDown) {
272 FlatMap<int, int> map;
273
274 for (int i = 0; i < 100; i++)
275 map.insert(std::make_pair(i, i));
276
277 for (int i = 0; i < 100; i++)
278 map.ChangeKey(map.find(i), i - 100);
279
280 auto it = map.begin();
281 for (int i = 0; i < 100; i++, it++) {
282 EXPECT_EQ(i - 100, it->first);
283 EXPECT_EQ(i, it->second);
284 }
285 }
286
287 TEST(FlatMapTest, Iterators) {
288 FlatMap<int, int> map;
289
290 map.insert(std::make_pair(5, 55));
291 map.insert(std::make_pair(4, 44));
292 map.insert(std::make_pair(1, 11));
293 map.insert(std::make_pair(6, 66));
294 map.insert(std::make_pair(2, 22));
295 map.insert(std::make_pair(7, 77));
296 map.insert(std::make_pair(3, 33));
297
298 EXPECT_NE(map.begin(), map.end());
299 EXPECT_NE(map.rbegin(), map.rend());
300
301 auto it = map.begin();
302 EXPECT_EQ(std::make_pair(1, 11), *it++);
303 EXPECT_EQ(std::make_pair(2, 22), *it++);
304 EXPECT_EQ(std::make_pair(3, 33), *it++);
305 EXPECT_EQ(std::make_pair(4, 44), *it++);
306 EXPECT_EQ(std::make_pair(5, 55), *it++);
307 EXPECT_EQ(std::make_pair(6, 66), *it++);
308 EXPECT_EQ(std::make_pair(7, 77), *it++);
309 EXPECT_EQ(map.end(), it);
310
311 auto rit = map.rbegin();
312 EXPECT_EQ(std::make_pair(7, 77), *rit++);
313 EXPECT_EQ(std::make_pair(6, 66), *rit++);
314 EXPECT_EQ(std::make_pair(5, 55), *rit++);
315 EXPECT_EQ(std::make_pair(4, 44), *rit++);
316 EXPECT_EQ(std::make_pair(3, 33), *rit++);
317 EXPECT_EQ(std::make_pair(2, 22), *rit++);
318 EXPECT_EQ(std::make_pair(1, 11), *rit++);
319 EXPECT_EQ(map.rend(), rit);
320 }
321
322 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/FlatMap.h ('k') | third_party/WebKit/Source/wtf/FlatSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698