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 Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>,
13 // class Alloc = allocator<pair<const Key, T>>>
14 // class unordered_multimap
16 // unordered_multimap& operator=(const unordered_multimap& u);
18 #include <unordered_map>
23 #include "../../../test_compare.h"
24 #include "../../../test_hash.h"
25 #include "test_allocator.h"
26 #include "min_allocator.h"
31 typedef test_allocator<std::pair<const int, std::string> > A;
32 typedef std::unordered_multimap<int, std::string,
33 test_hash<std::hash<int> >,
34 test_compare<std::equal_to<int> >,
37 typedef std::pair<int, std::string> P;
47 C c0(a, a + sizeof(a)/sizeof(a[0]),
49 test_hash<std::hash<int> >(8),
50 test_compare<std::equal_to<int> >(9),
55 test_hash<std::hash<int> >(2),
56 test_compare<std::equal_to<int> >(3),
60 assert(c.bucket_count() == 7);
61 assert(c.size() == 6);
62 C::const_iterator i = c.cbegin();
63 assert(i->first == 1);
64 assert(i->second == "one");
66 assert(i->first == 1);
67 assert(i->second == "four");
69 assert(i->first == 2);
70 assert(i->second == "two");
72 assert(i->first == 2);
73 assert(i->second == "four");
75 assert(i->first == 3);
76 assert(i->second == "three");
78 assert(i->first == 4);
79 assert(i->second == "four");
80 assert(c.hash_function() == test_hash<std::hash<int> >(8));
81 assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
82 assert(c.get_allocator() == A(4));
84 assert(std::distance(c.begin(), c.end()) == c.size());
85 assert(std::distance(c.cbegin(), c.cend()) == c.size());
86 assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
87 assert(c.max_load_factor() == 1);
90 typedef std::unordered_multimap<int, std::string> C;
91 typedef std::pair<const int, std::string> P;
101 C c(a, a+sizeof(a)/sizeof(a[0]));
104 assert(c.size() == 6);
105 assert(std::is_permutation(c.begin(), c.end(), a));
108 typedef other_allocator<std::pair<const int, std::string> > A;
109 typedef std::unordered_multimap<int, std::string,
110 test_hash<std::hash<int> >,
111 test_compare<std::equal_to<int> >,
114 typedef std::pair<int, std::string> P;
124 C c0(a, a + sizeof(a)/sizeof(a[0]),
126 test_hash<std::hash<int> >(8),
127 test_compare<std::equal_to<int> >(9),
132 test_hash<std::hash<int> >(2),
133 test_compare<std::equal_to<int> >(3),
137 assert(c.bucket_count() >= 7);
138 assert(c.size() == 6);
139 C::const_iterator i = c.cbegin();
140 assert(i->first == 1);
141 assert(i->second == "one");
143 assert(i->first == 1);
144 assert(i->second == "four");
146 assert(i->first == 2);
147 assert(i->second == "two");
149 assert(i->first == 2);
150 assert(i->second == "four");
152 assert(i->first == 3);
153 assert(i->second == "three");
155 assert(i->first == 4);
156 assert(i->second == "four");
157 assert(c.hash_function() == test_hash<std::hash<int> >(8));
158 assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
159 assert(c.get_allocator() == A(10));
161 assert(std::distance(c.begin(), c.end()) == c.size());
162 assert(std::distance(c.cbegin(), c.cend()) == c.size());
163 assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
164 assert(c.max_load_factor() == 1);
166 #if __cplusplus >= 201103L
168 typedef min_allocator<std::pair<const int, std::string> > A;
169 typedef std::unordered_multimap<int, std::string,
170 test_hash<std::hash<int> >,
171 test_compare<std::equal_to<int> >,
174 typedef std::pair<int, std::string> P;
184 C c0(a, a + sizeof(a)/sizeof(a[0]),
186 test_hash<std::hash<int> >(8),
187 test_compare<std::equal_to<int> >(9),
192 test_hash<std::hash<int> >(2),
193 test_compare<std::equal_to<int> >(3),
197 assert(c.bucket_count() == 7);
198 assert(c.size() == 6);
199 C::const_iterator i = c.cbegin();
200 assert(i->first == 1);
201 assert(i->second == "one");
203 assert(i->first == 1);
204 assert(i->second == "four");
206 assert(i->first == 2);
207 assert(i->second == "two");
209 assert(i->first == 2);
210 assert(i->second == "four");
212 assert(i->first == 3);
213 assert(i->second == "three");
215 assert(i->first == 4);
216 assert(i->second == "four");
217 assert(c.hash_function() == test_hash<std::hash<int> >(8));
218 assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
219 assert(c.get_allocator() == A());
221 assert(std::distance(c.begin(), c.end()) == c.size());
222 assert(std::distance(c.cbegin(), c.cend()) == c.size());
223 assert(fabs(c.load_factor() - (float)c.size()/c.bucket_count()) < FLT_EPSILON);
224 assert(c.max_load_factor() == 1);