#include #include #include "Core.h" #include #include using namespace dECS; struct TestComponent { static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::CHOICE_BUILD; int value; }; // Test that entity IDs increment correctly TEST(ECSTest, IncrementEntityIdsSingleThread) { auto w = World{}; auto ea = w.MakeEntity(); ASSERT_EQ(ea.Id(), 1); auto eb = w.MakeEntity(); ASSERT_EQ(eb.Id(), 2); auto ec = w.MakeEntity(); ASSERT_EQ(ec.Id(), 3); } // Test adding and getting components TEST(ECSTest, MakeOneEntityAndAddComponents) { auto w = World{}; auto e = w.MakeEntity(); ASSERT_EQ(e.Id(), 1); // add component auto* const testCompPtr = e.AddComponent(); ASSERT_NE(testCompPtr, nullptr); ASSERT_EQ(testCompPtr->ComponentType, eReplicaComponentType::CHOICE_BUILD); ASSERT_EQ(testCompPtr->value, 0); testCompPtr->value = 15; // try getting the same component we just added auto* const getTestCompPtr = e.GetComponent(); ASSERT_NE(getTestCompPtr, nullptr); ASSERT_EQ(testCompPtr, getTestCompPtr); ASSERT_NE(getTestCompPtr->value, 0); ASSERT_EQ(getTestCompPtr->value, 15); } // Test world scoping TEST(ECSTest, WorldScope) { auto e = std::optional{}; { auto w = World{}; e.emplace(w.MakeEntity()); ASSERT_EQ(e->Id(), 1); // add component within scope auto* const cPtr = e->AddComponent(); ASSERT_NE(cPtr, nullptr); } // Attempting to access this component now that the world has gone // out of scope should return nullptr ASSERT_EQ(e->GetComponent(), nullptr); }