181 lines
6.2 KiB
C++
181 lines
6.2 KiB
C++
|
#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<SHComponent_A>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_B>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_C>();
|
||
|
|
||
|
SHLOG_INFO("Test for add and remove component")
|
||
|
|
||
|
EntityID id1 = SHEntityManager::CreateEntity();
|
||
|
EntityID id2 = SHEntityManager::CreateEntity();
|
||
|
EntityID id3 = SHEntityManager::CreateEntity();
|
||
|
|
||
|
|
||
|
SHComponentManager::AddComponent<SHComponent_A>(id1);
|
||
|
}
|
||
|
|
||
|
|
||
|
void SHECSUnitTest::TestEntityCreateTemplate(void) noexcept
|
||
|
{
|
||
|
std::cout << "\nTest2" << std::endl;
|
||
|
//Test entity Creation.
|
||
|
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_A>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_B>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_C>();
|
||
|
|
||
|
|
||
|
|
||
|
for (size_t i = 0; i < 10000; ++i)
|
||
|
{
|
||
|
switch (i % 3)
|
||
|
{
|
||
|
case 0:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A, SHComponent_B>();
|
||
|
}break;
|
||
|
case 1:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A, SHComponent_C>();
|
||
|
}break;
|
||
|
|
||
|
case 2:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A>();
|
||
|
}break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
auto& denseA = SHComponentManager::GetDense<SHComponent_A>();
|
||
|
auto& denseB = SHComponentManager::GetDense<SHComponent_B>();
|
||
|
auto& denseC = SHComponentManager::GetDense<SHComponent_C>();
|
||
|
|
||
|
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<SHComponent_A>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_B>();
|
||
|
SHComponentManager::CreateComponentSparseSet<SHComponent_C>();
|
||
|
|
||
|
|
||
|
|
||
|
for (size_t i = 0; i < 10000; ++i)
|
||
|
{
|
||
|
switch (i % 3)
|
||
|
{
|
||
|
case 0:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A, SHComponent_B>();
|
||
|
}break;
|
||
|
case 1:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A, SHComponent_C>();
|
||
|
}break;
|
||
|
|
||
|
case 2:
|
||
|
{
|
||
|
SHEntityManager::CreateEntity<SHComponent_A>();
|
||
|
}break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
SHEntityManager::DestroyEntity(5000);
|
||
|
SHEntityManager::DestroyEntity(5001);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
auto& denseA = SHComponentManager::GetDense<SHComponent_A>();
|
||
|
auto& denseB = SHComponentManager::GetDense<SHComponent_B>();
|
||
|
auto& denseC = SHComponentManager::GetDense<SHComponent_C>();
|
||
|
|
||
|
|
||
|
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<SHComponent_C>();
|
||
|
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<SHTestSystem>();
|
||
|
SHSystemManager::CreateSystem<SHTestSystem>();
|
||
|
|
||
|
|
||
|
SHSystemManager::RegisterRoutine<SHTestSystem, SHTestSystem::SHTestRoutine>(1);
|
||
|
|
||
|
SHSystemManager::RunRoutines(false, 1.0 / 120.0);
|
||
|
|
||
|
SHSystemManager::Exit();
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|