Add noexcept tests

This commit is contained in:
Christian Mazakas
2022-10-12 13:39:23 -07:00
parent 3f9bd00f01
commit 4399e8b360
2 changed files with 50 additions and 2 deletions

View File

@ -106,6 +106,7 @@ build_foa fwd_set_test ;
build_foa fwd_map_test ; build_foa fwd_map_test ;
build_foa compile_set ; build_foa compile_set ;
build_foa compile_map ; build_foa compile_map ;
build_foa noexcept_tests ;
build_foa constructor_tests ; build_foa constructor_tests ;
build_foa copy_tests ; build_foa copy_tests ;
build_foa move_tests ; build_foa move_tests ;

View File

@ -5,8 +5,14 @@
// clang-format off // clang-format off
#include "../helpers/prefix.hpp" #include "../helpers/prefix.hpp"
#ifdef BOOST_UNORDERED_FOA_TESTS
#include <boost/unordered_flat_set.hpp>
#include <boost/unordered_flat_map.hpp>
#include <boost/unordered/detail/implementation.hpp>
#else
#include <boost/unordered_set.hpp> #include <boost/unordered_set.hpp>
#include <boost/unordered_map.hpp> #include <boost/unordered_map.hpp>
#endif
#include "../helpers/postfix.hpp" #include "../helpers/postfix.hpp"
// clang-format on // clang-format on
@ -202,6 +208,12 @@ namespace noexcept_tests {
UNORDERED_AUTO_TEST (test_noexcept) { UNORDERED_AUTO_TEST (test_noexcept) {
if (have_is_nothrow_move) { if (have_is_nothrow_move) {
#ifdef BOOST_UNORDERED_FOA_TESTS
BOOST_TEST((boost::is_nothrow_move_constructible<
boost::unordered_flat_set<int> >::value));
BOOST_TEST((boost::is_nothrow_move_constructible<
boost::unordered_flat_map<int, int> >::value));
#else
BOOST_TEST((boost::is_nothrow_move_constructible< BOOST_TEST((boost::is_nothrow_move_constructible<
boost::unordered_set<int> >::value)); boost::unordered_set<int> >::value));
BOOST_TEST((boost::is_nothrow_move_constructible< BOOST_TEST((boost::is_nothrow_move_constructible<
@ -210,19 +222,35 @@ namespace noexcept_tests {
boost::unordered_map<int, int> >::value)); boost::unordered_map<int, int> >::value));
BOOST_TEST((boost::is_nothrow_move_constructible< BOOST_TEST((boost::is_nothrow_move_constructible<
boost::unordered_multimap<int, int> >::value)); boost::unordered_multimap<int, int> >::value));
#endif
} }
#ifdef BOOST_UNORDERED_FOA_TESTS
BOOST_TEST(
(!boost::is_nothrow_move_constructible<
boost::unordered_flat_set<int, hash_possible_exception> >::value));
BOOST_TEST(
(!boost::is_nothrow_move_constructible<boost::unordered_flat_set<int,
boost::hash<int>, equal_to_possible_exception> >::value));
#else
BOOST_TEST((!boost::is_nothrow_move_constructible< BOOST_TEST((!boost::is_nothrow_move_constructible<
boost::unordered_set<int, hash_possible_exception> >::value)); boost::unordered_set<int, hash_possible_exception> >::value));
BOOST_TEST( BOOST_TEST(
(!boost::is_nothrow_move_constructible<boost::unordered_multiset<int, (!boost::is_nothrow_move_constructible<boost::unordered_multiset<int,
boost::hash<int>, equal_to_possible_exception> >::value)); boost::hash<int>, equal_to_possible_exception> >::value));
#endif
} }
UNORDERED_AUTO_TEST (test_nothrow_move_when_noexcept) { UNORDERED_AUTO_TEST (test_nothrow_move_when_noexcept) {
#ifdef BOOST_UNORDERED_FOA_TESTS
typedef boost::unordered_flat_set<int, hash_nothrow_move_construct,
equal_to_nothrow_move_construct>
throwing_set;
#else
typedef boost::unordered_set<int, hash_nothrow_move_construct, typedef boost::unordered_set<int, hash_nothrow_move_construct,
equal_to_nothrow_move_construct> equal_to_nothrow_move_construct>
throwing_set; throwing_set;
#endif
if (have_is_nothrow_move) { if (have_is_nothrow_move) {
BOOST_TEST(boost::is_nothrow_move_constructible<throwing_set>::value); BOOST_TEST(boost::is_nothrow_move_constructible<throwing_set>::value);
@ -310,8 +338,14 @@ namespace noexcept_tests {
} }
UNORDERED_AUTO_TEST (test_nothrow_swap_when_noexcept) { UNORDERED_AUTO_TEST (test_nothrow_swap_when_noexcept) {
#if BOOST_UNORDERED_FOA_TESTS
typedef boost::unordered_flat_set<int, hash_nothrow_swap,
equal_to_nothrow_swap>
throwing_set;
#else
typedef boost::unordered_set<int, hash_nothrow_swap, equal_to_nothrow_swap> typedef boost::unordered_set<int, hash_nothrow_swap, equal_to_nothrow_swap>
throwing_set; throwing_set;
#endif
if (have_is_nothrow_swap) { if (have_is_nothrow_swap) {
BOOST_TEST(boost::is_nothrow_swappable<throwing_set>::value); BOOST_TEST(boost::is_nothrow_swappable<throwing_set>::value);
@ -410,6 +444,20 @@ UNORDERED_AUTO_TEST (prelim_allocator_checks) {
allocator2<int> >::type::value); allocator2<int> >::type::value);
} }
using test::default_generator;
#ifdef BOOST_UNORDERED_FOA_TESTS
boost::unordered_flat_set<int, noexcept_tests::hash_nothrow_move_assign,
noexcept_tests::equal_to_nothrow_move_assign, allocator1<int> >*
throwing_set_alloc1;
boost::unordered_flat_set<int, noexcept_tests::hash_nothrow_move_assign,
noexcept_tests::equal_to_nothrow_move_assign, allocator2<int> >*
throwing_set_alloc2;
UNORDERED_TEST(test_nothrow_move_assign_when_noexcept,
((throwing_set_alloc1)(throwing_set_alloc2))((default_generator)))
#else
boost::unordered_set<int, noexcept_tests::hash_nothrow_move_assign, boost::unordered_set<int, noexcept_tests::hash_nothrow_move_assign,
noexcept_tests::equal_to_nothrow_move_assign, allocator1<int> >* noexcept_tests::equal_to_nothrow_move_assign, allocator1<int> >*
throwing_set_alloc1; throwing_set_alloc1;
@ -418,9 +466,8 @@ boost::unordered_set<int, noexcept_tests::hash_nothrow_move_assign,
noexcept_tests::equal_to_nothrow_move_assign, allocator2<int> >* noexcept_tests::equal_to_nothrow_move_assign, allocator2<int> >*
throwing_set_alloc2; throwing_set_alloc2;
using test::default_generator;
UNORDERED_TEST(test_nothrow_move_assign_when_noexcept, UNORDERED_TEST(test_nothrow_move_assign_when_noexcept,
((throwing_set_alloc1)(throwing_set_alloc2))((default_generator))) ((throwing_set_alloc1)(throwing_set_alloc2))((default_generator)))
#endif
RUN_TESTS() RUN_TESTS()