1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <unordered_map> 11 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_map 15 16 // void swap(unordered_map& __u); 17 18 #include <unordered_map> 19 #include <string> 20 #include <cassert> 21 22 #include "../../test_compare.h" 23 #include "../../test_hash.h" 24 #include "../../test_allocator.h" 25 26 int main() 27 { 28 { 29 typedef test_hash<std::hash<int> > Hash; 30 typedef test_compare<std::equal_to<int> > Compare; 31 typedef test_allocator<std::pair<const int, std::string> > Alloc; 32 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 33 typedef std::pair<int, std::string> P; 34 C c1(0, Hash(1), Compare(1), Alloc(1)); 35 C c2(0, Hash(2), Compare(2), Alloc(2)); 36 c2.max_load_factor(2); 37 c1.swap(c2); 38 39 assert(c1.bucket_count() == 0); 40 assert(c1.size() == 0); 41 assert(c1.hash_function() == Hash(2)); 42 assert(c1.key_eq() == Compare(2)); 43 assert(c1.get_allocator() == Alloc(1)); 44 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 45 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 46 assert(c1.max_load_factor() == 2); 47 48 assert(c2.bucket_count() == 0); 49 assert(c2.size() == 0); 50 assert(c2.hash_function() == Hash(1)); 51 assert(c2.key_eq() == Compare(1)); 52 assert(c2.get_allocator() == Alloc(2)); 53 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 54 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 55 assert(c2.max_load_factor() == 1); 56 } 57 { 58 typedef test_hash<std::hash<int> > Hash; 59 typedef test_compare<std::equal_to<int> > Compare; 60 typedef test_allocator<std::pair<const int, std::string> > Alloc; 61 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 62 typedef std::pair<int, std::string> P; 63 P a2[] = 64 { 65 P(10, "ten"), 66 P(20, "twenty"), 67 P(30, "thirty"), 68 P(40, "fourty"), 69 P(50, "fifty"), 70 P(60, "sixty"), 71 P(70, "seventy"), 72 P(80, "eighty"), 73 }; 74 C c1(0, Hash(1), Compare(1), Alloc(1)); 75 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); 76 c2.max_load_factor(2); 77 c1.swap(c2); 78 79 assert(c1.bucket_count() >= 11); 80 assert(c1.size() == 8); 81 assert(c1.at(10) == "ten"); 82 assert(c1.at(20) == "twenty"); 83 assert(c1.at(30) == "thirty"); 84 assert(c1.at(40) == "fourty"); 85 assert(c1.at(50) == "fifty"); 86 assert(c1.at(60) == "sixty"); 87 assert(c1.at(70) == "seventy"); 88 assert(c1.at(80) == "eighty"); 89 assert(c1.hash_function() == Hash(2)); 90 assert(c1.key_eq() == Compare(2)); 91 assert(c1.get_allocator() == Alloc(1)); 92 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 93 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 94 assert(c1.max_load_factor() == 2); 95 96 assert(c2.bucket_count() == 0); 97 assert(c2.size() == 0); 98 assert(c2.hash_function() == Hash(1)); 99 assert(c2.key_eq() == Compare(1)); 100 assert(c2.get_allocator() == Alloc(2)); 101 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 102 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 103 assert(c2.max_load_factor() == 1); 104 } 105 { 106 typedef test_hash<std::hash<int> > Hash; 107 typedef test_compare<std::equal_to<int> > Compare; 108 typedef test_allocator<std::pair<const int, std::string> > Alloc; 109 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 110 typedef std::pair<int, std::string> P; 111 P a1[] = 112 { 113 P(1, "one"), 114 P(2, "two"), 115 P(3, "three"), 116 P(4, "four"), 117 P(1, "four"), 118 P(2, "four"), 119 }; 120 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); 121 C c2(0, Hash(2), Compare(2), Alloc(2)); 122 c2.max_load_factor(2); 123 c1.swap(c2); 124 125 assert(c1.bucket_count() == 0); 126 assert(c1.size() == 0); 127 assert(c1.hash_function() == Hash(2)); 128 assert(c1.key_eq() == Compare(2)); 129 assert(c1.get_allocator() == Alloc(1)); 130 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 131 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 132 assert(c1.max_load_factor() == 2); 133 134 assert(c2.bucket_count() >= 5); 135 assert(c2.size() == 4); 136 assert(c2.at(1) == "one"); 137 assert(c2.at(2) == "two"); 138 assert(c2.at(3) == "three"); 139 assert(c2.at(4) == "four"); 140 assert(c2.hash_function() == Hash(1)); 141 assert(c2.key_eq() == Compare(1)); 142 assert(c2.get_allocator() == Alloc(2)); 143 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 144 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 145 assert(c2.max_load_factor() == 1); 146 } 147 { 148 typedef test_hash<std::hash<int> > Hash; 149 typedef test_compare<std::equal_to<int> > Compare; 150 typedef test_allocator<std::pair<const int, std::string> > Alloc; 151 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 152 typedef std::pair<int, std::string> P; 153 P a1[] = 154 { 155 P(1, "one"), 156 P(2, "two"), 157 P(3, "three"), 158 P(4, "four"), 159 P(1, "four"), 160 P(2, "four"), 161 }; 162 P a2[] = 163 { 164 P(10, "ten"), 165 P(20, "twenty"), 166 P(30, "thirty"), 167 P(40, "fourty"), 168 P(50, "fifty"), 169 P(60, "sixty"), 170 P(70, "seventy"), 171 P(80, "eighty"), 172 }; 173 C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); 174 C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); 175 c2.max_load_factor(2); 176 c1.swap(c2); 177 178 assert(c1.bucket_count() >= 11); 179 assert(c1.size() == 8); 180 assert(c1.at(10) == "ten"); 181 assert(c1.at(20) == "twenty"); 182 assert(c1.at(30) == "thirty"); 183 assert(c1.at(40) == "fourty"); 184 assert(c1.at(50) == "fifty"); 185 assert(c1.at(60) == "sixty"); 186 assert(c1.at(70) == "seventy"); 187 assert(c1.at(80) == "eighty"); 188 assert(c1.hash_function() == Hash(2)); 189 assert(c1.key_eq() == Compare(2)); 190 assert(c1.get_allocator() == Alloc(1)); 191 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 192 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 193 assert(c1.max_load_factor() == 2); 194 195 assert(c2.bucket_count() >= 5); 196 assert(c2.size() == 4); 197 assert(c2.at(1) == "one"); 198 assert(c2.at(2) == "two"); 199 assert(c2.at(3) == "three"); 200 assert(c2.at(4) == "four"); 201 assert(c2.hash_function() == Hash(1)); 202 assert(c2.key_eq() == Compare(1)); 203 assert(c2.get_allocator() == Alloc(2)); 204 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 205 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 206 assert(c2.max_load_factor() == 1); 207 } 208 209 { 210 typedef test_hash<std::hash<int> > Hash; 211 typedef test_compare<std::equal_to<int> > Compare; 212 typedef other_allocator<std::pair<const int, std::string> > Alloc; 213 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 214 typedef std::pair<int, std::string> P; 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); 218 c1.swap(c2); 219 220 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(std::distance(c1.begin(), c1.end()) == c1.size()); 226 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 227 assert(c1.max_load_factor() == 2); 228 229 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(std::distance(c2.begin(), c2.end()) == c2.size()); 235 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 236 assert(c2.max_load_factor() == 1); 237 } 238 { 239 typedef test_hash<std::hash<int> > Hash; 240 typedef test_compare<std::equal_to<int> > Compare; 241 typedef other_allocator<std::pair<const int, std::string> > Alloc; 242 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 243 typedef std::pair<int, std::string> P; 244 P a2[] = 245 { 246 P(10, "ten"), 247 P(20, "twenty"), 248 P(30, "thirty"), 249 P(40, "fourty"), 250 P(50, "fifty"), 251 P(60, "sixty"), 252 P(70, "seventy"), 253 P(80, "eighty"), 254 }; 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); 258 c1.swap(c2); 259 260 assert(c1.bucket_count() >= 11); 261 assert(c1.size() == 8); 262 assert(c1.at(10) == "ten"); 263 assert(c1.at(20) == "twenty"); 264 assert(c1.at(30) == "thirty"); 265 assert(c1.at(40) == "fourty"); 266 assert(c1.at(50) == "fifty"); 267 assert(c1.at(60) == "sixty"); 268 assert(c1.at(70) == "seventy"); 269 assert(c1.at(80) == "eighty"); 270 assert(c1.hash_function() == Hash(2)); 271 assert(c1.key_eq() == Compare(2)); 272 assert(c1.get_allocator() == Alloc(2)); 273 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 274 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 275 assert(c1.max_load_factor() == 2); 276 277 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(std::distance(c2.begin(), c2.end()) == c2.size()); 283 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 284 assert(c2.max_load_factor() == 1); 285 } 286 { 287 typedef test_hash<std::hash<int> > Hash; 288 typedef test_compare<std::equal_to<int> > Compare; 289 typedef other_allocator<std::pair<const int, std::string> > Alloc; 290 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 291 typedef std::pair<int, std::string> P; 292 P a1[] = 293 { 294 P(1, "one"), 295 P(2, "two"), 296 P(3, "three"), 297 P(4, "four"), 298 P(1, "four"), 299 P(2, "four"), 300 }; 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); 304 c1.swap(c2); 305 306 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(std::distance(c1.begin(), c1.end()) == c1.size()); 312 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 313 assert(c1.max_load_factor() == 2); 314 315 assert(c2.bucket_count() >= 5); 316 assert(c2.size() == 4); 317 assert(c2.at(1) == "one"); 318 assert(c2.at(2) == "two"); 319 assert(c2.at(3) == "three"); 320 assert(c2.at(4) == "four"); 321 assert(c2.hash_function() == Hash(1)); 322 assert(c2.key_eq() == Compare(1)); 323 assert(c2.get_allocator() == Alloc(1)); 324 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 325 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 326 assert(c2.max_load_factor() == 1); 327 } 328 { 329 typedef test_hash<std::hash<int> > Hash; 330 typedef test_compare<std::equal_to<int> > Compare; 331 typedef other_allocator<std::pair<const int, std::string> > Alloc; 332 typedef std::unordered_map<int, std::string, Hash, Compare, Alloc> C; 333 typedef std::pair<int, std::string> P; 334 P a1[] = 335 { 336 P(1, "one"), 337 P(2, "two"), 338 P(3, "three"), 339 P(4, "four"), 340 P(1, "four"), 341 P(2, "four"), 342 }; 343 P a2[] = 344 { 345 P(10, "ten"), 346 P(20, "twenty"), 347 P(30, "thirty"), 348 P(40, "fourty"), 349 P(50, "fifty"), 350 P(60, "sixty"), 351 P(70, "seventy"), 352 P(80, "eighty"), 353 }; 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); 357 c1.swap(c2); 358 359 assert(c1.bucket_count() >= 11); 360 assert(c1.size() == 8); 361 assert(c1.at(10) == "ten"); 362 assert(c1.at(20) == "twenty"); 363 assert(c1.at(30) == "thirty"); 364 assert(c1.at(40) == "fourty"); 365 assert(c1.at(50) == "fifty"); 366 assert(c1.at(60) == "sixty"); 367 assert(c1.at(70) == "seventy"); 368 assert(c1.at(80) == "eighty"); 369 assert(c1.hash_function() == Hash(2)); 370 assert(c1.key_eq() == Compare(2)); 371 assert(c1.get_allocator() == Alloc(2)); 372 assert(std::distance(c1.begin(), c1.end()) == c1.size()); 373 assert(std::distance(c1.cbegin(), c1.cend()) == c1.size()); 374 assert(c1.max_load_factor() == 2); 375 376 assert(c2.bucket_count() >= 5); 377 assert(c2.size() == 4); 378 assert(c2.at(1) == "one"); 379 assert(c2.at(2) == "two"); 380 assert(c2.at(3) == "three"); 381 assert(c2.at(4) == "four"); 382 assert(c2.hash_function() == Hash(1)); 383 assert(c2.key_eq() == Compare(1)); 384 assert(c2.get_allocator() == Alloc(1)); 385 assert(std::distance(c2.begin(), c2.end()) == c2.size()); 386 assert(std::distance(c2.cbegin(), c2.cend()) == c2.size()); 387 assert(c2.max_load_factor() == 1); 388 } 389 } 390