diff --git a/test/unordered/rehash_tests.cpp b/test/unordered/rehash_tests.cpp index 1a93f071..5297893e 100644 --- a/test/unordered/rehash_tests.cpp +++ b/test/unordered/rehash_tests.cpp @@ -437,6 +437,35 @@ namespace rehash_tests { tracker.compare(x); } + template + void rehash_node_stability(X*, test::random_generator generator) + { + typedef typename X::value_type value_type; + std::set elements; + + test::random_values v(1000, generator); + test::ordered tracker; + tracker.insert_range(v.begin(), v.end()); + + X x(v.begin(), v.end()); + + typedef typename X::iterator iterator; + for (iterator pos = x.begin(); pos != x.end(); ++pos) { + elements.insert(boost::addressof(*pos)); + } + + x.rehash(2 * x.bucket_count()); + + for (iterator pos = x.begin(); pos != x.end(); ++pos) { + if (!BOOST_TEST( + elements.find(boost::addressof(*pos)) != elements.end())) { + break; + } + } + + tracker.compare(x); + } + template void rehash_test1(X*, test::random_generator generator) { test::random_values v(1000, generator); @@ -637,7 +666,11 @@ namespace rehash_tests { ((test_set_monotonic)(test_map_monotonic) (test_node_set_monotonic)(test_node_map_monotonic))( (default_generator)(limited_range))) -// clang-format on + UNORDERED_TEST(rehash_node_stability, + ((int_node_set_ptr)(test_node_map_ptr) + (test_node_set_tracking)(test_node_map_tracking))( + (default_generator)(generate_collisions)(limited_range))) + // clang-format on #else boost::unordered_set* int_set_ptr; boost::unordered_multiset