diff --git a/include/boost/unordered/detail/unique.hpp b/include/boost/unordered/detail/unique.hpp index b4a5157c..552a1d51 100644 --- a/include/boost/unordered/detail/unique.hpp +++ b/include/boost/unordered/detail/unique.hpp @@ -324,10 +324,9 @@ namespace boost { namespace unordered_detail { do { // No side effects in this initial code - // Note: can't use get_key as '*i' might not be value_type. - // TODO: Check if std::pair has an appropriate constructor. If not - // that might not be true. - // TODO: Test this line better. + // Note: can't use get_key as '*i' might not be value_type - it could + // be a pair with first_types as key_type without const or a + // different second_type. key_type const& k = extractor::extract(*i); std::size_t hash_value = this->hash_function()(k); bucket_ptr bucket = this->bucket_ptr_from_hash(hash_value); diff --git a/test/unordered/insert_tests.cpp b/test/unordered/insert_tests.cpp index 30f6d28d..a277cbb7 100644 --- a/test/unordered/insert_tests.cpp +++ b/test/unordered/insert_tests.cpp @@ -313,10 +313,12 @@ void map_tests(X*, test::random_generator generator = test::default_generator) test::check_equivalent_keys(x); } +// Some tests for when the range's value type doesn't match the container's value type. + template -void associative_insert_range_test(X*, test::random_generator generator = test::default_generator) +void map_insert_range_test1(X*, test::random_generator generator = test::default_generator) { - std::cerr<<"associative_insert_range_test\n"; + std::cerr<<"map_insert_range_test1\n"; typedef test::list > list; test::random_values v(1000, generator); @@ -327,6 +329,20 @@ void associative_insert_range_test(X*, test::random_generator generator = test:: test::check_equivalent_keys(x); } +template +void map_insert_range_test2(X*, test::random_generator generator = test::default_generator) +{ + std::cerr<<"map_insert_range_test2\n"; + + typedef test::list > list; + test::random_values > v(1000, generator); + list l(v.begin(), v.end()); + + X x; x.insert(l.begin(), l.end()); + + test::check_equivalent_keys(x); +} + boost::unordered_set >* test_set; boost::unordered_multiset >* test_multiset; boost::unordered_map >* test_map; @@ -367,7 +383,12 @@ UNORDERED_TEST(map_tests, ((default_generator)(generate_collisions)) ) -UNORDERED_TEST(associative_insert_range_test, +UNORDERED_TEST(map_insert_range_test1, + ((test_map)(test_multimap)) + ((default_generator)(generate_collisions)) +) + +UNORDERED_TEST(map_insert_range_test2, ((test_map)(test_multimap)) ((default_generator)(generate_collisions)) )