module Tests; import Core.Components; import Core.Test; template class Core::Components; using IntComponent = Core::Components; template static void testEntityIterator(T c) { auto iter = c.entities(); auto pos = iter.begin(); auto end = iter.end(); if(Core::testTrue(pos != end)) { Core::test(1, (*pos).entity); Core::test(10, (*pos).component); Core::testTrue(pos != end); ++pos; } if(Core::testTrue(pos != end)) { Core::test(5, (*pos).entity); Core::test(20, (*pos).component); Core::testTrue(pos != end); ++pos; } if(Core::testTrue(pos != end)) { Core::test(10, (*pos).entity); Core::test(30, (*pos).component); Core::testTrue(pos != end); ++pos; } Core::testFalse(pos != end); } static void testAddForEach() { IntComponent c; int* i1 = nullptr; int* i2 = nullptr; int* i3 = nullptr; Core::testTrue(c.put(i1, 1, 10)); Core::testFalse(c.put(i1, 1, 20)); Core::testTrue(c.put(i2, 5, 20)); Core::testTrue(c.put(i3, 10, 30)); if(Core::testNotNull(i1) && Core::testNotNull(i2) && Core::testNotNull(i3)) { Core::test(10, *i1); Core::test(20, *i2); Core::test(30, *i3); } testEntityIterator(c); testEntityIterator(c); } template static void testComponentIterator(T c) { auto iter = c.begin(); auto end = c.end(); if(Core::testTrue(iter != end)) { Core::test(10, *(iter++)); } if(Core::testTrue(iter != end)) { Core::test(20, *(iter++)); } if(Core::testTrue(iter != end)) { Core::test(30, *(iter++)); } Core::testFalse(iter != c.end()); } static void testAddComponentForEach() { IntComponent c; int* i1 = nullptr; int* i2 = nullptr; int* i3 = nullptr; Core::testTrue(c.put(i1, 1, 10)); Core::testTrue(c.put(i2, 5, 20)); Core::testTrue(c.put(i3, 10, 30)); if(Core::testNotNull(i1) && Core::testNotNull(i2) && Core::testNotNull(i3)) { Core::test(10, *i1); Core::test(20, *i2); Core::test(30, *i3); } testComponentIterator(c); testComponentIterator(c); } static void testRemove() { IntComponent c; Core::testTrue(c.add(1, 10)); Core::testTrue(c.add(5, 20)); Core::testTrue(c.add(10, 30)); Core::testFalse(c.remove(20)); Core::testTrue(c.remove(5)); Core::testFalse(c.remove(30)); Core::testTrue(c.add(20, 40)); Core::testTrue(c.remove(20)); int* i1 = c.search(1); Core::testNull(c.search(5)); int* i3 = c.search(10); if(Core::testNotNull(i1) && Core::testNotNull(i3)) { Core::test(10, *i1); Core::test(30, *i3); } Core::testTrue(c.remove(10)); i1 = c.search(1); Core::testNull(c.search(5)); Core::testNull(c.search(10)); if(Core::testNotNull(i1)) { Core::test(10, *i1); } Core::testTrue(c.remove(1)); Core::testNull(c.search(1)); Core::testNull(c.search(5)); Core::testNull(c.search(10)); } static void testConstSearch() { IntComponent c; int* i = nullptr; Core::testTrue(c.put(i, 1, 10)); const IntComponent& cc = c; const int* component = cc.search(1); if(Core::testTrue(component != nullptr)) { Core::test(10, *component); } Core::testNull(cc.search(2)); } void testComponents() { testAddForEach(); testAddComponentForEach(); testRemove(); testConstSearch(); }