From 6b48742e43f603b6458ed02dd4dc5d8021922a21 Mon Sep 17 00:00:00 2001 From: Louis Dionne Date: Thu, 23 May 2019 13:11:00 +0000 Subject: [libcxx][tests] Fix order checking in unordered_multiset tests. Some tests assume that iteration through an unordered multiset elements will return them in the same order as at the container creation. This assumption is not true since the container is unordered, so that no specific order of elements is ever guaranteed for such container. This patch introduces checks verifying that any iteration will return elements exactly from a set of valid values and without repetition, but in no particular order. Thanks to Andrey Maksimov for the patch. Differential Revision: https://reviews.llvm.org/D56500 llvm-svn: 361494 --- .../unord.multiset.cnstr/assign_copy.pass.cpp | 49 ++++++---------------- .../unord.multiset.cnstr/assign_move.pass.cpp | 17 +++----- .../unord.multiset.cnstr/copy.pass.cpp | 49 ++++++---------------- .../unord.multiset.cnstr/copy_alloc.pass.cpp | 33 ++++----------- .../unord.multiset.cnstr/move_alloc.pass.cpp | 17 +++----- 5 files changed, 45 insertions(+), 120 deletions(-) (limited to 'libcxx/test/std/containers') diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp index 1fcd71002e9..1f8cc68b382 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_copy.pass.cpp @@ -22,6 +22,7 @@ #include #include "test_macros.h" +#include "../../../check_consecutive.h" #include "../../../test_compare.h" #include "../../../test_hash.h" #include "test_allocator.h" @@ -61,18 +62,10 @@ int main(int, char**) c = c0; LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == A(4)); @@ -133,18 +126,10 @@ int main(int, char**) c = c0; assert(c.bucket_count() >= 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == A(10)); @@ -187,18 +172,10 @@ int main(int, char**) c = c0; LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == A()); diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp index 1ed77851cf3..f375baeaf2c 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/assign_move.pass.cpp @@ -23,6 +23,7 @@ #include #include "test_macros.h" +#include "../../../check_consecutive.h" #include "../../../test_compare.h" #include "../../../test_hash.h" #include "test_allocator.h" @@ -62,18 +63,10 @@ int main(int, char**) c = std::move(c0); LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == A(4)); diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp index f3ca15241ad..aa2edf1de44 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy.pass.cpp @@ -21,6 +21,7 @@ #include #include "test_macros.h" +#include "../../../check_consecutive.h" #include "../../../test_compare.h" #include "../../../test_hash.h" #include "test_allocator.h" @@ -53,18 +54,10 @@ int main(int, char**) C c = c0; LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == test_allocator(10)); @@ -100,18 +93,10 @@ int main(int, char**) C c = c0; LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == other_allocator(-2)); @@ -146,18 +131,10 @@ int main(int, char**) C c = c0; LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == min_allocator()); diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp index 4e99490ea61..d0579292af4 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/copy_alloc.pass.cpp @@ -21,6 +21,7 @@ #include #include "test_macros.h" +#include "../../../check_consecutive.h" #include "../../../test_compare.h" #include "../../../test_hash.h" #include "test_allocator.h" @@ -53,18 +54,10 @@ int main(int, char**) C c(c0, test_allocator(5)); LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == test_allocator(5)); @@ -100,18 +93,10 @@ int main(int, char**) C c(c0, min_allocator()); LIBCPP_ASSERT(c.bucket_count() == 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == min_allocator()); diff --git a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp index eb567a9da75..3ed04574bb0 100644 --- a/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp +++ b/libcxx/test/std/containers/unord/unord.multiset/unord.multiset.cnstr/move_alloc.pass.cpp @@ -23,6 +23,7 @@ #include #include "test_macros.h" +#include "../../../check_consecutive.h" #include "../../../test_compare.h" #include "../../../test_hash.h" #include "test_allocator.h" @@ -56,18 +57,10 @@ int main(int, char**) C c(std::move(c0), A(12)); assert(c.bucket_count() >= 7); assert(c.size() == 6); - C::const_iterator i = c.cbegin(); - assert(*i == 1); - ++i; - assert(*i == 1); - ++i; - assert(*i == 2); - ++i; - assert(*i == 2); - ++i; - assert(*i == 3); - ++i; - assert(*i == 4); + CheckConsecutiveValues(c.find(1), c.end(), 1, 2); + CheckConsecutiveValues(c.find(2), c.end(), 2, 2); + CheckConsecutiveValues(c.find(3), c.end(), 3, 1); + CheckConsecutiveValues(c.find(4), c.end(), 4, 1); assert(c.hash_function() == test_hash >(8)); assert(c.key_eq() == test_compare >(9)); assert(c.get_allocator() == A(12)); -- cgit v1.2.3