]> git.seodisparate.com - EntityComponentMetaSystem/commitdiff
Add a test to unit tests
authorStephen Seo <seo.disparate@gmail.com>
Tue, 29 Aug 2017 06:27:58 +0000 (15:27 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Tue, 29 Aug 2017 06:27:58 +0000 (15:27 +0900)
src/test/ECTest.cpp

index d8e6caa2038b9fa0b3637a754ff3012ca3558024..e0c4c890e7ba27ad8f4228cf254312dc2fc5183f 100644 (file)
@@ -391,3 +391,41 @@ TEST(EC, FunctionStorage)
     }
 }
 
+/*
+    This test demonstrates that while entity ids may change after cleanup,
+    pointers to their components do not.
+*/
+TEST(EC, DataPointers)
+{
+    EC::Manager<ListComponentsAll, ListTagsAll> manager;
+
+    auto first = manager.addEntity();
+    auto second = manager.addEntity();
+
+    manager.addComponent<C0>(first, 5, 5);
+    manager.addComponent<C0>(second, 10, 10);
+    manager.addTag<T0>(second);
+
+    auto* cptr = &manager.getEntityData<C0>(second);
+
+    EXPECT_EQ(10, cptr->x);
+    EXPECT_EQ(10, cptr->y);
+
+    manager.deleteEntity(first);
+    manager.cleanup();
+
+    auto newSecond = second;
+    manager.forMatchingSignature<EC::Meta::TypeList<T0>>(
+            [&newSecond] (auto eid) {
+        newSecond = eid;
+    });
+
+    EXPECT_NE(newSecond, second);
+
+    auto* newcptr = &manager.getEntityData<C0>(newSecond);
+    EXPECT_EQ(newcptr, cptr);
+
+    EXPECT_EQ(10, newcptr->x);
+    EXPECT_EQ(10, newcptr->y);
+}
+