[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
This commit is contained in:
parent
5dabe03b41
commit
6b48742e43
|
@ -22,6 +22,7 @@
|
|||
#include <cstddef>
|
||||
|
||||
#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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A());
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <cstddef>
|
||||
|
||||
#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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A(4));
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <cstddef>
|
||||
|
||||
#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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == test_allocator<int>(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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == other_allocator<int>(-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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == min_allocator<int>());
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <cstddef>
|
||||
|
||||
#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<int>(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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == test_allocator<int>(5));
|
||||
|
@ -100,18 +93,10 @@ int main(int, char**)
|
|||
C c(c0, min_allocator<int>());
|
||||
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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == min_allocator<int>());
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <cstddef>
|
||||
|
||||
#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::const_iterator>(c.find(1), c.end(), 1, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(2), c.end(), 2, 2);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(3), c.end(), 3, 1);
|
||||
CheckConsecutiveValues<C::const_iterator>(c.find(4), c.end(), 4, 1);
|
||||
assert(c.hash_function() == test_hash<std::hash<int> >(8));
|
||||
assert(c.key_eq() == test_compare<std::equal_to<int> >(9));
|
||||
assert(c.get_allocator() == A(12));
|
||||
|
|
Loading…
Reference in New Issue