From 260418e4eeaf901b5741207f947422de032604b4 Mon Sep 17 00:00:00 2001 From: Braden Ganetsky Date: Mon, 15 Jan 2024 22:00:52 -0600 Subject: [PATCH] Fix cfoa tests --- test/cfoa/emplace_tests.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/test/cfoa/emplace_tests.cpp b/test/cfoa/emplace_tests.cpp index 23105cb7..cdb60103 100644 --- a/test/cfoa/emplace_tests.cpp +++ b/test/cfoa/emplace_tests.cpp @@ -52,7 +52,7 @@ namespace { struct lvalue_emplacer_type { - template void operator()(std::vector& values, X& x) + template void call_impl(std::vector& values, X& x) { static constexpr auto value_type_cardinality = value_cardinality::value; @@ -67,28 +67,33 @@ namespace { } }); BOOST_TEST_EQ(num_inserts, x.size()); - BOOST_TEST_EQ( - raii::default_constructor, value_type_cardinality * values.size()); - BOOST_TEST_EQ(raii::copy_constructor, 0u); - BOOST_TEST_GE(raii::move_constructor, value_type_cardinality * x.size()); + std::uint64_t const default_constructors = value_type_cardinality == 2 + ? values.size() + num_inserts + : values.size(); + BOOST_TEST_EQ(raii::default_constructor, default_constructors); BOOST_TEST_EQ(raii::copy_constructor, 0u); BOOST_TEST_EQ(raii::copy_assignment, 0u); BOOST_TEST_EQ(raii::move_assignment, 0u); } + template void operator()(std::vector& values, X& x) + { + static constexpr auto value_type_cardinality = + value_cardinality::value; + + call_impl(values, x); + BOOST_TEST_GE(raii::move_constructor, value_type_cardinality * x.size()); + } } lvalue_emplacer; struct norehash_lvalue_emplacer_type : public lvalue_emplacer_type { template void operator()(std::vector& values, X& x) { - static constexpr auto value_type_cardinality = - value_cardinality::value; - x.reserve(values.size()); - lvalue_emplacer_type::operator()(values, x); - BOOST_TEST_EQ(raii::move_constructor, value_type_cardinality * x.size()); + lvalue_emplacer_type::call_impl(values, x); + BOOST_TEST_EQ(raii::move_constructor, x.size()); } } norehash_lvalue_emplacer;