From 1286bc577f70c5b8caa83b2440484fbbb3b15a6e Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Sun, 11 Dec 2016 03:41:12 +0000 Subject: [PATCH] Fix undefined behavior in container swap tests. These swap tests were swapping non-POCS non-equal allocators which is undefined behavior. This patch changes the tests to use allocators which compare equal. In order to test that the allocators were not swapped I added an "id" field to test_allocator which does not participate in equality but does propagate across copies/swaps. This patch is based off of D26623 which was submitted by STL. llvm-svn: 289358 --- .../map/map.special/non_member_swap.pass.cpp | 8 ++--- .../multimap.special/non_member_swap.pass.cpp | 8 ++--- .../multiset.special/non_member_swap.pass.cpp | 8 ++--- .../set/set.special/non_member_swap.pass.cpp | 8 ++--- .../sequences/deque/deque.special/swap.pass.cpp | 8 ++--- .../forwardlist.spec/member_swap.pass.cpp | 32 +++++++++---------- .../forwardlist.spec/non_member_swap.pass.cpp | 32 +++++++++---------- .../containers/sequences/vector.bool/swap.pass.cpp | 8 ++--- .../sequences/vector/vector.special/swap.pass.cpp | 11 +++---- .../unord/unord.map/swap_member.pass.cpp | 32 +++++++++---------- .../unord.map.swap/swap_non_member.pass.cpp | 32 +++++++++---------- .../unord/unord.multimap/swap_member.pass.cpp | 16 +++++----- .../unord.multimap.swap/swap_non_member.pass.cpp | 32 +++++++++---------- .../unord/unord.multiset/swap_member.pass.cpp | 32 +++++++++---------- .../unord.multiset.swap/swap_non_member.pass.cpp | 32 +++++++++---------- .../unord/unord.set/swap_member.pass.cpp | 32 +++++++++---------- .../unord.set.swap/swap_non_member.pass.cpp | 32 +++++++++---------- libcxx/test/support/test_allocator.h | 36 ++++++++++++++-------- 18 files changed, 204 insertions(+), 195 deletions(-) diff --git a/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp index 103a57b..7e36797 100644 --- a/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/associative/map/map.special/non_member_swap.pass.cpp @@ -121,17 +121,17 @@ int main() V(11, 11), V(12, 12) }; - M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); - M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); + M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); + M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); - assert(m1.get_allocator() == A(1)); + assert(m1.get_allocator().get_id() == 1); // not swapped assert(m2.key_comp() == C(1)); - assert(m2.get_allocator() == A(2)); + assert(m2.get_allocator().get_id() == 2); } { typedef other_allocator A; diff --git a/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp index a075919..1dfb621 100644 --- a/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/associative/multimap/multimap.special/non_member_swap.pass.cpp @@ -155,17 +155,17 @@ int main() V(11, 11), V(12, 12) }; - M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); - M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); + M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); + M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); - assert(m1.get_allocator() == A(2)); + assert(m1.get_allocator().get_id() == 1); // not swapped assert(m2.key_comp() == C(1)); - assert(m2.get_allocator() == A(1)); + assert(m2.get_allocator().get_id() == 2); } #if TEST_STD_VER >= 11 { diff --git a/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp index 91ec4ce..faa0818 100644 --- a/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/associative/multiset/multiset.special/non_member_swap.pass.cpp @@ -118,17 +118,17 @@ int main() 11, 12 }; - M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); - M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); + M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); + M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); - assert(m1.get_allocator() == A(1)); + assert(m1.get_allocator().get_id() == 1); assert(m2.key_comp() == C(1)); - assert(m2.get_allocator() == A(2)); + assert(m2.get_allocator().get_id() == 2); } { typedef other_allocator A; diff --git a/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp b/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp index 3d2d7d7..0af4818 100644 --- a/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/associative/set/set.special/non_member_swap.pass.cpp @@ -118,17 +118,17 @@ int main() 11, 12 }; - M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1)); - M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(2)); + M m1(ar1, ar1+sizeof(ar1)/sizeof(ar1[0]), C(1), A(1, 1)); + M m2(ar2, ar2+sizeof(ar2)/sizeof(ar2[0]), C(2), A(1, 2)); M m1_save = m1; M m2_save = m2; swap(m1, m2); assert(m1 == m2_save); assert(m2 == m1_save); assert(m1.key_comp() == C(2)); - assert(m1.get_allocator() == A(1)); + assert(m1.get_allocator().get_id() == 1); assert(m2.key_comp() == C(1)); - assert(m2.get_allocator() == A(2)); + assert(m2.get_allocator().get_id() == 2); } { typedef other_allocator A; diff --git a/libcxx/test/std/containers/sequences/deque/deque.special/swap.pass.cpp b/libcxx/test/std/containers/sequences/deque/deque.special/swap.pass.cpp index ab21f43..05bbf87 100644 --- a/libcxx/test/std/containers/sequences/deque/deque.special/swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/deque/deque.special/swap.pass.cpp @@ -65,13 +65,13 @@ int main() int a1[] = {1, 3, 7, 9, 10}; int a2[] = {0, 2, 4, 5, 6, 8, 11}; typedef test_allocator A; - std::deque c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); - std::deque c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); + std::deque c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1, 1)); + std::deque c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(1, 2)); swap(c1, c2); assert((c1 == std::deque(a2, a2+sizeof(a2)/sizeof(a2[0])))); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert((c2 == std::deque(a1, a1+sizeof(a1)/sizeof(a1[0])))); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { int a1[] = {1, 3, 7, 9, 10}; diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp index e7a8d04..242a00b 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/member_swap.pass.cpp @@ -24,16 +24,16 @@ int main() typedef test_allocator A; typedef std::forward_list C; const T t1[] = {0, 1, 2, 3, 4, 5}; - C c1(std::begin(t1), std::end(t1), A(1)); + C c1(std::begin(t1), std::end(t1), A(1, 1)); const T t2[] = {10, 11, 12}; - C c2(std::begin(t2), std::end(t2), A(2)); + C c2(std::begin(t2), std::end(t2), A(1, 2)); c1.swap(c2); assert(distance(c1.begin(), c1.end()) == 3); assert(*next(c1.begin(), 0) == 10); assert(*next(c1.begin(), 1) == 11); assert(*next(c1.begin(), 2) == 12); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 6); assert(*next(c2.begin(), 0) == 0); @@ -42,19 +42,19 @@ int main() assert(*next(c2.begin(), 3) == 3); assert(*next(c2.begin(), 4) == 4); assert(*next(c2.begin(), 5) == 5); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; const T t1[] = {0, 1, 2, 3, 4, 5}; - C c1(std::begin(t1), std::end(t1), A(1)); - C c2(A(2)); + C c1(std::begin(t1), std::end(t1), A(1, 1)); + C c2(A(1, 2)); c1.swap(c2); assert(distance(c1.begin(), c1.end()) == 0); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 6); assert(*next(c2.begin(), 0) == 0); @@ -63,39 +63,39 @@ int main() assert(*next(c2.begin(), 3) == 3); assert(*next(c2.begin(), 4) == 4); assert(*next(c2.begin(), 5) == 5); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; - C c1(A(1)); + C c1(A(1, 1)); const T t2[] = {10, 11, 12}; - C c2(std::begin(t2), std::end(t2), A(2)); + C c2(std::begin(t2), std::end(t2), A(1, 2)); c1.swap(c2); assert(distance(c1.begin(), c1.end()) == 3); assert(*next(c1.begin(), 0) == 10); assert(*next(c1.begin(), 1) == 11); assert(*next(c1.begin(), 2) == 12); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 0); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; - C c1(A(1)); - C c2(A(2)); + C c1(A(1, 1)); + C c2(A(1, 2)); c1.swap(c2); assert(distance(c1.begin(), c1.end()) == 0); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 0); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { diff --git a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp index 983d8140..44820d9 100644 --- a/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/forwardlist/forwardlist.spec/non_member_swap.pass.cpp @@ -25,16 +25,16 @@ int main() typedef test_allocator A; typedef std::forward_list C; const T t1[] = {0, 1, 2, 3, 4, 5}; - C c1(std::begin(t1), std::end(t1), A(1)); + C c1(std::begin(t1), std::end(t1), A(1, 1)); const T t2[] = {10, 11, 12}; - C c2(std::begin(t2), std::end(t2), A(2)); + C c2(std::begin(t2), std::end(t2), A(1, 2)); swap(c1, c2); assert(distance(c1.begin(), c1.end()) == 3); assert(*next(c1.begin(), 0) == 10); assert(*next(c1.begin(), 1) == 11); assert(*next(c1.begin(), 2) == 12); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 6); assert(*next(c2.begin(), 0) == 0); @@ -43,19 +43,19 @@ int main() assert(*next(c2.begin(), 3) == 3); assert(*next(c2.begin(), 4) == 4); assert(*next(c2.begin(), 5) == 5); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; const T t1[] = {0, 1, 2, 3, 4, 5}; - C c1(std::begin(t1), std::end(t1), A(1)); - C c2(A(2)); + C c1(std::begin(t1), std::end(t1), A(1, 1)); + C c2(A(1, 2)); swap(c1, c2); assert(distance(c1.begin(), c1.end()) == 0); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 6); assert(*next(c2.begin(), 0) == 0); @@ -64,39 +64,39 @@ int main() assert(*next(c2.begin(), 3) == 3); assert(*next(c2.begin(), 4) == 4); assert(*next(c2.begin(), 5) == 5); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; - C c1(A(1)); + C c1(A(1, 1)); const T t2[] = {10, 11, 12}; - C c2(std::begin(t2), std::end(t2), A(2)); + C c2(std::begin(t2), std::end(t2), A(1, 2)); swap(c1, c2); assert(distance(c1.begin(), c1.end()) == 3); assert(*next(c1.begin(), 0) == 10); assert(*next(c1.begin(), 1) == 11); assert(*next(c1.begin(), 2) == 12); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 0); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { typedef int T; typedef test_allocator A; typedef std::forward_list C; - C c1(A(1)); - C c2(A(2)); + C c1(A(1, 1)); + C c2(A(1, 2)); swap(c1, c2); assert(distance(c1.begin(), c1.end()) == 0); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert(distance(c2.begin(), c2.end()) == 0); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } { diff --git a/libcxx/test/std/containers/sequences/vector.bool/swap.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/swap.pass.cpp index 81af528..60b612a 100644 --- a/libcxx/test/std/containers/sequences/vector.bool/swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/swap.pass.cpp @@ -30,15 +30,15 @@ int main() } { typedef test_allocator A; - std::vector v1(100, true, A(1)); - std::vector v2(200, false, A(2)); + std::vector v1(100, true, A(1, 1)); + std::vector v2(200, false, A(1, 2)); swap(v1, v2); assert(v1.size() == 200); assert(v1.capacity() >= 200); assert(v2.size() == 100); assert(v2.capacity() >= 100); - assert(v1.get_allocator() == A(1)); - assert(v2.get_allocator() == A(2)); + assert(v1.get_allocator().get_id() == 1); + assert(v2.get_allocator().get_id() == 2); } { typedef other_allocator A; diff --git a/libcxx/test/std/containers/sequences/vector/vector.special/swap.pass.cpp b/libcxx/test/std/containers/sequences/vector/vector.special/swap.pass.cpp index 3d01129..ae2ff39 100644 --- a/libcxx/test/std/containers/sequences/vector/vector.special/swap.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector/vector.special/swap.pass.cpp @@ -77,21 +77,18 @@ int main() assert(is_contiguous_container_asan_correct(c1)); assert(is_contiguous_container_asan_correct(c2)); } -#ifndef _LIBCPP_DEBUG_LEVEL -// This test known to result in undefined behavior detected by _LIBCPP_DEBUG_LEVEL >= 1 { int a1[] = {1, 3, 7, 9, 10}; int a2[] = {0, 2, 4, 5, 6, 8, 11}; typedef test_allocator A; - std::vector c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1)); - std::vector c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(2)); + std::vector c1(a1, a1+sizeof(a1)/sizeof(a1[0]), A(1, 1)); + std::vector c2(a2, a2+sizeof(a2)/sizeof(a2[0]), A(1, 2)); swap(c1, c2); assert((c1 == std::vector(a2, a2+sizeof(a2)/sizeof(a2[0])))); - assert(c1.get_allocator() == A(1)); + assert(c1.get_allocator().get_id() == 1); assert((c2 == std::vector(a1, a1+sizeof(a1)/sizeof(a1[0])))); - assert(c2.get_allocator() == A(2)); + assert(c2.get_allocator().get_id() == 2); } -#endif { int a1[] = {1, 3, 7, 9, 10}; int a2[] = {0, 2, 4, 5, 6, 8, 11}; diff --git a/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp index 5c5827f..86a068c 100644 --- a/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.map/swap_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_compare > Compare; typedef test_allocator > Alloc; typedef std::unordered_map C; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -90,7 +90,7 @@ int main() assert(c1.at(80) == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1, "four"), P(2, "four"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.at(4) == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -189,7 +189,7 @@ int main() assert(c1.at(80) == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.at(4) == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp index f65b536..2044f42 100644 --- a/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.map/unord.map.swap/swap_non_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_compare > Compare; typedef test_allocator > Alloc; typedef std::unordered_map C; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -90,7 +90,7 @@ int main() assert(c1.at(80) == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1, "four"), P(2, "four"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.at(4) == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -189,7 +189,7 @@ int main() assert(c1.at(80) == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.at(4) == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp index 6020f05..9c4e394 100644 --- a/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multimap/swap_member.pass.cpp @@ -44,7 +44,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -53,7 +53,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -92,7 +92,7 @@ int main() assert(c1.find(80)->second == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -101,7 +101,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -130,7 +130,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -145,7 +145,7 @@ int main() assert(c2.find(4)->second == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -193,7 +193,7 @@ int main() assert(c1.find(80)->second == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -208,7 +208,7 @@ int main() assert(c2.find(4)->second == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp index 4bdd9b07..06e6c65 100644 --- a/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multimap/unord.multimap.swap/swap_non_member.pass.cpp @@ -34,8 +34,8 @@ int main() typedef test_allocator > Alloc; typedef std::unordered_multimap C; typedef std::pair P; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -43,7 +43,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -52,7 +52,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -74,8 +74,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -91,7 +91,7 @@ int main() assert(c1.find(80)->second == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -100,7 +100,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -120,8 +120,8 @@ int main() P(1, "four"), P(2, "four"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -129,7 +129,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -144,7 +144,7 @@ int main() assert(c2.find(4)->second == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -175,8 +175,8 @@ int main() P(70, "seventy"), P(80, "eighty"), }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -192,7 +192,7 @@ int main() assert(c1.find(80)->second == "eighty"); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -207,7 +207,7 @@ int main() assert(c2.find(4)->second == "four"); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp index 322e9df..c0c9e90 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/swap_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_allocator Alloc; typedef std::unordered_multiset C; typedef int P; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70), P(80) }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -90,7 +90,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1), P(2) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70), P(80) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -189,7 +189,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp index dc22cae..d4efb68 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.swap/swap_non_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_allocator Alloc; typedef std::unordered_multiset C; typedef int P; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70), P(80) }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -90,7 +90,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1), P(2) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70), P(80) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -189,7 +189,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp b/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp index 4fb055e..ea88c53 100644 --- a/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.set/swap_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_allocator Alloc; typedef std::unordered_set C; typedef int P; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70), P(80) }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -90,7 +90,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1), P(2) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70), P(80) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); c1.swap(c2); @@ -189,7 +189,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp b/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp index 20d325d..c2bd759 100644 --- a/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.set/unord.set.swap/swap_non_member.pass.cpp @@ -33,8 +33,8 @@ int main() typedef test_allocator Alloc; typedef std::unordered_set C; typedef int P; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -42,7 +42,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -51,7 +51,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -73,8 +73,8 @@ int main() P(70), P(80) }; - C c1(0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -90,7 +90,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -99,7 +99,7 @@ int main() assert(c2.size() == 0); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -119,8 +119,8 @@ int main() P(1), P(2) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -128,7 +128,7 @@ int main() assert(c1.size() == 0); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -141,7 +141,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); @@ -172,8 +172,8 @@ int main() P(70), P(80) }; - C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1)); - C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(2)); + C c1(std::begin(a1), std::end(a1), 0, Hash(1), Compare(1), Alloc(1, 1)); + C c2(std::begin(a2), std::end(a2), 0, Hash(2), Compare(2), Alloc(1, 2)); c2.max_load_factor(2); swap(c1, c2); @@ -189,7 +189,7 @@ int main() assert(*c1.find(80) == 80); assert(c1.hash_function() == Hash(2)); assert(c1.key_eq() == Compare(2)); - assert(c1.get_allocator() == Alloc(1)); + assert(c1.get_allocator().get_id() == 1); assert(static_cast(std::distance(c1.begin(), c1.end())) == c1.size()); assert(static_cast(std::distance(c1.cbegin(), c1.cend())) == c1.size()); assert(c1.max_load_factor() == 2); @@ -202,7 +202,7 @@ int main() assert(c2.count(4) == 1); assert(c2.hash_function() == Hash(1)); assert(c2.key_eq() == Compare(1)); - assert(c2.get_allocator() == Alloc(2)); + assert(c2.get_allocator().get_id() == 2); assert(static_cast(std::distance(c2.begin(), c2.end())) == c2.size()); assert(static_cast(std::distance(c2.cbegin(), c2.cend())) == c2.size()); assert(c2.max_load_factor() == 1); diff --git a/libcxx/test/support/test_allocator.h b/libcxx/test/support/test_allocator.h index 04f15ab..e77796b 100644 --- a/libcxx/test/support/test_allocator.h +++ b/libcxx/test/support/test_allocator.h @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -46,8 +47,8 @@ template class test_allocator : public test_alloc_base { - int data_; - + int data_; // participates in equality + int id_; // unique identifier, doesn't participate in equality template friend class test_allocator; public: @@ -61,13 +62,17 @@ public: template struct rebind {typedef test_allocator other;}; - test_allocator() TEST_NOEXCEPT : data_(0) {++count;} - explicit test_allocator(int i) TEST_NOEXCEPT : data_(i) {++count;} + test_allocator() TEST_NOEXCEPT : data_(0), id_(0) {++count;} + explicit test_allocator(int i, int id = 0) TEST_NOEXCEPT : data_(i), id_(id) + {++count;} test_allocator(const test_allocator& a) TEST_NOEXCEPT - : data_(a.data_) {++count;} + : data_(a.data_), id_(a.id_) {++count;} template test_allocator(const test_allocator& a) TEST_NOEXCEPT - : data_(a.data_) {++count;} - ~test_allocator() TEST_NOEXCEPT {assert(data_ >= 0); --count; data_ = -1;} + : data_(a.data_), id_(a.id_) {++count;} + ~test_allocator() TEST_NOEXCEPT { + assert(data_ >= 0); assert(id_ >= 0); + --count; data_ = -1; id_ = -1; + } pointer address(reference x) const {return &x;} const_pointer address(const_reference x) const {return &x;} pointer allocate(size_type n, const void* = 0) @@ -101,6 +106,9 @@ public: {return x.data_ == y.data_;} friend bool operator!=(const test_allocator& x, const test_allocator& y) {return !(x == y);} + + int get_data() const { return data_; } + int get_id() const { return id_; } }; template @@ -169,6 +177,7 @@ class test_allocator : public test_alloc_base { int data_; + int id_; template friend class test_allocator; public: @@ -181,13 +190,16 @@ public: template struct rebind {typedef test_allocator other;}; - test_allocator() TEST_NOEXCEPT : data_(0) {} - explicit test_allocator(int i) TEST_NOEXCEPT : data_(i) {} + test_allocator() TEST_NOEXCEPT : data_(0), id_(0) {} + explicit test_allocator(int i, int id = 0) TEST_NOEXCEPT : data_(i), id_(id) {} test_allocator(const test_allocator& a) TEST_NOEXCEPT - : data_(a.data_) {} + : data_(a.data_), id_(a.id_) {} template test_allocator(const test_allocator& a) TEST_NOEXCEPT - : data_(a.data_) {} - ~test_allocator() TEST_NOEXCEPT {data_ = -1;} + : data_(a.data_), id_(a.id_) {} + ~test_allocator() TEST_NOEXCEPT {data_ = -1; id_ = -1; } + + int get_id() const { return id_; } + int get_data() const { return data_; } friend bool operator==(const test_allocator& x, const test_allocator& y) {return x.data_ == y.data_;} -- 2.7.4