From 7d8461bae414d24736c594200559687c5783b023 Mon Sep 17 00:00:00 2001 From: Michele Caini <michele.caini@gmail.com> Date: Wed, 3 Jul 2024 19:15:22 +0200 Subject: [PATCH] test: non-regression test for storage iterator page size deduction --- test/entt/entity/storage.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/test/entt/entity/storage.cpp b/test/entt/entity/storage.cpp index b93a7c163..d57c6689c 100644 --- a/test/entt/entity/storage.cpp +++ b/test/entt/entity/storage.cpp @@ -67,6 +67,12 @@ struct entt::component_traits<std::unordered_set<char>> { static constexpr auto page_size = 4u; }; +template<> +struct entt::component_traits<int> { + static constexpr auto in_place_delete = false; + static constexpr auto page_size = 128u; +}; + template<typename Type> struct Storage: testing::Test { static_assert(entt::component_traits<Type>::page_size != 0u, "Empty type not allowed"); @@ -533,16 +539,17 @@ TYPED_TEST(Storage, IteratorPageSizeAwareness) { using traits_type = entt::component_traits<value_type>; entt::storage<value_type> pool; - const value_type check{2}; + static_assert(!std::is_same_v<value_type, int> || (traits_type::page_size != entt::component_traits<value_type *>::page_size), "Different page size required"); for(unsigned int next{}; next < traits_type::page_size; ++next) { pool.emplace(entt::entity{next}); } - pool.emplace(entt::entity{traits_type::page_size}, check); + pool.emplace(entt::entity{traits_type::page_size}); // test the proper use of component traits by the storage iterator - ASSERT_EQ(*pool.begin(), check); + ASSERT_EQ(&pool.begin()[0], pool.raw()[1u]); + ASSERT_EQ(&pool.begin()[traits_type::page_size], pool.raw()[0u]); } TYPED_TEST(Storage, Getters) {