#include "SHpch.h" #include "SHECSUnitTest.h" #include "../Managers/SHComponentManager.h" #include "../Managers/SHEntityManager.h" #include "../Managers/SHSystemManager.h" #include "SHTestComponents.h" #include "SHTestSystems.h" #include "Tools/SHLogger.h" namespace SHADE { void SHECSUnitTest::TestAll(void) noexcept { TestBasicEntityCreate(); TestEntityCreateTemplate(); TestEntityDestroy(); TestSystemRoutine(); } void SHECSUnitTest::TestBasicEntityCreate(void) noexcept { SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHLOG_INFO("Test for add and remove component") EntityID id1 = SHEntityManager::CreateEntity(); EntityID id2 = SHEntityManager::CreateEntity(); EntityID id3 = SHEntityManager::CreateEntity(); SHComponentManager::AddComponent(id1); } void SHECSUnitTest::TestEntityCreateTemplate(void) noexcept { std::cout << "\nTest2" << std::endl; //Test entity Creation. SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); for (size_t i = 0; i < 10000; ++i) { switch (i % 3) { case 0: { SHEntityManager::CreateEntity(); }break; case 1: { SHEntityManager::CreateEntity(); }break; case 2: { SHEntityManager::CreateEntity(); }break; default: break; } } auto& denseA = SHComponentManager::GetDense(); auto& denseB = SHComponentManager::GetDense(); auto& denseC = SHComponentManager::GetDense(); std::cout << "Test Entity Creation" << std::endl; std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 10000) ? " Success" : " Failure") << std::endl; std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3334) ? " Success" : " Failure") << std::endl; std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3333) ? " Success" : " Failure") << std::endl; std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 10000 ? " Success" : " Failure") << std::endl; SHEntityManager::DestroyAllEntity(); std::cout << std::endl << "Test Destroy All Entity" << std::endl; std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 0 ? " Success" : " Failure") << std::endl; } void SHECSUnitTest::TestEntityDestroy(void) noexcept { std::cout << "\nTest3" << std::endl; SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); SHComponentManager::CreateComponentSparseSet(); for (size_t i = 0; i < 10000; ++i) { switch (i % 3) { case 0: { SHEntityManager::CreateEntity(); }break; case 1: { SHEntityManager::CreateEntity(); }break; case 2: { SHEntityManager::CreateEntity(); }break; default: break; } } SHEntityManager::DestroyEntity(5000); SHEntityManager::DestroyEntity(5001); auto& denseA = SHComponentManager::GetDense(); auto& denseB = SHComponentManager::GetDense(); auto& denseC = SHComponentManager::GetDense(); std::cout << "Test Entity Deletion" << std::endl; std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 9998) ? " Success" : " Failure") << std::endl; std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3333) ? " Success" : " Failure") << std::endl; std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3333) ? " Success" : " Failure") << std::endl; std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 9998 ? " Success" : " Failure") << std::endl; std::cout << std::endl << "Test Entity Recreation" << std::endl; EntityID id = SHEntityManager::CreateEntity(); std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 9998) ? " Success" : " Failure") << std::endl; std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 3333) ? " Success" : " Failure") << std::endl; std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 3334) ? " Success" : " Failure") << std::endl; std::cout << "Entity ID: " << id << " EntityIndex: " << EntityHandleGenerator::GetIndex(id) << (EntityHandleGenerator::GetIndex(id) == 5001 ? " Success" : " Failure") << std::endl; std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 9999 ? " Success" : " Failure") << std::endl; SHEntityManager::DestroyAllEntity(); std::cout << std::endl << "Check Destroy All Entity" << std::endl; std::cout << "dense A size: " << denseA.size() << ((denseA.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "dense B size: " << denseB.size() << ((denseB.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "dense C size: " << denseC.size() << ((denseC.size() == 0) ? " Success" : " Failure") << std::endl; std::cout << "Number of entities: " << SHEntityManager::GetEntityCount() << (SHEntityManager::GetEntityCount() == 0 ? " Success" : " Failure") << std::endl; } void SHECSUnitTest::TestSystemRoutine(void) noexcept { SHSystemManager::CreateSystem(); SHSystemManager::CreateSystem(); SHSystemManager::RegisterRoutine(1); SHSystemManager::RunRoutines(false, 1.0 / 120.0); SHSystemManager::Exit(); } }