Просмотр исходного кода

fixed: registry.destroy makes available the wrong entity identifier

Michele Caini 8 лет назад
Родитель
Сommit
bea9eeac16
3 измененных файлов с 16 добавлено и 22 удалено
  1. 3 2
      src/entt/entity/registry.hpp
  2. 0 20
      test/entt/entity/benchmark.cpp
  3. 13 0
      test/entt/entity/registry.cpp

+ 3 - 2
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)) {

+ 0 - 20
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) {

+ 13 - 0
test/entt/entity/registry.cpp

@@ -121,6 +121,19 @@ TEST(DefaultRegistry, Functionalities) {
     ASSERT_TRUE(registry.empty<int>());
 }
 
+TEST(DefaultRegistry, CreateDestroyEntities) {
+    entt::DefaultRegistry registry;
+
+    auto pre = registry.create<double>();
+    registry.destroy(pre);
+    auto post = registry.create<double>();
+
+    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;