forked from boostorg/unordered
Unordered: Fix some portability issues in tests.
- Simplify mechanism for detecting traits of test allocators. There were some portability issues, but rather than fix them I've just gone for a simpler mechanism. Does mean that the relevant tests can't be run for other allocators. - Fix a couple of unnecessary_copy_tests, whose results were the wrong way round. - It appears that Visual C++ only implements RVO for implicitly defined copy constructors in debug mode, so adjust a move_test to account for the extra copies now that the copy constructors are explicitly defined. [SVN r73798]
This commit is contained in:
@@ -153,11 +153,16 @@ namespace move_tests
|
||||
T y(create(v, count, hf, eq, al, 1.0), al);
|
||||
#if !defined(BOOST_NO_RVALUE_REFERENCES)
|
||||
BOOST_TEST(count == test::global_object_count);
|
||||
#else
|
||||
#elif defined(BOOST_HAS_NRVO)
|
||||
BOOST_TEST(
|
||||
test::global_object_count.constructions - count.constructions <=
|
||||
(test::is_map<T>::value ? 50 : 25));
|
||||
BOOST_TEST(count.instances == test::global_object_count.instances);
|
||||
#else
|
||||
BOOST_TEST(
|
||||
test::global_object_count.constructions - count.constructions <=
|
||||
(test::is_map<T>::value ? 100 : 50));
|
||||
BOOST_TEST(count.instances == test::global_object_count.instances);
|
||||
#endif
|
||||
test::check_container(y, v);
|
||||
BOOST_TEST(test::equivalent(y.hash_function(), hf));
|
||||
@@ -188,7 +193,7 @@ namespace move_tests
|
||||
test::check_container(y, v2);
|
||||
test::check_equivalent_keys(y);
|
||||
BOOST_TEST(y.max_load_factor() == 2.0);
|
||||
if (test::is_propagate_on_move<allocator_type>::value) {
|
||||
if (allocator_type::is_propagate_on_move) {
|
||||
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
||||
}
|
||||
else {
|
||||
@@ -202,14 +207,14 @@ namespace move_tests
|
||||
T y(0, hf, eq, al1);
|
||||
y = create(v, count, hf, eq, al2, 0.5);
|
||||
#if defined(BOOST_HAS_NRVO)
|
||||
if (test::is_propagate_on_move<allocator_type>::value) {
|
||||
if (allocator_type::is_propagate_on_move) {
|
||||
BOOST_TEST(count == test::global_object_count);
|
||||
}
|
||||
#endif
|
||||
test::check_container(y, v);
|
||||
test::check_equivalent_keys(y);
|
||||
BOOST_TEST(y.max_load_factor() == 0.5);
|
||||
if (test::is_propagate_on_move<allocator_type>::value) {
|
||||
if (allocator_type::is_propagate_on_move) {
|
||||
BOOST_TEST(test::equivalent(y.get_allocator(), al2));
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user