diff --git a/include/boost/unordered/unordered_flat_map.hpp b/include/boost/unordered/unordered_flat_map.hpp index 74dad701..f415b038 100644 --- a/include/boost/unordered/unordered_flat_map.hpp +++ b/include/boost/unordered/unordered_flat_map.hpp @@ -350,7 +350,7 @@ namespace boost { unordered_flat_map& source) { - (void)source; + table_.merge(source.table_); } template @@ -358,7 +358,7 @@ namespace boost { unordered_flat_map&& source) { - (void)source; + table_.merge(std::move(source.table_)); } /// Lookup diff --git a/include/boost/unordered/unordered_flat_set.hpp b/include/boost/unordered/unordered_flat_set.hpp index 9a740448..7c0fe941 100644 --- a/include/boost/unordered/unordered_flat_set.hpp +++ b/include/boost/unordered/unordered_flat_set.hpp @@ -266,13 +266,13 @@ namespace boost { template void merge(unordered_flat_set& source) { - (void) source; + table_.merge(source.table_); } template void merge(unordered_flat_set&& source) { - (void) source; + table_.merge(std::move(source.table_)); } /// Lookup diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 041dbdac..783d3497 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -119,6 +119,7 @@ build_foa insert_tests ; build_foa insert_hint_tests ; build_foa emplace_tests ; build_foa erase_tests ; +build_foa merge_tests ; build_foa find_tests ; build_foa at_tests ; build_foa load_factor_tests ; diff --git a/test/unordered/merge_tests.cpp b/test/unordered/merge_tests.cpp index 897abb34..1d169373 100644 --- a/test/unordered/merge_tests.cpp +++ b/test/unordered/merge_tests.cpp @@ -4,9 +4,15 @@ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include "../helpers/postfix.hpp" -#include "../helpers/prefix.hpp" +#ifdef BOOST_UNORDERED_FOA_TESTS +#include +#include +#include +#else #include #include +#endif +#include "../helpers/prefix.hpp" #include "../helpers/count.hpp" #include "../helpers/helpers.hpp" @@ -19,8 +25,13 @@ namespace merge_tests { UNORDERED_AUTO_TEST (merge_set) { +#ifdef BOOST_UNORDERED_FOA_TESTS + boost::unordered_flat_set x; + boost::unordered_flat_set y; +#else boost::unordered_set x; boost::unordered_set y; +#endif x.merge(y); BOOST_TEST(x.empty()); @@ -57,6 +68,7 @@ namespace merge_tests { test::check_equivalent_keys(y); } +#ifndef BOOST_UNORDERED_FOA_TESTS UNORDERED_AUTO_TEST (merge_multiset) { boost::unordered_multiset x; boost::unordered_multiset y; @@ -134,6 +146,7 @@ namespace merge_tests { test::check_equivalent_keys(x); test::check_equivalent_keys(y); } +#endif template void merge_empty_test(X1*, X2*, test::random_generator generator) @@ -228,6 +241,82 @@ namespace merge_tests { test::check_equivalent_keys(x2); } + using test::default_generator; + using test::generate_collisions; + +#ifdef BOOST_UNORDERED_FOA_TESTS + boost::unordered_flat_set >* test_set_std_alloc; + + + boost::unordered_flat_map >* test_map_std_alloc; + + + boost::unordered_flat_set >* test_set; + + + boost::unordered_flat_map >* test_map; + + // clang-format off +UNORDERED_TEST(merge_empty_test, + ((test_set_std_alloc)) + ((test_set_std_alloc)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_empty_test, + ((test_map_std_alloc)) + ((test_map_std_alloc)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_empty_test, + ((test_set)) + ((test_set)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_empty_test, + ((test_map)) + ((test_map)) + ((default_generator)(generate_collisions))) + +UNORDERED_TEST(merge_into_empty_test, + ((test_set_std_alloc)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_empty_test, + ((test_map_std_alloc)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_empty_test, + ((test_set)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_empty_test, + ((test_map)) + ((default_generator)(generate_collisions))) + +UNORDERED_TEST(merge_into_unique_keys_test, + ((test_set_std_alloc)) + ((test_set_std_alloc)) + ((0)(1)(2)) + ((0)(1)(2)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_unique_keys_test, + ((test_map_std_alloc)) + ((test_map_std_alloc)) + ((0)(1)(2)) + ((0)(1)(2)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_unique_keys_test, + ((test_set)) + ((test_set)) + ((0)(1)(2)) + ((0)(1)(2)) + ((default_generator)(generate_collisions))) +UNORDERED_TEST(merge_into_unique_keys_test, + ((test_map)) + ((test_map)) + ((0)(1)(2)) + ((0)(1)(2)) + ((default_generator)(generate_collisions))) + // clang-format on +#else boost::unordered_set >* test_set_std_alloc; boost::unordered_multiset >* test_multimap; - using test::default_generator; - using test::generate_collisions; - // clang-format off UNORDERED_TEST(merge_empty_test, ((test_set_std_alloc)(test_multiset_std_alloc)) @@ -332,6 +418,8 @@ UNORDERED_TEST(merge_into_equiv_keys_test, ((0)(1)(2)) ((default_generator)(generate_collisions))) // clang-format on +#endif + } RUN_TESTS()