move_alloc.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//===----------------------------------------------------------------------===// 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The LLVM Compiler Infrastructure 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)//===----------------------------------------------------------------------===// 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// <unordered_map> 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// template <class Key, class T, class Hash = hash<Key>, class Pred = equal_to<Key>, 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// class Alloc = allocator<pair<const Key, T>>> 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// class unordered_map 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// unordered_map(unordered_map&& u, const allocator_type& a); 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <unordered_map> 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <string> 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <cassert> 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "../../../test_compare.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "../../../test_hash.h" 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "../../../test_allocator.h" 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int main() 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) { 3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) typedef std::pair<int, std::string> P; 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef test_allocator<std::pair<const int, std::string>> A; 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef std::unordered_map<int, std::string, 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_hash<std::hash<int> >, 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test_compare<std::equal_to<int> >, 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) A 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) > C; 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) P a[] = 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(1, "one"), 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(2, "two"), 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(3, "three"), 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(4, "four"), 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(1, "four"), 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) P(2, "four"), 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) C c0(a, a + sizeof(a)/sizeof(a[0]), 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7, 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test_hash<std::hash<int> >(8), 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) test_compare<std::equal_to<int> >(9), 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) A(10) 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ); 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) C c(std::move(c0), A(12)); 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert(c.bucket_count() >= 5); 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert(c.size() == 4); 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert(c.at(1) == "one"); 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert(c.at(2) == "two"); 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) assert(c.at(3) == "three"); 58 assert(c.at(4) == "four"); 59 assert(c.hash_function() == test_hash<std::hash<int> >(8)); 60 assert(c.key_eq() == test_compare<std::equal_to<int> >(9)); 61 assert(c.get_allocator() == A(12)); 62 assert(!c.empty()); 63 assert(std::distance(c.begin(), c.end()) == c.size()); 64 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 65 assert(c.load_factor() == (float)c.size()/c.bucket_count()); 66 assert(c.max_load_factor() == 1); 67 68 assert(c0.empty()); 69 } 70 { 71 typedef std::pair<int, std::string> P; 72 typedef test_allocator<std::pair<const int, std::string>> A; 73 typedef std::unordered_map<int, std::string, 74 test_hash<std::hash<int> >, 75 test_compare<std::equal_to<int> >, 76 A 77 > C; 78 P a[] = 79 { 80 P(1, "one"), 81 P(2, "two"), 82 P(3, "three"), 83 P(4, "four"), 84 P(1, "four"), 85 P(2, "four"), 86 }; 87 C c0(a, a + sizeof(a)/sizeof(a[0]), 88 7, 89 test_hash<std::hash<int> >(8), 90 test_compare<std::equal_to<int> >(9), 91 A(10) 92 ); 93 C c(std::move(c0), A(10)); 94 assert(c.bucket_count() == 7); 95 assert(c.size() == 4); 96 assert(c.at(1) == "one"); 97 assert(c.at(2) == "two"); 98 assert(c.at(3) == "three"); 99 assert(c.at(4) == "four"); 100 assert(c.hash_function() == test_hash<std::hash<int> >(8)); 101 assert(c.key_eq() == test_compare<std::equal_to<int> >(9)); 102 assert(c.get_allocator() == A(10)); 103 assert(!c.empty()); 104 assert(std::distance(c.begin(), c.end()) == c.size()); 105 assert(std::distance(c.cbegin(), c.cend()) == c.size()); 106 assert(c.load_factor() == (float)c.size()/c.bucket_count()); 107 assert(c.max_load_factor() == 1); 108 109 assert(c0.empty()); 110 } 111#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 112} 113