From cfd397e10ade7843b1dadc1cc59d9c0961240e2b Mon Sep 17 00:00:00 2001 From: Brychan Dempsey Date: Mon, 7 Jun 2021 15:54:02 +1200 Subject: [PATCH] Added some unit testing --- .../ECS.java | 3 + .../EntityManager.java | 4 +- .../AppTest.java | 145 +++++++++++++++++- 3 files changed, 147 insertions(+), 5 deletions(-) diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/ECS.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/ECS.java index 383d4e1..00937ea 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/ECS.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/ECS.java @@ -135,4 +135,7 @@ public class ECS { void setSystemSignature(Type system, BitSet signature){ systemManager.setSignature(system, signature); } + Integer getMaxEntities(){ + return entityManager.currentSize; + } } \ No newline at end of file diff --git a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/EntityManager.java b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/EntityManager.java index e2793b5..bc9edf6 100644 --- a/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/EntityManager.java +++ b/javaecs/src/main/java/nz/ac/massey/programming_project_159333_s1_2021/EntityManager.java @@ -81,7 +81,7 @@ class EntityManager{ } public boolean resize(int newSize, SystemManager systemManager, ComponentManager componentManager){ - if (newSize >= currentSize - unusedEntities.size()){ + if (newSize < currentSize - unusedEntities.size()){ System.err.println("Attempted to resize the maximum entity count to a number smaller than the current assigned entity count."); return false; } @@ -113,7 +113,7 @@ class EntityManager{ } for (int i = newSize; i < currentSize; i++) { // Remove out-of-bounds data - entityRegistrations.remove(i); + entityRegistrations.remove(newSize); } } else{ diff --git a/javaecs/src/test/java/nz/ac/massey/programming_project_159333_s1_2021/AppTest.java b/javaecs/src/test/java/nz/ac/massey/programming_project_159333_s1_2021/AppTest.java index 9f4bf87..a883222 100644 --- a/javaecs/src/test/java/nz/ac/massey/programming_project_159333_s1_2021/AppTest.java +++ b/javaecs/src/test/java/nz/ac/massey/programming_project_159333_s1_2021/AppTest.java @@ -3,16 +3,155 @@ package nz.ac.massey.programming_project_159333_s1_2021; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.util.BitSet; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; /** * Unit test for simple App. */ class AppTest { + + ECS gameEngine; + TestSystem system; + + class TestObject{ + int i = 1; + } + + class TestSystem extends ECSSystem{ + public void init(){} + public void update() { + for (Integer entity : entities) { + TestObject entityComponent = (TestObject)gameEngine.getComponentData(entity, TestObject.class); + entityComponent.i++; + } + } + } /** - * Rigorous Test. + * Test assigning an entity */ @Test - void testApp() { - assertEquals(1, 1); + void testAssignOne() { + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + assertEquals(1, ((TestObject)gameEngine.getComponentData(entity, TestObject.class)).i); + } + + /** + * Test assigning the maximum number of entities + */ + @Test + void testAssignMax(){ + for (int i = 0; i < gameEngine.getMaxEntities(); i++) { + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + assertEquals(1, ((TestObject)gameEngine.getComponentData(entity, TestObject.class)).i); + } + } + /** + * Test assigning more than the maximum number of entities + */ + @Test + void testAssignMoreThanMax(){ + for (int i = 0; i < gameEngine.getMaxEntities() + 5; i++) { + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + } + } + + /** + * Test removing data + */ + @Test + void testRemoveOne(){ + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + gameEngine.destroyEntity(entity); + assertNull(((TestObject)gameEngine.getComponentData(entity, TestObject.class))); + } + + /** + * Test running the system several times + */ + @Test + void testRunSystem(){ + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + + for (int i = 0; i < 5; i++) { + system.update(); + } + + assertEquals(6, ((TestObject)gameEngine.getComponentData(entity, TestObject.class)).i); + } + + + /** + * Test resizing (minimal, with only 1 entity) + */ + @Test + void testResizeMinimal(){ + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + + gameEngine.resizeMaximum(10); + + assertEquals(10, gameEngine.getMaxEntities()); + } + + /** + * Test large creations & deletions + */ + @Test + void testLargeCreateDelete(){ + for (int i = 0; i < gameEngine.getMaxEntities(); i++) { + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + assertEquals(1, ((TestObject)gameEngine.getComponentData(entity, TestObject.class)).i); + } + for (int i = 256; i < 512; i++) { + gameEngine.destroyEntity(i); + } + } + + /** + * Test large creations & deletions & smaller resize + */ + @Test + void testLargeCreateDeleteResize(){ + for (int i = 0; i < gameEngine.getMaxEntities(); i++) { + int entity = gameEngine.createEntity(); + gameEngine.addComponent(entity, TestObject.class, new TestObject()); + assertEquals(1, ((TestObject)gameEngine.getComponentData(entity, TestObject.class)).i); + } + for (int i = 256; i < 512; i++) { + gameEngine.destroyEntity(i); + } + + gameEngine.resizeMaximum(1024 - 255); + } + + + /** + * Establish a simple ECS, with a single system and component + */ + @BeforeEach + void testSetup(){ + gameEngine = new ECS(); + gameEngine.registerComponent(TestObject.class); + + system = new TestSystem(); + gameEngine.registerSystem(TestSystem.class, system); + { + BitSet signature = new BitSet(); + signature.set(gameEngine.getComponentIndex(TestObject.class)); + gameEngine.setSystemSignature(TestSystem.class, signature); + } + + system.init(); } }