X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fboost%2Flibs%2Funordered%2Ftest%2Funordered%2Fcompile_map.cpp;h=6a84d595a47de70e7000164726bda18e1539fea4;hb=b32b81446b3b05102be0267e79203f59329c1d97;hp=f42da0de4413eb359acefe5c66728b8b696349c2;hpb=215dd7151453fae88e6f968c975b6ce309d42dcf;p=ceph.git diff --git a/ceph/src/boost/libs/unordered/test/unordered/compile_map.cpp b/ceph/src/boost/libs/unordered/test/unordered/compile_map.cpp index f42da0de4..6a84d595a 100644 --- a/ceph/src/boost/libs/unordered/test/unordered/compile_map.cpp +++ b/ceph/src/boost/libs/unordered/test/unordered/compile_map.cpp @@ -6,228 +6,243 @@ // This test creates the containers with members that meet their minimum // requirements. Makes sure everything compiles and is defined correctly. +// clang-format off #include "../helpers/prefix.hpp" #include #include "../helpers/postfix.hpp" +// clang-format on -#include #include "../helpers/test.hpp" #include "../objects/minimal.hpp" #include "./compile_tests.hpp" // Explicit instantiation to catch compile-time errors -template class boost::unordered_map< - int, - int, - boost::hash, - std::equal_to, - test::minimal::allocator > >; -template class boost::unordered_multimap< - int const, - int const, - boost::hash, - std::equal_to, - test::minimal::allocator > >; - -template class boost::unordered_map< - test::minimal::assignable const, - test::minimal::default_assignable const, +#define INSTANTIATE(type) \ + template class boost::unordered::detail::instantiate_##type + +INSTANTIATE(map), std::equal_to, + test::minimal::allocator >; +INSTANTIATE(multimap), + std::equal_to, test::minimal::allocator >; + +INSTANTIATE( + map), + test::minimal::equal_to, + test::minimal::allocator >; +INSTANTIATE(multimap), + test::minimal::equal_to, + test::minimal::allocator >; + +UNORDERED_AUTO_TEST (test0) { + test::minimal::constructor_param x; + + typedef std::pair + value_type; + value_type value(x, x); + + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n"; + + boost::unordered_map int_map; + + boost::unordered_map, std::equal_to, + test::minimal::cxx11_allocator > > + int_map2; + + boost::unordered_map, test::minimal::equal_to, - test::minimal::allocator >; -template class boost::unordered_multimap< - test::minimal::assignable, - test::minimal::assignable, - test::minimal::hash, + test::minimal::allocator > + map; + + container_test(int_map, std::pair(0, 0)); + container_test(int_map2, std::pair(0, 0)); + container_test(map, value); + + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n"; + + boost::unordered_multimap int_multimap; + + boost::unordered_multimap, std::equal_to, + test::minimal::cxx11_allocator > > + int_multimap2; + + boost::unordered_multimap, test::minimal::equal_to, - test::minimal::allocator >; + test::minimal::allocator > + multimap; -UNORDERED_AUTO_TEST(test0) -{ - test::minimal::constructor_param x; + container_test(int_multimap, std::pair(0, 0)); + container_test(int_multimap2, std::pair(0, 0)); + container_test(multimap, value); +} - typedef std::pair value_type; - value_type value(x, x); +UNORDERED_AUTO_TEST (equality_tests) { + typedef std::pair + value_type; + + boost::unordered_map int_map; + + boost::unordered_map, std::equal_to, + test::minimal::cxx11_allocator > > + int_map2; + + boost::unordered_map, + test::minimal::equal_to< + test::minimal::copy_constructible_equality_comparable>, + test::minimal::allocator > + map; + + equality_test(int_map); + equality_test(int_map2); + equality_test(map); + + boost::unordered_multimap int_multimap; + + boost::unordered_multimap, std::equal_to, + test::minimal::cxx11_allocator > > + int_multimap2; + + boost::unordered_multimap< + test::minimal::copy_constructible_equality_comparable, + test::minimal::copy_constructible_equality_comparable, + test::minimal::hash, + test::minimal::equal_to< + test::minimal::copy_constructible_equality_comparable>, + test::minimal::allocator > + multimap; + + equality_test(int_multimap); + equality_test(int_multimap2); + equality_test(multimap); +} - std::cout<<"Test unordered_map.\n"; +UNORDERED_AUTO_TEST (test1) { + boost::hash hash; + std::equal_to equal_to; + int value = 0; + std::pair map_value(0, 0); - boost::unordered_map int_map; + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n"; - boost::unordered_map, std::equal_to, - test::minimal::cxx11_allocator > - > int_map2; + boost::unordered_map map; - boost::unordered_map< - test::minimal::assignable, - test::minimal::assignable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > map; + boost::unordered_map, std::equal_to, + test::minimal::cxx11_allocator > > + map2; - container_test(int_map, std::pair(0, 0)); - container_test(int_map2, std::pair(0, 0)); - container_test(map, value); + unordered_unique_test(map, map_value); + unordered_map_test(map, value, value); + unordered_copyable_test(map, value, map_value, hash, equal_to); + unordered_map_functions(map, value, value); - std::cout<<"Test unordered_multimap.\n"; + unordered_unique_test(map2, map_value); + unordered_map_test(map2, value, value); + unordered_copyable_test(map2, value, map_value, hash, equal_to); + unordered_map_functions(map2, value, value); - boost::unordered_multimap int_multimap; + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n"; - boost::unordered_multimap, std::equal_to, - test::minimal::cxx11_allocator > - > int_multimap2; + boost::unordered_multimap multimap; - boost::unordered_multimap< - test::minimal::assignable, - test::minimal::assignable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > multimap; + boost::unordered_multimap, std::equal_to, + test::minimal::cxx11_allocator > > + multimap2; - container_test(int_multimap, std::pair(0, 0)); - container_test(int_multimap2, std::pair(0, 0)); - container_test(multimap, value); -} + unordered_equivalent_test(multimap, map_value); + unordered_map_test(multimap, value, value); + unordered_copyable_test(multimap, value, map_value, hash, equal_to); -UNORDERED_AUTO_TEST(equality_tests) { - typedef std::pair< - test::minimal::copy_constructible_equality_comparable const, - test::minimal::copy_constructible_equality_comparable> value_type; - - boost::unordered_map int_map; - - boost::unordered_map, std::equal_to, - test::minimal::cxx11_allocator > - > int_map2; - - boost::unordered_map< - test::minimal::copy_constructible_equality_comparable, - test::minimal::copy_constructible_equality_comparable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > map; - - equality_test(int_map); - equality_test(int_map2); - equality_test(map); - - boost::unordered_multimap int_multimap; - - boost::unordered_multimap, std::equal_to, - test::minimal::cxx11_allocator > - > int_multimap2; - - boost::unordered_multimap< - test::minimal::copy_constructible_equality_comparable, - test::minimal::copy_constructible_equality_comparable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > multimap; - - equality_test(int_multimap); - equality_test(int_multimap2); - equality_test(multimap); + unordered_equivalent_test(multimap2, map_value); + unordered_map_test(multimap2, value, value); + unordered_copyable_test(multimap2, value, map_value, hash, equal_to); } -UNORDERED_AUTO_TEST(test1) { - boost::hash hash; - std::equal_to equal_to; - int value = 0; - std::pair map_value(0, 0); +UNORDERED_AUTO_TEST (test2) { + test::minimal::constructor_param x; - std::cout<<"Test unordered_map.\n"; + test::minimal::assignable assignable(x); + test::minimal::copy_constructible copy_constructible(x); + test::minimal::hash hash(x); + test::minimal::equal_to equal_to(x); - boost::unordered_map map; + typedef std::pair + map_value_type; + map_value_type map_value(assignable, assignable); - boost::unordered_map, std::equal_to, - test::minimal::cxx11_allocator > - > map2; + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_map.\n"; + + boost::unordered_map, + test::minimal::equal_to, + test::minimal::allocator > + map; - unordered_unique_test(map, map_value); - unordered_map_test(map, value, value); - unordered_copyable_test(map, value, map_value, hash, equal_to); - unordered_map_functions(map, value, value); + unordered_unique_test(map, map_value); + unordered_map_test(map, assignable, assignable); + unordered_copyable_test(map, assignable, map_value, hash, equal_to); + unordered_map_member_test(map, map_value); - unordered_unique_test(map2, map_value); - unordered_map_test(map2, value, value); - unordered_copyable_test(map2, value, map_value, hash, equal_to); - unordered_map_functions(map2, value, value); + boost::unordered_map, + test::minimal::equal_to, + test::minimal::allocator > + map2; - std::cout<<"Test unordered_multimap.\n"; + test::minimal::default_assignable default_assignable; - boost::unordered_multimap multimap; + unordered_map_functions(map2, assignable, default_assignable); - boost::unordered_multimap, std::equal_to, - test::minimal::cxx11_allocator > - > multimap2; + BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Test unordered_multimap.\n"; - unordered_equivalent_test(multimap, map_value); - unordered_map_test(multimap, value, value); - unordered_copyable_test(multimap, value, map_value, hash, equal_to); + boost::unordered_multimap, + test::minimal::equal_to, + test::minimal::allocator > + multimap; - unordered_equivalent_test(multimap2, map_value); - unordered_map_test(multimap2, value, value); - unordered_copyable_test(multimap2, value, map_value, hash, equal_to); + unordered_equivalent_test(multimap, map_value); + unordered_map_test(multimap, assignable, assignable); + unordered_copyable_test(multimap, assignable, map_value, hash, equal_to); + unordered_map_member_test(multimap, map_value); } -UNORDERED_AUTO_TEST(test2) +// Test for ambiguity when using key convertible from iterator +// See LWG2059 + +struct lwg2059_key +{ + int value; + + template lwg2059_key(T v) : value(v) {} +}; + +std::size_t hash_value(lwg2059_key x) { - test::minimal::constructor_param x; - - test::minimal::assignable assignable(x); - test::minimal::copy_constructible copy_constructible(x); - test::minimal::hash hash(x); - test::minimal::equal_to equal_to(x); - - typedef std::pair map_value_type; - map_value_type map_value(assignable, assignable); - - std::cout<<"Test unordered_map.\n"; - - boost::unordered_map< - test::minimal::assignable, - test::minimal::assignable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > map; - - unordered_unique_test(map, map_value); - unordered_map_test(map, assignable, assignable); - unordered_copyable_test(map, assignable, map_value, hash, equal_to); - unordered_map_member_test(map, map_value); - - boost::unordered_map< - test::minimal::assignable, - test::minimal::default_assignable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > map2; - - test::minimal::default_assignable default_assignable; - - unordered_map_functions(map2, assignable, default_assignable); - - std::cout<<"Test unordered_multimap.\n"; - - boost::unordered_multimap< - test::minimal::assignable, - test::minimal::assignable, - test::minimal::hash, - test::minimal::equal_to, - test::minimal::allocator > multimap; - - unordered_equivalent_test(multimap, map_value); - unordered_map_test(multimap, assignable, assignable); - unordered_copyable_test(multimap, assignable, map_value, hash, equal_to); - unordered_map_member_test(multimap, map_value); + return static_cast(x.value); +} + +bool operator==(lwg2059_key x, lwg2059_key y) { return x.value == y.value; } + +UNORDERED_AUTO_TEST (lwg2059) { + { + boost::unordered_map x; + x.emplace(lwg2059_key(10), 5); + x.erase(x.begin()); + } + + { + boost::unordered_multimap x; + x.emplace(lwg2059_key(10), 5); + x.erase(x.begin()); + } } RUN_TESTS()