1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>,
13 // class Alloc = allocator<Value>>
14 // class unordered_multiset
16 // void swap(unordered_multiset& __u);
18 #include <unordered_set>
22 #include "test_macros.h"
23 #include "../../test_compare.h"
24 #include "../../test_hash.h"
25 #include "test_allocator.h"
26 #include "min_allocator.h"
31 typedef test_hash<std::hash<int> > Hash;
32 typedef test_compare<std::equal_to<int> > Compare;
33 typedef test_allocator<int> Alloc;
34 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
35 C c1(0, Hash(1), Compare(1), Alloc(1, 1));
36 C c2(0, Hash(2), Compare(2), Alloc(1, 2));
37 c2.max_load_factor(2);
40 LIBCPP_ASSERT(c1.bucket_count() == 0);
41 assert(c1.size() == 0);
42 assert(c1.hash_function() == Hash(2));
43 assert(c1.key_eq() == Compare(2));
44 assert(c1.get_allocator().get_id() == 1);
45 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
46 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
47 assert(c1.max_load_factor() == 2);
49 LIBCPP_ASSERT(c2.bucket_count() == 0);
50 assert(c2.size() == 0);
51 assert(c2.hash_function() == Hash(1));
52 assert(c2.key_eq() == Compare(1));
53 assert(c2.get_allocator().get_id() == 2);
54 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
55 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
56 assert(c2.max_load_factor() == 1);
59 typedef test_hash<std::hash<int> > Hash;
60 typedef test_compare<std::equal_to<int> > Compare;
61 typedef test_allocator<int> Alloc;
62 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
75 C c1(0, Hash(1), Compare(1), Alloc(1, 1));
76 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2));
77 c2.max_load_factor(2);
80 assert(c1.bucket_count() >= 8);
81 assert(c1.size() == 8);
82 assert(*c1.find(10) == 10);
83 assert(*c1.find(20) == 20);
84 assert(*c1.find(30) == 30);
85 assert(*c1.find(40) == 40);
86 assert(*c1.find(50) == 50);
87 assert(*c1.find(60) == 60);
88 assert(*c1.find(70) == 70);
89 assert(*c1.find(80) == 80);
90 assert(c1.hash_function() == Hash(2));
91 assert(c1.key_eq() == Compare(2));
92 assert(c1.get_allocator().get_id() == 1);
93 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
94 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
95 assert(c1.max_load_factor() == 2);
97 LIBCPP_ASSERT(c2.bucket_count() == 0);
98 assert(c2.size() == 0);
99 assert(c2.hash_function() == Hash(1));
100 assert(c2.key_eq() == Compare(1));
101 assert(c2.get_allocator().get_id() == 2);
102 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
103 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
104 assert(c2.max_load_factor() == 1);
107 typedef test_hash<std::hash<int> > Hash;
108 typedef test_compare<std::equal_to<int> > Compare;
109 typedef test_allocator<int> Alloc;
110 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
121 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1));
122 C c2(0, Hash(2), Compare(2), Alloc(1, 2));
123 c2.max_load_factor(2);
126 LIBCPP_ASSERT(c1.bucket_count() == 0);
127 assert(c1.size() == 0);
128 assert(c1.hash_function() == Hash(2));
129 assert(c1.key_eq() == Compare(2));
130 assert(c1.get_allocator().get_id() == 1);
131 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
132 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
133 assert(c1.max_load_factor() == 2);
135 assert(c2.bucket_count() >= 6);
136 assert(c2.size() == 6);
137 assert(c2.count(1) == 2);
138 assert(c2.count(2) == 2);
139 assert(c2.count(3) == 1);
140 assert(c2.count(4) == 1);
141 assert(c2.hash_function() == Hash(1));
142 assert(c2.key_eq() == Compare(1));
143 assert(c2.get_allocator().get_id() == 2);
144 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
145 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
146 assert(c2.max_load_factor() == 1);
149 typedef test_hash<std::hash<int> > Hash;
150 typedef test_compare<std::equal_to<int> > Compare;
151 typedef test_allocator<int> Alloc;
152 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
174 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1));
175 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2));
176 c2.max_load_factor(2);
179 assert(c1.bucket_count() >= 8);
180 assert(c1.size() == 8);
181 assert(*c1.find(10) == 10);
182 assert(*c1.find(20) == 20);
183 assert(*c1.find(30) == 30);
184 assert(*c1.find(40) == 40);
185 assert(*c1.find(50) == 50);
186 assert(*c1.find(60) == 60);
187 assert(*c1.find(70) == 70);
188 assert(*c1.find(80) == 80);
189 assert(c1.hash_function() == Hash(2));
190 assert(c1.key_eq() == Compare(2));
191 assert(c1.get_allocator().get_id() == 1);
192 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
193 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
194 assert(c1.max_load_factor() == 2);
196 assert(c2.bucket_count() >= 6);
197 assert(c2.size() == 6);
198 assert(c2.count(1) == 2);
199 assert(c2.count(2) == 2);
200 assert(c2.count(3) == 1);
201 assert(c2.count(4) == 1);
202 assert(c2.hash_function() == Hash(1));
203 assert(c2.key_eq() == Compare(1));
204 assert(c2.get_allocator().get_id() == 2);
205 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
206 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
207 assert(c2.max_load_factor() == 1);
211 typedef test_hash<std::hash<int> > Hash;
212 typedef test_compare<std::equal_to<int> > Compare;
213 typedef other_allocator<int> Alloc;
214 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
215 C c1(0, Hash(1), Compare(1), Alloc(1));
216 C c2(0, Hash(2), Compare(2), Alloc(2));
217 c2.max_load_factor(2);
220 LIBCPP_ASSERT(c1.bucket_count() == 0);
221 assert(c1.size() == 0);
222 assert(c1.hash_function() == Hash(2));
223 assert(c1.key_eq() == Compare(2));
224 assert(c1.get_allocator() == Alloc(2));
225 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
226 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
227 assert(c1.max_load_factor() == 2);
229 LIBCPP_ASSERT(c2.bucket_count() == 0);
230 assert(c2.size() == 0);
231 assert(c2.hash_function() == Hash(1));
232 assert(c2.key_eq() == Compare(1));
233 assert(c2.get_allocator() == Alloc(1));
234 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
235 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
236 assert(c2.max_load_factor() == 1);
239 typedef test_hash<std::hash<int> > Hash;
240 typedef test_compare<std::equal_to<int> > Compare;
241 typedef other_allocator<int> Alloc;
242 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
255 C c1(0, Hash(1), Compare(1), Alloc(1));
256 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2));
257 c2.max_load_factor(2);
260 assert(c1.bucket_count() >= 8);
261 assert(c1.size() == 8);
262 assert(*c1.find(10) == 10);
263 assert(*c1.find(20) == 20);
264 assert(*c1.find(30) == 30);
265 assert(*c1.find(40) == 40);
266 assert(*c1.find(50) == 50);
267 assert(*c1.find(60) == 60);
268 assert(*c1.find(70) == 70);
269 assert(*c1.find(80) == 80);
270 assert(c1.hash_function() == Hash(2));
271 assert(c1.key_eq() == Compare(2));
272 assert(c1.get_allocator() == Alloc(2));
273 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
274 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
275 assert(c1.max_load_factor() == 2);
277 LIBCPP_ASSERT(c2.bucket_count() == 0);
278 assert(c2.size() == 0);
279 assert(c2.hash_function() == Hash(1));
280 assert(c2.key_eq() == Compare(1));
281 assert(c2.get_allocator() == Alloc(1));
282 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
283 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
284 assert(c2.max_load_factor() == 1);
287 typedef test_hash<std::hash<int> > Hash;
288 typedef test_compare<std::equal_to<int> > Compare;
289 typedef other_allocator<int> Alloc;
290 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
301 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1));
302 C c2(0, Hash(2), Compare(2), Alloc(2));
303 c2.max_load_factor(2);
306 LIBCPP_ASSERT(c1.bucket_count() == 0);
307 assert(c1.size() == 0);
308 assert(c1.hash_function() == Hash(2));
309 assert(c1.key_eq() == Compare(2));
310 assert(c1.get_allocator() == Alloc(2));
311 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
312 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
313 assert(c1.max_load_factor() == 2);
315 assert(c2.bucket_count() >= 6);
316 assert(c2.size() == 6);
317 assert(c2.count(1) == 2);
318 assert(c2.count(2) == 2);
319 assert(c2.count(3) == 1);
320 assert(c2.count(4) == 1);
321 assert(c2.hash_function() == Hash(1));
322 assert(c2.key_eq() == Compare(1));
323 assert(c2.get_allocator() == Alloc(1));
324 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
325 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
326 assert(c2.max_load_factor() == 1);
329 typedef test_hash<std::hash<int> > Hash;
330 typedef test_compare<std::equal_to<int> > Compare;
331 typedef other_allocator<int> Alloc;
332 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
354 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1));
355 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2));
356 c2.max_load_factor(2);
359 assert(c1.bucket_count() >= 8);
360 assert(c1.size() == 8);
361 assert(*c1.find(10) == 10);
362 assert(*c1.find(20) == 20);
363 assert(*c1.find(30) == 30);
364 assert(*c1.find(40) == 40);
365 assert(*c1.find(50) == 50);
366 assert(*c1.find(60) == 60);
367 assert(*c1.find(70) == 70);
368 assert(*c1.find(80) == 80);
369 assert(c1.hash_function() == Hash(2));
370 assert(c1.key_eq() == Compare(2));
371 assert(c1.get_allocator() == Alloc(2));
372 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
373 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
374 assert(c1.max_load_factor() == 2);
376 assert(c2.bucket_count() >= 6);
377 assert(c2.size() == 6);
378 assert(c2.count(1) == 2);
379 assert(c2.count(2) == 2);
380 assert(c2.count(3) == 1);
381 assert(c2.count(4) == 1);
382 assert(c2.hash_function() == Hash(1));
383 assert(c2.key_eq() == Compare(1));
384 assert(c2.get_allocator() == Alloc(1));
385 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
386 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
387 assert(c2.max_load_factor() == 1);
389 #if TEST_STD_VER >= 11
391 typedef test_hash<std::hash<int> > Hash;
392 typedef test_compare<std::equal_to<int> > Compare;
393 typedef min_allocator<int> Alloc;
394 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
395 C c1(0, Hash(1), Compare(1), Alloc());
396 C c2(0, Hash(2), Compare(2), Alloc());
397 c2.max_load_factor(2);
400 LIBCPP_ASSERT(c1.bucket_count() == 0);
401 assert(c1.size() == 0);
402 assert(c1.hash_function() == Hash(2));
403 assert(c1.key_eq() == Compare(2));
404 assert(c1.get_allocator() == Alloc());
405 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
406 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
407 assert(c1.max_load_factor() == 2);
409 LIBCPP_ASSERT(c2.bucket_count() == 0);
410 assert(c2.size() == 0);
411 assert(c2.hash_function() == Hash(1));
412 assert(c2.key_eq() == Compare(1));
413 assert(c2.get_allocator() == Alloc());
414 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
415 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
416 assert(c2.max_load_factor() == 1);
419 typedef test_hash<std::hash<int> > Hash;
420 typedef test_compare<std::equal_to<int> > Compare;
421 typedef min_allocator<int> Alloc;
422 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
435 C c1(0, Hash(1), Compare(1), Alloc());
436 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
437 c2.max_load_factor(2);
440 assert(c1.bucket_count() >= 8);
441 assert(c1.size() == 8);
442 assert(*c1.find(10) == 10);
443 assert(*c1.find(20) == 20);
444 assert(*c1.find(30) == 30);
445 assert(*c1.find(40) == 40);
446 assert(*c1.find(50) == 50);
447 assert(*c1.find(60) == 60);
448 assert(*c1.find(70) == 70);
449 assert(*c1.find(80) == 80);
450 assert(c1.hash_function() == Hash(2));
451 assert(c1.key_eq() == Compare(2));
452 assert(c1.get_allocator() == Alloc());
453 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
454 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
455 assert(c1.max_load_factor() == 2);
457 LIBCPP_ASSERT(c2.bucket_count() == 0);
458 assert(c2.size() == 0);
459 assert(c2.hash_function() == Hash(1));
460 assert(c2.key_eq() == Compare(1));
461 assert(c2.get_allocator() == Alloc());
462 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
463 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
464 assert(c2.max_load_factor() == 1);
467 typedef test_hash<std::hash<int> > Hash;
468 typedef test_compare<std::equal_to<int> > Compare;
469 typedef min_allocator<int> Alloc;
470 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
481 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
482 C c2(0, Hash(2), Compare(2), Alloc());
483 c2.max_load_factor(2);
486 LIBCPP_ASSERT(c1.bucket_count() == 0);
487 assert(c1.size() == 0);
488 assert(c1.hash_function() == Hash(2));
489 assert(c1.key_eq() == Compare(2));
490 assert(c1.get_allocator() == Alloc());
491 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
492 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
493 assert(c1.max_load_factor() == 2);
495 assert(c2.bucket_count() >= 6);
496 assert(c2.size() == 6);
497 assert(c2.count(1) == 2);
498 assert(c2.count(2) == 2);
499 assert(c2.count(3) == 1);
500 assert(c2.count(4) == 1);
501 assert(c2.hash_function() == Hash(1));
502 assert(c2.key_eq() == Compare(1));
503 assert(c2.get_allocator() == Alloc());
504 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
505 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
506 assert(c2.max_load_factor() == 1);
509 typedef test_hash<std::hash<int> > Hash;
510 typedef test_compare<std::equal_to<int> > Compare;
511 typedef min_allocator<int> Alloc;
512 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
534 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
535 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
536 c2.max_load_factor(2);
539 assert(c1.bucket_count() >= 8);
540 assert(c1.size() == 8);
541 assert(*c1.find(10) == 10);
542 assert(*c1.find(20) == 20);
543 assert(*c1.find(30) == 30);
544 assert(*c1.find(40) == 40);
545 assert(*c1.find(50) == 50);
546 assert(*c1.find(60) == 60);
547 assert(*c1.find(70) == 70);
548 assert(*c1.find(80) == 80);
549 assert(c1.hash_function() == Hash(2));
550 assert(c1.key_eq() == Compare(2));
551 assert(c1.get_allocator() == Alloc());
552 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
553 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
554 assert(c1.max_load_factor() == 2);
556 assert(c2.bucket_count() >= 6);
557 assert(c2.size() == 6);
558 assert(c2.count(1) == 2);
559 assert(c2.count(2) == 2);
560 assert(c2.count(3) == 1);
561 assert(c2.count(4) == 1);
562 assert(c2.hash_function() == Hash(1));
563 assert(c2.key_eq() == Compare(1));
564 assert(c2.get_allocator() == Alloc());
565 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
566 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
567 assert(c2.max_load_factor() == 1);