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