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 // local_iterator begin (size_type n); 17 // local_iterator end (size_type n); 18 // const_local_iterator begin (size_type n) const; 19 // const_local_iterator end (size_type n) const; 20 // const_local_iterator cbegin(size_type n) const; 21 // const_local_iterator cend (size_type n) const; 22 23 #include <unordered_map> 24 #include <string> 25 #include <cassert> 26 27 #include "min_allocator.h" 28 29 int main() 30 { 31 { 32 typedef std::unordered_map<int, std::string> C; 33 typedef std::pair<int, std::string> P; 34 typedef C::local_iterator I; 35 P a[] = 36 { 37 P(1, "one"), 38 P(2, "two"), 39 P(3, "three"), 40 P(4, "four"), 41 P(1, "four"), 42 P(2, "four"), 43 }; 44 C c(a, a + sizeof(a)/sizeof(a[0])); 45 assert(c.bucket_count() >= 5); 46 C::size_type b = c.bucket(0); 47 I i = c.begin(b); 48 I j = c.end(b); 49 assert(std::distance(i, j) == 0); 50 51 b = c.bucket(1); 52 i = c.begin(b); 53 j = c.end(b); 54 assert(std::distance(i, j) == 1); 55 assert(i->first == 1); 56 assert(i->second == "one"); 57 58 b = c.bucket(2); 59 i = c.begin(b); 60 j = c.end(b); 61 assert(std::distance(i, j) == 1); 62 assert(i->first == 2); 63 assert(i->second == "two"); 64 65 b = c.bucket(3); 66 i = c.begin(b); 67 j = c.end(b); 68 assert(std::distance(i, j) == 1); 69 assert(i->first == 3); 70 assert(i->second == "three"); 71 72 b = c.bucket(4); 73 i = c.begin(b); 74 j = c.end(b); 75 assert(std::distance(i, j) == 1); 76 assert(i->first == 4); 77 assert(i->second == "four"); 78 } 79 { 80 typedef std::unordered_map<int, std::string> C; 81 typedef std::pair<int, std::string> P; 82 typedef C::const_local_iterator I; 83 P a[] = 84 { 85 P(1, "one"), 86 P(2, "two"), 87 P(3, "three"), 88 P(4, "four"), 89 P(1, "four"), 90 P(2, "four"), 91 }; 92 const C c(a, a + sizeof(a)/sizeof(a[0])); 93 assert(c.bucket_count() >= 5); 94 C::size_type b = c.bucket(0); 95 I i = c.begin(b); 96 I j = c.end(b); 97 assert(std::distance(i, j) == 0); 98 99 b = c.bucket(1); 100 i = c.begin(b); 101 j = c.end(b); 102 assert(std::distance(i, j) == 1); 103 assert(i->first == 1); 104 assert(i->second == "one"); 105 106 b = c.bucket(2); 107 i = c.begin(b); 108 j = c.end(b); 109 assert(std::distance(i, j) == 1); 110 assert(i->first == 2); 111 assert(i->second == "two"); 112 113 b = c.bucket(3); 114 i = c.begin(b); 115 j = c.end(b); 116 assert(std::distance(i, j) == 1); 117 assert(i->first == 3); 118 assert(i->second == "three"); 119 120 b = c.bucket(4); 121 i = c.begin(b); 122 j = c.end(b); 123 assert(std::distance(i, j) == 1); 124 assert(i->first == 4); 125 assert(i->second == "four"); 126 } 127 { 128 typedef std::unordered_map<int, std::string> C; 129 typedef std::pair<int, std::string> P; 130 typedef C::const_local_iterator I; 131 P a[] = 132 { 133 P(1, "one"), 134 P(2, "two"), 135 P(3, "three"), 136 P(4, "four"), 137 P(1, "four"), 138 P(2, "four"), 139 }; 140 C c(a, a + sizeof(a)/sizeof(a[0])); 141 assert(c.bucket_count() >= 5); 142 C::size_type b = c.bucket(0); 143 I i = c.cbegin(b); 144 I j = c.cend(b); 145 assert(std::distance(i, j) == 0); 146 147 b = c.bucket(1); 148 i = c.cbegin(b); 149 j = c.cend(b); 150 assert(std::distance(i, j) == 1); 151 assert(i->first == 1); 152 assert(i->second == "one"); 153 154 b = c.bucket(2); 155 i = c.cbegin(b); 156 j = c.cend(b); 157 assert(std::distance(i, j) == 1); 158 assert(i->first == 2); 159 assert(i->second == "two"); 160 161 b = c.bucket(3); 162 i = c.cbegin(b); 163 j = c.cend(b); 164 assert(std::distance(i, j) == 1); 165 assert(i->first == 3); 166 assert(i->second == "three"); 167 168 b = c.bucket(4); 169 i = c.cbegin(b); 170 j = c.cend(b); 171 assert(std::distance(i, j) == 1); 172 assert(i->first == 4); 173 assert(i->second == "four"); 174 } 175 { 176 typedef std::unordered_map<int, std::string> C; 177 typedef std::pair<int, std::string> P; 178 typedef C::const_local_iterator I; 179 P a[] = 180 { 181 P(1, "one"), 182 P(2, "two"), 183 P(3, "three"), 184 P(4, "four"), 185 P(1, "four"), 186 P(2, "four"), 187 }; 188 const C c(a, a + sizeof(a)/sizeof(a[0])); 189 assert(c.bucket_count() >= 5); 190 C::size_type b = c.bucket(0); 191 I i = c.cbegin(b); 192 I j = c.cend(b); 193 assert(std::distance(i, j) == 0); 194 195 b = c.bucket(1); 196 i = c.cbegin(b); 197 j = c.cend(b); 198 assert(std::distance(i, j) == 1); 199 assert(i->first == 1); 200 assert(i->second == "one"); 201 202 b = c.bucket(2); 203 i = c.cbegin(b); 204 j = c.cend(b); 205 assert(std::distance(i, j) == 1); 206 assert(i->first == 2); 207 assert(i->second == "two"); 208 209 b = c.bucket(3); 210 i = c.cbegin(b); 211 j = c.cend(b); 212 assert(std::distance(i, j) == 1); 213 assert(i->first == 3); 214 assert(i->second == "three"); 215 216 b = c.bucket(4); 217 i = c.cbegin(b); 218 j = c.cend(b); 219 assert(std::distance(i, j) == 1); 220 assert(i->first == 4); 221 assert(i->second == "four"); 222 } 223 #if __cplusplus >= 201103L 224 { 225 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 226 min_allocator<std::pair<const int, std::string>>> C; 227 typedef std::pair<int, std::string> P; 228 typedef C::local_iterator I; 229 P a[] = 230 { 231 P(1, "one"), 232 P(2, "two"), 233 P(3, "three"), 234 P(4, "four"), 235 P(1, "four"), 236 P(2, "four"), 237 }; 238 C c(a, a + sizeof(a)/sizeof(a[0])); 239 assert(c.bucket_count() >= 5); 240 C::size_type b = c.bucket(0); 241 I i = c.begin(b); 242 I j = c.end(b); 243 assert(std::distance(i, j) == 0); 244 245 b = c.bucket(1); 246 i = c.begin(b); 247 j = c.end(b); 248 assert(std::distance(i, j) == 1); 249 assert(i->first == 1); 250 assert(i->second == "one"); 251 252 b = c.bucket(2); 253 i = c.begin(b); 254 j = c.end(b); 255 assert(std::distance(i, j) == 1); 256 assert(i->first == 2); 257 assert(i->second == "two"); 258 259 b = c.bucket(3); 260 i = c.begin(b); 261 j = c.end(b); 262 assert(std::distance(i, j) == 1); 263 assert(i->first == 3); 264 assert(i->second == "three"); 265 266 b = c.bucket(4); 267 i = c.begin(b); 268 j = c.end(b); 269 assert(std::distance(i, j) == 1); 270 assert(i->first == 4); 271 assert(i->second == "four"); 272 } 273 { 274 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 275 min_allocator<std::pair<const int, std::string>>> C; 276 typedef std::pair<int, std::string> P; 277 typedef C::const_local_iterator I; 278 P a[] = 279 { 280 P(1, "one"), 281 P(2, "two"), 282 P(3, "three"), 283 P(4, "four"), 284 P(1, "four"), 285 P(2, "four"), 286 }; 287 const C c(a, a + sizeof(a)/sizeof(a[0])); 288 assert(c.bucket_count() >= 5); 289 C::size_type b = c.bucket(0); 290 I i = c.begin(b); 291 I j = c.end(b); 292 assert(std::distance(i, j) == 0); 293 294 b = c.bucket(1); 295 i = c.begin(b); 296 j = c.end(b); 297 assert(std::distance(i, j) == 1); 298 assert(i->first == 1); 299 assert(i->second == "one"); 300 301 b = c.bucket(2); 302 i = c.begin(b); 303 j = c.end(b); 304 assert(std::distance(i, j) == 1); 305 assert(i->first == 2); 306 assert(i->second == "two"); 307 308 b = c.bucket(3); 309 i = c.begin(b); 310 j = c.end(b); 311 assert(std::distance(i, j) == 1); 312 assert(i->first == 3); 313 assert(i->second == "three"); 314 315 b = c.bucket(4); 316 i = c.begin(b); 317 j = c.end(b); 318 assert(std::distance(i, j) == 1); 319 assert(i->first == 4); 320 assert(i->second == "four"); 321 } 322 { 323 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 324 min_allocator<std::pair<const int, std::string>>> C; 325 typedef std::pair<int, std::string> P; 326 typedef C::const_local_iterator I; 327 P a[] = 328 { 329 P(1, "one"), 330 P(2, "two"), 331 P(3, "three"), 332 P(4, "four"), 333 P(1, "four"), 334 P(2, "four"), 335 }; 336 C c(a, a + sizeof(a)/sizeof(a[0])); 337 assert(c.bucket_count() >= 5); 338 C::size_type b = c.bucket(0); 339 I i = c.cbegin(b); 340 I j = c.cend(b); 341 assert(std::distance(i, j) == 0); 342 343 b = c.bucket(1); 344 i = c.cbegin(b); 345 j = c.cend(b); 346 assert(std::distance(i, j) == 1); 347 assert(i->first == 1); 348 assert(i->second == "one"); 349 350 b = c.bucket(2); 351 i = c.cbegin(b); 352 j = c.cend(b); 353 assert(std::distance(i, j) == 1); 354 assert(i->first == 2); 355 assert(i->second == "two"); 356 357 b = c.bucket(3); 358 i = c.cbegin(b); 359 j = c.cend(b); 360 assert(std::distance(i, j) == 1); 361 assert(i->first == 3); 362 assert(i->second == "three"); 363 364 b = c.bucket(4); 365 i = c.cbegin(b); 366 j = c.cend(b); 367 assert(std::distance(i, j) == 1); 368 assert(i->first == 4); 369 assert(i->second == "four"); 370 } 371 { 372 typedef std::unordered_map<int, std::string, std::hash<int>, std::equal_to<int>, 373 min_allocator<std::pair<const int, std::string>>> C; 374 typedef std::pair<int, std::string> P; 375 typedef C::const_local_iterator I; 376 P a[] = 377 { 378 P(1, "one"), 379 P(2, "two"), 380 P(3, "three"), 381 P(4, "four"), 382 P(1, "four"), 383 P(2, "four"), 384 }; 385 const C c(a, a + sizeof(a)/sizeof(a[0])); 386 assert(c.bucket_count() >= 5); 387 C::size_type b = c.bucket(0); 388 I i = c.cbegin(b); 389 I j = c.cend(b); 390 assert(std::distance(i, j) == 0); 391 392 b = c.bucket(1); 393 i = c.cbegin(b); 394 j = c.cend(b); 395 assert(std::distance(i, j) == 1); 396 assert(i->first == 1); 397 assert(i->second == "one"); 398 399 b = c.bucket(2); 400 i = c.cbegin(b); 401 j = c.cend(b); 402 assert(std::distance(i, j) == 1); 403 assert(i->first == 2); 404 assert(i->second == "two"); 405 406 b = c.bucket(3); 407 i = c.cbegin(b); 408 j = c.cend(b); 409 assert(std::distance(i, j) == 1); 410 assert(i->first == 3); 411 assert(i->second == "three"); 412 413 b = c.bucket(4); 414 i = c.cbegin(b); 415 j = c.cend(b); 416 assert(std::distance(i, j) == 1); 417 assert(i->first == 4); 418 assert(i->second == "four"); 419 } 420 #endif 421 } 422