From 146c5cb6be71d8d4014edd9f280c8b02db6a459e Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Mon, 22 May 2023 14:19:21 -0700 Subject: [PATCH] Clean up exception tests --- test/cfoa/exception_helpers.hpp | 8 +- test/cfoa/exception_insert_tests.cpp | 175 +++------------------------ 2 files changed, 18 insertions(+), 165 deletions(-) diff --git a/test/cfoa/exception_helpers.hpp b/test/cfoa/exception_helpers.hpp index 0645ff21..554c3f2b 100644 --- a/test/cfoa/exception_helpers.hpp +++ b/test/cfoa/exception_helpers.hpp @@ -46,7 +46,7 @@ struct stateful_hash void throw_helper() const { auto n = ++c; - if (should_throw && (n % throw_threshold == 0)) { + if (should_throw && ((n + 1) % throw_threshold == 0)) { throw exception_tag{}; } } @@ -96,7 +96,7 @@ struct stateful_key_equal void throw_helper() const { auto n = ++c; - if (should_throw && (n % throw_threshold == 0)) { + if (should_throw && ((n + 1) % throw_threshold == 0)) { throw exception_tag{}; } } @@ -144,7 +144,7 @@ template struct stateful_allocator void throw_helper() const { auto n = ++c; - if (should_throw && (n % 10 == 0)) { + if (should_throw && ((n + 1) % 10 == 0)) { throw exception_tag{}; } } @@ -190,7 +190,7 @@ struct raii void throw_helper() const { auto n = ++c; - if (should_throw && (n % throw_threshold == 0)) { + if (should_throw && ((n + 1) % throw_threshold == 0)) { throw exception_tag{}; } } diff --git a/test/cfoa/exception_insert_tests.cpp b/test/cfoa/exception_insert_tests.cpp index 533243bf..92c708a7 100644 --- a/test/cfoa/exception_insert_tests.cpp +++ b/test/cfoa/exception_insert_tests.cpp @@ -213,17 +213,13 @@ namespace { template void operator()(std::vector& values, X& x) { std::atomic num_inserts{0}; - std::atomic num_invokes{0}; enable_exceptions(); - thread_runner(values, [&x, &num_inserts, &num_invokes](boost::span s) { + thread_runner(values, [&x, &num_inserts](boost::span s) { for (auto& r : s) { try { bool b = x.insert_or_cvisit( - r, [&num_invokes](typename X::value_type const& v) { - (void)v; - ++num_invokes; - }); + r, [](typename X::value_type const& v) { (void)v; }); if (b) { ++num_inserts; @@ -247,17 +243,13 @@ namespace { template void operator()(std::vector& values, X& x) { std::atomic num_inserts{0}; - std::atomic num_invokes{0}; enable_exceptions(); - thread_runner(values, [&x, &num_inserts, &num_invokes](boost::span s) { + thread_runner(values, [&x, &num_inserts](boost::span s) { for (auto& r : s) { try { bool b = - x.insert_or_visit(r, [&num_invokes](typename X::value_type& v) { - (void)v; - ++num_invokes; - }); + x.insert_or_visit(r, [](typename X::value_type& v) { (void)v; }); if (b) { ++num_inserts; @@ -283,17 +275,13 @@ namespace { template void operator()(std::vector& values, X& x) { std::atomic num_inserts{0}; - std::atomic num_invokes{0}; enable_exceptions(); - thread_runner(values, [&x, &num_inserts, &num_invokes](boost::span s) { + thread_runner(values, [&x, &num_inserts](boost::span s) { for (auto& r : s) { try { bool b = x.insert_or_cvisit( - std::move(r), [&num_invokes](typename X::value_type const& v) { - (void)v; - ++num_invokes; - }); + std::move(r), [](typename X::value_type const& v) { (void)v; }); if (b) { ++num_inserts; @@ -315,17 +303,13 @@ namespace { template void operator()(std::vector& values, X& x) { std::atomic num_inserts{0}; - std::atomic num_invokes{0}; enable_exceptions(); - thread_runner(values, [&x, &num_inserts, &num_invokes](boost::span s) { + thread_runner(values, [&x, &num_inserts](boost::span s) { for (auto& r : s) { try { bool b = x.insert_or_visit( - std::move(r), [&num_invokes](typename X::value_type& v) { - (void)v; - ++num_invokes; - }); + std::move(r), [](typename X::value_type& v) { (void)v; }); if (b) { ++num_inserts; @@ -349,23 +333,17 @@ namespace { { template void operator()(std::vector& values, X& x) { - std::atomic num_invokes{0}; - enable_exceptions(); - thread_runner(values, [&x, &num_invokes](boost::span s) { + thread_runner(values, [&x](boost::span s) { try { x.insert_or_cvisit(s.begin(), s.end(), - [&num_invokes](typename X::value_type const& v) { - (void)v; - ++num_invokes; - }); + [](typename X::value_type const& v) { (void)v; }); } catch (...) { } }); disable_exceptions(); BOOST_TEST_EQ(raii::default_constructor, 0u); - BOOST_TEST_GT(raii::move_constructor, 0u); } } iterator_range_insert_or_cvisit; @@ -373,23 +351,17 @@ namespace { { template void operator()(std::vector& values, X& x) { - std::atomic num_invokes{0}; - enable_exceptions(); - thread_runner(values, [&x, &num_invokes](boost::span s) { + thread_runner(values, [&x](boost::span s) { try { x.insert_or_visit(s.begin(), s.end(), - [&num_invokes](typename X::value_type const& v) { - (void)v; - ++num_invokes; - }); + [](typename X::value_type const& v) { (void)v; }); } catch (...) { } }); disable_exceptions(); BOOST_TEST_EQ(raii::default_constructor, 0u); - BOOST_TEST_GT(raii::move_constructor, 0u); } } iterator_range_insert_or_visit; @@ -401,8 +373,8 @@ namespace { auto values = make_random_values(1024 * 16, [&] { return gen(rg); }); auto reference_map = boost::unordered_flat_map(values.begin(), values.end()); - raii::reset_counts(); + raii::reset_counts(); { X x; @@ -410,122 +382,7 @@ namespace { test_fuzzy_matches_reference(x, reference_map, rg); } - - BOOST_TEST_GE(raii::default_constructor, 0u); - BOOST_TEST_GE(raii::copy_constructor, 0u); - BOOST_TEST_GE(raii::move_constructor, 0u); - BOOST_TEST_GT(raii::destructor, 0u); - - BOOST_TEST_EQ(raii::default_constructor + raii::copy_constructor + - raii::move_constructor, - raii::destructor); - } - - template void insert_initializer_list(X*) - { - using value_type = typename X::value_type; - - std::initializer_list values{ - value_type{raii{0}, raii{0}}, - value_type{raii{1}, raii{1}}, - value_type{raii{2}, raii{2}}, - value_type{raii{3}, raii{3}}, - value_type{raii{4}, raii{4}}, - value_type{raii{5}, raii{5}}, - value_type{raii{6}, raii{6}}, - value_type{raii{6}, raii{6}}, - value_type{raii{7}, raii{7}}, - value_type{raii{8}, raii{8}}, - value_type{raii{9}, raii{9}}, - value_type{raii{10}, raii{10}}, - value_type{raii{9}, raii{9}}, - value_type{raii{8}, raii{8}}, - value_type{raii{7}, raii{7}}, - value_type{raii{6}, raii{6}}, - value_type{raii{5}, raii{5}}, - value_type{raii{4}, raii{4}}, - value_type{raii{3}, raii{3}}, - value_type{raii{2}, raii{2}}, - value_type{raii{1}, raii{1}}, - value_type{raii{0}, raii{0}}, - }; - - std::vector dummy; - - auto reference_map = - boost::unordered_flat_map(values.begin(), values.end()); - raii::reset_counts(); - - { - { - X x; - - thread_runner( - dummy, [&x, &values](boost::span) { x.insert(values); }); - - BOOST_TEST_EQ(x.size(), reference_map.size()); - - BOOST_TEST_EQ(x.size(), x.visit_all([&](value_type const& kv) { - BOOST_TEST(reference_map.contains(kv.first)); - BOOST_TEST_EQ(kv.second, reference_map[kv.first]); - })); - } - - BOOST_TEST_GE(raii::default_constructor, 0u); - BOOST_TEST_GE(raii::copy_constructor, 0u); - BOOST_TEST_GE(raii::move_constructor, 0u); - BOOST_TEST_GT(raii::destructor, 0u); - - BOOST_TEST_EQ(raii::default_constructor + raii::copy_constructor + - raii::move_constructor, - raii::destructor); - - BOOST_TEST_EQ(raii::copy_assignment, 0u); - BOOST_TEST_EQ(raii::move_assignment, 0u); - } - - { - { - std::atomic num_invokes{0}; - - X x; - - thread_runner(dummy, [&x, &values, &num_invokes](boost::span) { - x.insert_or_visit(values, [&num_invokes](typename X::value_type& v) { - (void)v; - ++num_invokes; - }); - - x.insert_or_cvisit( - values, [&num_invokes](typename X::value_type const& v) { - (void)v; - ++num_invokes; - }); - }); - - BOOST_TEST_EQ(num_invokes, (values.size() - x.size()) + - (num_threads - 1) * values.size() + - num_threads * values.size()); - BOOST_TEST_EQ(x.size(), reference_map.size()); - - BOOST_TEST_EQ(x.size(), x.visit_all([&](value_type const& kv) { - BOOST_TEST(reference_map.contains(kv.first)); - BOOST_TEST_EQ(kv.second, reference_map[kv.first]); - })); - } - - BOOST_TEST_GE(raii::default_constructor, 0u); - BOOST_TEST_GE(raii::copy_constructor, 0u); - BOOST_TEST_GE(raii::move_constructor, 0u); - BOOST_TEST_GT(raii::destructor, 0u); - - BOOST_TEST_EQ(raii::default_constructor + raii::copy_constructor + - raii::move_constructor, - raii::destructor); - - BOOST_TEST_EQ(raii::copy_assignment, 0u); - BOOST_TEST_EQ(raii::move_assignment, 0u); - } + check_raii_counts(); } boost::unordered::concurrent_flat_map