test: use shared pointer stable type

This commit is contained in:
Michele Caini
2023-10-31 09:10:01 +01:00
parent 2defe1c2c4
commit c042e3d985

View File

@@ -11,6 +11,7 @@
#include <entt/entity/entity.hpp>
#include <entt/entity/registry.hpp>
#include "../common/config.h"
#include "../common/pointer_stable.h"
struct empty_type {};
@@ -22,11 +23,6 @@ bool operator==(const no_eto_type &lhs, const no_eto_type &rhs) {
return &lhs == &rhs;
}
struct pointer_stable {
static constexpr auto in_place_delete = true;
int value{};
};
struct non_default_constructible {
non_default_constructible(int v)
: value{v} {}
@@ -748,17 +744,17 @@ TEST(Registry, DestroyRange) {
TEST(Registry, StableDestroy) {
entt::registry registry;
const auto iview = registry.view<int>();
const auto icview = registry.view<int, pointer_stable>();
const auto icview = registry.view<int, test::pointer_stable>();
entt::entity entity[3u];
registry.create(std::begin(entity), std::end(entity));
registry.emplace<int>(entity[0u]);
registry.emplace<pointer_stable>(entity[0u]);
registry.emplace<test::pointer_stable>(entity[0u]);
registry.emplace<double>(entity[0u]);
registry.emplace<int>(entity[1u]);
registry.emplace<pointer_stable>(entity[1u]);
registry.emplace<test::pointer_stable>(entity[1u]);
registry.emplace<int>(entity[2u]);
@@ -773,7 +769,7 @@ TEST(Registry, StableDestroy) {
ASSERT_TRUE(registry.valid(entity[2u]));
ASSERT_EQ(registry.storage<int>().size(), 1u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 0u);
registry.destroy(iview.begin(), iview.end());
@@ -783,7 +779,7 @@ TEST(Registry, StableDestroy) {
ASSERT_EQ(icview.size_hint(), 0u);
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 0u);
}
@@ -1577,17 +1573,17 @@ ENTT_DEBUG_TEST(RegistryDeathTest, Erase) {
TEST(Registry, StableErase) {
entt::registry registry;
const auto iview = registry.view<int>();
const auto icview = registry.view<int, pointer_stable>();
const auto icview = registry.view<int, test::pointer_stable>();
entt::entity entity[3u];
registry.create(std::begin(entity), std::end(entity));
registry.emplace<int>(entity[0u]);
registry.emplace<pointer_stable>(entity[0u]);
registry.emplace<test::pointer_stable>(entity[0u]);
registry.emplace<double>(entity[0u]);
registry.emplace<int>(entity[1u]);
registry.emplace<pointer_stable>(entity[1u]);
registry.emplace<test::pointer_stable>(entity[1u]);
registry.emplace<int>(entity[2u]);
@@ -1595,16 +1591,16 @@ TEST(Registry, StableErase) {
ASSERT_TRUE(registry.all_of<int>(entity[1u]));
ASSERT_TRUE(registry.any_of<int>(entity[2u]));
registry.erase<int, pointer_stable>(entity[0u]);
registry.erase<int, pointer_stable>(icview.begin(), icview.end());
registry.erase<int, pointer_stable>(icview.begin(), icview.end());
registry.erase<int, test::pointer_stable>(entity[0u]);
registry.erase<int, test::pointer_stable>(icview.begin(), icview.end());
registry.erase<int, test::pointer_stable>(icview.begin(), icview.end());
ASSERT_FALSE(registry.any_of<int>(entity[0u]));
ASSERT_FALSE(registry.all_of<int>(entity[1u]));
ASSERT_TRUE(registry.any_of<int>(entity[2u]));
ASSERT_EQ(registry.storage<int>().size(), 1u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 1u);
registry.erase<int>(iview.begin(), iview.end());
@@ -1612,7 +1608,7 @@ TEST(Registry, StableErase) {
ASSERT_FALSE(registry.any_of<int>(entity[2u]));
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 1u);
}
@@ -1727,17 +1723,17 @@ TEST(Registry, Remove) {
TEST(Registry, StableRemove) {
entt::registry registry;
const auto iview = registry.view<int>();
const auto icview = registry.view<int, pointer_stable>();
const auto icview = registry.view<int, test::pointer_stable>();
entt::entity entity[3u];
registry.create(std::begin(entity), std::end(entity));
registry.emplace<int>(entity[0u]);
registry.emplace<pointer_stable>(entity[0u]);
registry.emplace<test::pointer_stable>(entity[0u]);
registry.emplace<double>(entity[0u]);
registry.emplace<int>(entity[1u]);
registry.emplace<pointer_stable>(entity[1u]);
registry.emplace<test::pointer_stable>(entity[1u]);
registry.emplace<int>(entity[2u]);
@@ -1745,17 +1741,17 @@ TEST(Registry, StableRemove) {
ASSERT_TRUE(registry.all_of<int>(entity[1u]));
ASSERT_TRUE(registry.any_of<int>(entity[2u]));
registry.remove<int, pointer_stable>(entity[0u]);
registry.remove<int, test::pointer_stable>(entity[0u]);
ASSERT_EQ((registry.remove<int, pointer_stable>(icview.begin(), icview.end())), 2u);
ASSERT_EQ((registry.remove<int, pointer_stable>(icview.begin(), icview.end())), 0u);
ASSERT_EQ((registry.remove<int, test::pointer_stable>(icview.begin(), icview.end())), 2u);
ASSERT_EQ((registry.remove<int, test::pointer_stable>(icview.begin(), icview.end())), 0u);
ASSERT_FALSE(registry.any_of<int>(entity[0u]));
ASSERT_FALSE(registry.all_of<int>(entity[1u]));
ASSERT_TRUE(registry.any_of<int>(entity[2u]));
ASSERT_EQ(registry.storage<int>().size(), 1u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 1u);
ASSERT_EQ((registry.remove<int>(iview.begin(), iview.end())), 1u);
@@ -1766,7 +1762,7 @@ TEST(Registry, StableRemove) {
ASSERT_FALSE(registry.any_of<int>(entity[2u]));
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<double>().size(), 1u);
}
@@ -1777,28 +1773,28 @@ TEST(Registry, Compact) {
registry.create(std::begin(entity), std::end(entity));
registry.emplace<int>(entity[0u]);
registry.emplace<pointer_stable>(entity[0u]);
registry.emplace<test::pointer_stable>(entity[0u]);
registry.emplace<int>(entity[1u]);
registry.emplace<pointer_stable>(entity[1u]);
registry.emplace<test::pointer_stable>(entity[1u]);
ASSERT_EQ(registry.storage<int>().size(), 2u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
registry.destroy(std::begin(entity), std::end(entity));
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
registry.compact<int>();
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 2u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 2u);
registry.compact();
ASSERT_EQ(registry.storage<int>().size(), 0u);
ASSERT_EQ(registry.storage<pointer_stable>().size(), 0u);
ASSERT_EQ(registry.storage<test::pointer_stable>().size(), 0u);
}
TEST(Registry, NonOwningGroupInterleaved) {