From bea9eeac16381c0e75482a3ed78afa7fdeb31c72 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Thu, 19 Oct 2017 15:48:29 +0200 Subject: [PATCH] fixed: registry.destroy makes available the wrong entity identifier --- src/entt/entity/registry.hpp | 5 +++-- test/entt/entity/benchmark.cpp | 20 -------------------- test/entt/entity/registry.cpp | 13 +++++++++++++ 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index 3ebc9fe43..a7c8c0df7 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -285,8 +285,9 @@ public: const auto entt = entity & traits_type::entity_mask; const auto version = 1 + ((entity >> traits_type::version_shift) & traits_type::version_mask); - entities[entt] = entt | (version << traits_type::version_shift); - available.push_back(entity); + const auto next = entt | (version << traits_type::version_shift); + entities[entt] = next; + available.push_back(next); for(auto &&cpool: pools) { if(cpool && cpool->has(entity)) { diff --git a/test/entt/entity/benchmark.cpp b/test/entt/entity/benchmark.cpp index 83c46faa4..56ab59ff7 100644 --- a/test/entt/entity/benchmark.cpp +++ b/test/entt/entity/benchmark.cpp @@ -42,7 +42,6 @@ TEST(DefaultRegistry, Construct) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, Destroy) { @@ -86,7 +85,6 @@ TEST(DefaultRegistry, IterateCreateDeleteSingleComponent) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateSingleComponent10M) { @@ -108,7 +106,6 @@ TEST(DefaultRegistry, IterateSingleComponent10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponents10M) { @@ -132,7 +129,6 @@ TEST(DefaultRegistry, IterateTwoComponents10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponents10MHalf) { @@ -157,7 +153,6 @@ TEST(DefaultRegistry, IterateTwoComponents10MHalf) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponents10MOne) { @@ -182,7 +177,6 @@ TEST(DefaultRegistry, IterateTwoComponents10MOne) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponentsPersistent10M) { @@ -207,7 +201,6 @@ TEST(DefaultRegistry, IterateTwoComponentsPersistent10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponentsPersistent10MHalf) { @@ -233,7 +226,6 @@ TEST(DefaultRegistry, IterateTwoComponentsPersistent10MHalf) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponentsPersistent10MOne) { @@ -259,7 +251,6 @@ TEST(DefaultRegistry, IterateTwoComponentsPersistent10MOne) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateSingleComponent50M) { @@ -281,7 +272,6 @@ TEST(DefaultRegistry, IterateSingleComponent50M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponents50M) { @@ -305,7 +295,6 @@ TEST(DefaultRegistry, IterateTwoComponents50M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTwoComponentsPersistent50M) { @@ -330,7 +319,6 @@ TEST(DefaultRegistry, IterateTwoComponentsPersistent50M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateFiveComponents10M) { @@ -360,7 +348,6 @@ TEST(DefaultRegistry, IterateFiveComponents10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponents10M) { @@ -400,7 +387,6 @@ TEST(DefaultRegistry, IterateTenComponents10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponents10MHalf) { @@ -441,7 +427,6 @@ TEST(DefaultRegistry, IterateTenComponents10MHalf) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponents10MOne) { @@ -482,7 +467,6 @@ TEST(DefaultRegistry, IterateTenComponents10MOne) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateFiveComponentsPersistent10M) { @@ -513,7 +497,6 @@ TEST(DefaultRegistry, IterateFiveComponentsPersistent10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponentsPersistent10M) { @@ -554,7 +537,6 @@ TEST(DefaultRegistry, IterateTenComponentsPersistent10M) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponentsPersistent10MHalf) { @@ -596,7 +578,6 @@ TEST(DefaultRegistry, IterateTenComponentsPersistent10MHalf) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, IterateTenComponentsPersistent10MOne) { @@ -638,7 +619,6 @@ TEST(DefaultRegistry, IterateTenComponentsPersistent10MOne) { } timer.elapsed(); - registry.reset(); } TEST(DefaultRegistry, SortSingle) { diff --git a/test/entt/entity/registry.cpp b/test/entt/entity/registry.cpp index 41958388b..8f16977ef 100644 --- a/test/entt/entity/registry.cpp +++ b/test/entt/entity/registry.cpp @@ -121,6 +121,19 @@ TEST(DefaultRegistry, Functionalities) { ASSERT_TRUE(registry.empty()); } +TEST(DefaultRegistry, CreateDestroyEntities) { + entt::DefaultRegistry registry; + + auto pre = registry.create(); + registry.destroy(pre); + auto post = registry.create(); + + ASSERT_FALSE(registry.valid(pre)); + ASSERT_TRUE(registry.valid(post)); + ASSERT_NE(registry.version(pre), registry.version(post)); + ASSERT_EQ(registry.current(pre), registry.current(post)); +} + TEST(DefaultRegistry, SortSingle) { entt::DefaultRegistry registry;