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& x, unordered_multiset& y);
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;
36 C c1(0, Hash(1), Compare(1), Alloc(1, 1));
37 C c2(0, Hash(2), Compare(2), Alloc(1, 2));
38 c2.max_load_factor(2);
41 LIBCPP_ASSERT(c1.bucket_count() == 0);
42 assert(c1.size() == 0);
43 assert(c1.hash_function() == Hash(2));
44 assert(c1.key_eq() == Compare(2));
45 assert(c1.get_allocator().get_id() == 1);
46 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
47 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
48 assert(c1.max_load_factor() == 2);
50 LIBCPP_ASSERT(c2.bucket_count() == 0);
51 assert(c2.size() == 0);
52 assert(c2.hash_function() == Hash(1));
53 assert(c2.key_eq() == Compare(1));
54 assert(c2.get_allocator().get_id() == 2);
55 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
56 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
57 assert(c2.max_load_factor() == 1);
60 typedef test_hash<std::hash<int> > Hash;
61 typedef test_compare<std::equal_to<int> > Compare;
62 typedef test_allocator<int> Alloc;
63 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
76 C c1(0, Hash(1), Compare(1), Alloc(1, 1));
77 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2));
78 c2.max_load_factor(2);
81 assert(c1.bucket_count() >= 8);
82 assert(c1.size() == 8);
83 assert(*c1.find(10) == 10);
84 assert(*c1.find(20) == 20);
85 assert(*c1.find(30) == 30);
86 assert(*c1.find(40) == 40);
87 assert(*c1.find(50) == 50);
88 assert(*c1.find(60) == 60);
89 assert(*c1.find(70) == 70);
90 assert(*c1.find(80) == 80);
91 assert(c1.hash_function() == Hash(2));
92 assert(c1.key_eq() == Compare(2));
93 assert(c1.get_allocator().get_id() == 1);
94 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
95 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
96 assert(c1.max_load_factor() == 2);
98 LIBCPP_ASSERT(c2.bucket_count() == 0);
99 assert(c2.size() == 0);
100 assert(c2.hash_function() == Hash(1));
101 assert(c2.key_eq() == Compare(1));
102 assert(c2.get_allocator().get_id() == 2);
103 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
104 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
105 assert(c2.max_load_factor() == 1);
108 typedef test_hash<std::hash<int> > Hash;
109 typedef test_compare<std::equal_to<int> > Compare;
110 typedef test_allocator<int> Alloc;
111 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
122 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1));
123 C c2(0, Hash(2), Compare(2), Alloc(1, 2));
124 c2.max_load_factor(2);
127 LIBCPP_ASSERT(c1.bucket_count() == 0);
128 assert(c1.size() == 0);
129 assert(c1.hash_function() == Hash(2));
130 assert(c1.key_eq() == Compare(2));
131 assert(c1.get_allocator().get_id() == 1);
132 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
133 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
134 assert(c1.max_load_factor() == 2);
136 assert(c2.bucket_count() >= 6);
137 assert(c2.size() == 6);
138 assert(c2.count(1) == 2);
139 assert(c2.count(2) == 2);
140 assert(c2.count(3) == 1);
141 assert(c2.count(4) == 1);
142 assert(c2.hash_function() == Hash(1));
143 assert(c2.key_eq() == Compare(1));
144 assert(c2.get_allocator().get_id() == 2);
145 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
146 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
147 assert(c2.max_load_factor() == 1);
150 typedef test_hash<std::hash<int> > Hash;
151 typedef test_compare<std::equal_to<int> > Compare;
152 typedef test_allocator<int> Alloc;
153 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
175 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1));
176 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2));
177 c2.max_load_factor(2);
180 assert(c1.bucket_count() >= 8);
181 assert(c1.size() == 8);
182 assert(*c1.find(10) == 10);
183 assert(*c1.find(20) == 20);
184 assert(*c1.find(30) == 30);
185 assert(*c1.find(40) == 40);
186 assert(*c1.find(50) == 50);
187 assert(*c1.find(60) == 60);
188 assert(*c1.find(70) == 70);
189 assert(*c1.find(80) == 80);
190 assert(c1.hash_function() == Hash(2));
191 assert(c1.key_eq() == Compare(2));
192 assert(c1.get_allocator().get_id() == 1);
193 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
194 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
195 assert(c1.max_load_factor() == 2);
197 assert(c2.bucket_count() >= 6);
198 assert(c2.size() == 6);
199 assert(c2.count(1) == 2);
200 assert(c2.count(2) == 2);
201 assert(c2.count(3) == 1);
202 assert(c2.count(4) == 1);
203 assert(c2.hash_function() == Hash(1));
204 assert(c2.key_eq() == Compare(1));
205 assert(c2.get_allocator().get_id() == 2);
206 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
207 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
208 assert(c2.max_load_factor() == 1);
212 typedef test_hash<std::hash<int> > Hash;
213 typedef test_compare<std::equal_to<int> > Compare;
214 typedef other_allocator<int> Alloc;
215 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
217 C c1(0, Hash(1), Compare(1), Alloc(1));
218 C c2(0, Hash(2), Compare(2), Alloc(2));
219 c2.max_load_factor(2);
222 LIBCPP_ASSERT(c1.bucket_count() == 0);
223 assert(c1.size() == 0);
224 assert(c1.hash_function() == Hash(2));
225 assert(c1.key_eq() == Compare(2));
226 assert(c1.get_allocator() == Alloc(2));
227 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
228 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
229 assert(c1.max_load_factor() == 2);
231 LIBCPP_ASSERT(c2.bucket_count() == 0);
232 assert(c2.size() == 0);
233 assert(c2.hash_function() == Hash(1));
234 assert(c2.key_eq() == Compare(1));
235 assert(c2.get_allocator() == Alloc(1));
236 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
237 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
238 assert(c2.max_load_factor() == 1);
241 typedef test_hash<std::hash<int> > Hash;
242 typedef test_compare<std::equal_to<int> > Compare;
243 typedef other_allocator<int> Alloc;
244 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
257 C c1(0, Hash(1), Compare(1), Alloc(1));
258 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2));
259 c2.max_load_factor(2);
262 assert(c1.bucket_count() >= 8);
263 assert(c1.size() == 8);
264 assert(*c1.find(10) == 10);
265 assert(*c1.find(20) == 20);
266 assert(*c1.find(30) == 30);
267 assert(*c1.find(40) == 40);
268 assert(*c1.find(50) == 50);
269 assert(*c1.find(60) == 60);
270 assert(*c1.find(70) == 70);
271 assert(*c1.find(80) == 80);
272 assert(c1.hash_function() == Hash(2));
273 assert(c1.key_eq() == Compare(2));
274 assert(c1.get_allocator() == Alloc(2));
275 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
276 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
277 assert(c1.max_load_factor() == 2);
279 LIBCPP_ASSERT(c2.bucket_count() == 0);
280 assert(c2.size() == 0);
281 assert(c2.hash_function() == Hash(1));
282 assert(c2.key_eq() == Compare(1));
283 assert(c2.get_allocator() == Alloc(1));
284 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
285 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
286 assert(c2.max_load_factor() == 1);
289 typedef test_hash<std::hash<int> > Hash;
290 typedef test_compare<std::equal_to<int> > Compare;
291 typedef other_allocator<int> Alloc;
292 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
303 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1));
304 C c2(0, Hash(2), Compare(2), Alloc(2));
305 c2.max_load_factor(2);
308 LIBCPP_ASSERT(c1.bucket_count() == 0);
309 assert(c1.size() == 0);
310 assert(c1.hash_function() == Hash(2));
311 assert(c1.key_eq() == Compare(2));
312 assert(c1.get_allocator() == Alloc(2));
313 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
314 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
315 assert(c1.max_load_factor() == 2);
317 assert(c2.bucket_count() >= 6);
318 assert(c2.size() == 6);
319 assert(c2.count(1) == 2);
320 assert(c2.count(2) == 2);
321 assert(c2.count(3) == 1);
322 assert(c2.count(4) == 1);
323 assert(c2.hash_function() == Hash(1));
324 assert(c2.key_eq() == Compare(1));
325 assert(c2.get_allocator() == Alloc(1));
326 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
327 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
328 assert(c2.max_load_factor() == 1);
331 typedef test_hash<std::hash<int> > Hash;
332 typedef test_compare<std::equal_to<int> > Compare;
333 typedef other_allocator<int> Alloc;
334 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
356 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1));
357 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2));
358 c2.max_load_factor(2);
361 assert(c1.bucket_count() >= 8);
362 assert(c1.size() == 8);
363 assert(*c1.find(10) == 10);
364 assert(*c1.find(20) == 20);
365 assert(*c1.find(30) == 30);
366 assert(*c1.find(40) == 40);
367 assert(*c1.find(50) == 50);
368 assert(*c1.find(60) == 60);
369 assert(*c1.find(70) == 70);
370 assert(*c1.find(80) == 80);
371 assert(c1.hash_function() == Hash(2));
372 assert(c1.key_eq() == Compare(2));
373 assert(c1.get_allocator() == Alloc(2));
374 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
375 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
376 assert(c1.max_load_factor() == 2);
378 assert(c2.bucket_count() >= 6);
379 assert(c2.size() == 6);
380 assert(c2.count(1) == 2);
381 assert(c2.count(2) == 2);
382 assert(c2.count(3) == 1);
383 assert(c2.count(4) == 1);
384 assert(c2.hash_function() == Hash(1));
385 assert(c2.key_eq() == Compare(1));
386 assert(c2.get_allocator() == Alloc(1));
387 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
388 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
389 assert(c2.max_load_factor() == 1);
391 #if TEST_STD_VER >= 11
393 typedef test_hash<std::hash<int> > Hash;
394 typedef test_compare<std::equal_to<int> > Compare;
395 typedef min_allocator<int> Alloc;
396 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
398 C c1(0, Hash(1), Compare(1), Alloc());
399 C c2(0, Hash(2), Compare(2), Alloc());
400 c2.max_load_factor(2);
403 LIBCPP_ASSERT(c1.bucket_count() == 0);
404 assert(c1.size() == 0);
405 assert(c1.hash_function() == Hash(2));
406 assert(c1.key_eq() == Compare(2));
407 assert(c1.get_allocator() == Alloc());
408 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
409 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
410 assert(c1.max_load_factor() == 2);
412 LIBCPP_ASSERT(c2.bucket_count() == 0);
413 assert(c2.size() == 0);
414 assert(c2.hash_function() == Hash(1));
415 assert(c2.key_eq() == Compare(1));
416 assert(c2.get_allocator() == Alloc());
417 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
418 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
419 assert(c2.max_load_factor() == 1);
422 typedef test_hash<std::hash<int> > Hash;
423 typedef test_compare<std::equal_to<int> > Compare;
424 typedef min_allocator<int> Alloc;
425 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
438 C c1(0, Hash(1), Compare(1), Alloc());
439 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
440 c2.max_load_factor(2);
443 assert(c1.bucket_count() >= 8);
444 assert(c1.size() == 8);
445 assert(*c1.find(10) == 10);
446 assert(*c1.find(20) == 20);
447 assert(*c1.find(30) == 30);
448 assert(*c1.find(40) == 40);
449 assert(*c1.find(50) == 50);
450 assert(*c1.find(60) == 60);
451 assert(*c1.find(70) == 70);
452 assert(*c1.find(80) == 80);
453 assert(c1.hash_function() == Hash(2));
454 assert(c1.key_eq() == Compare(2));
455 assert(c1.get_allocator() == Alloc());
456 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
457 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
458 assert(c1.max_load_factor() == 2);
460 LIBCPP_ASSERT(c2.bucket_count() == 0);
461 assert(c2.size() == 0);
462 assert(c2.hash_function() == Hash(1));
463 assert(c2.key_eq() == Compare(1));
464 assert(c2.get_allocator() == Alloc());
465 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
466 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
467 assert(c2.max_load_factor() == 1);
470 typedef test_hash<std::hash<int> > Hash;
471 typedef test_compare<std::equal_to<int> > Compare;
472 typedef min_allocator<int> Alloc;
473 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
484 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
485 C c2(0, Hash(2), Compare(2), Alloc());
486 c2.max_load_factor(2);
489 LIBCPP_ASSERT(c1.bucket_count() == 0);
490 assert(c1.size() == 0);
491 assert(c1.hash_function() == Hash(2));
492 assert(c1.key_eq() == Compare(2));
493 assert(c1.get_allocator() == Alloc());
494 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
495 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
496 assert(c1.max_load_factor() == 2);
498 assert(c2.bucket_count() >= 6);
499 assert(c2.size() == 6);
500 assert(c2.count(1) == 2);
501 assert(c2.count(2) == 2);
502 assert(c2.count(3) == 1);
503 assert(c2.count(4) == 1);
504 assert(c2.hash_function() == Hash(1));
505 assert(c2.key_eq() == Compare(1));
506 assert(c2.get_allocator() == Alloc());
507 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
508 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
509 assert(c2.max_load_factor() == 1);
512 typedef test_hash<std::hash<int> > Hash;
513 typedef test_compare<std::equal_to<int> > Compare;
514 typedef min_allocator<int> Alloc;
515 typedef std::unordered_multiset<int, Hash, Compare, Alloc> C;
537 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc());
538 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc());
539 c2.max_load_factor(2);
542 assert(c1.bucket_count() >= 8);
543 assert(c1.size() == 8);
544 assert(*c1.find(10) == 10);
545 assert(*c1.find(20) == 20);
546 assert(*c1.find(30) == 30);
547 assert(*c1.find(40) == 40);
548 assert(*c1.find(50) == 50);
549 assert(*c1.find(60) == 60);
550 assert(*c1.find(70) == 70);
551 assert(*c1.find(80) == 80);
552 assert(c1.hash_function() == Hash(2));
553 assert(c1.key_eq() == Compare(2));
554 assert(c1.get_allocator() == Alloc());
555 assert(static_cast<std::size_t>(std::distance(c1.begin(), c1.end())) == c1.size());
556 assert(static_cast<std::size_t>(std::distance(c1.cbegin(), c1.cend())) == c1.size());
557 assert(c1.max_load_factor() == 2);
559 assert(c2.bucket_count() >= 6);
560 assert(c2.size() == 6);
561 assert(c2.count(1) == 2);
562 assert(c2.count(2) == 2);
563 assert(c2.count(3) == 1);
564 assert(c2.count(4) == 1);
565 assert(c2.hash_function() == Hash(1));
566 assert(c2.key_eq() == Compare(1));
567 assert(c2.get_allocator() == Alloc());
568 assert(static_cast<std::size_t>(std::distance(c2.begin(), c2.end())) == c2.size());
569 assert(static_cast<std::size_t>(std::distance(c2.cbegin(), c2.cend())) == c2.size());
570 assert(c2.max_load_factor() == 1);