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