#include #include TEST(ComponentPool, Functionalities) { using pool_type = entt::ComponentPool; pool_type pool{0}; ASSERT_TRUE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{0}); ASSERT_EQ(pool.capacity(), pool_type::size_type{0}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_EQ(pool.entities(), pool.entities() + pool.size()); ASSERT_EQ(pool.entities(), pool.entities() + pool.size()); ASSERT_FALSE(pool.has(0)); ASSERT_FALSE(pool.has(0)); } TEST(ComponentPool, ConstructDestroy) { using pool_type = entt::ComponentPool; pool_type pool{4}; ASSERT_EQ(pool.construct(0, 42), 42); ASSERT_FALSE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.size(), pool_type::size_type{1}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_TRUE(pool.has(0)); ASSERT_FALSE(pool.has(0)); ASSERT_FALSE(pool.has(1)); ASSERT_FALSE(pool.has(1)); ASSERT_EQ(pool.construct(1), 0); ASSERT_FALSE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.size(), pool_type::size_type{2}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_TRUE(pool.has(0)); ASSERT_FALSE(pool.has(0)); ASSERT_TRUE(pool.has(1)); ASSERT_FALSE(pool.has(1)); ASSERT_NE(pool.get(0), pool.get(1)); ASSERT_NE(&pool.get(0), &pool.get(1)); ASSERT_NO_THROW(pool.destroy(0)); ASSERT_FALSE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.size(), pool_type::size_type{1}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_FALSE(pool.has(0)); ASSERT_FALSE(pool.has(0)); ASSERT_TRUE(pool.has(1)); ASSERT_FALSE(pool.has(1)); ASSERT_NO_THROW(pool.destroy(1)); ASSERT_TRUE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_FALSE(pool.has(0)); ASSERT_FALSE(pool.has(0)); ASSERT_FALSE(pool.has(1)); ASSERT_FALSE(pool.has(1)); int *comp[] = { &pool.construct(0, 0), &pool.construct(1, 1), nullptr, &pool.construct(3, 3) }; ASSERT_FALSE(pool.empty()); ASSERT_TRUE(pool.empty()); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.capacity(), pool_type::size_type{4}); ASSERT_EQ(pool.size(), pool_type::size_type{3}); ASSERT_EQ(pool.size(), pool_type::size_type{0}); ASSERT_TRUE(pool.has(0)); ASSERT_FALSE(pool.has(0)); ASSERT_TRUE(pool.has(1)); ASSERT_FALSE(pool.has(1)); ASSERT_FALSE(pool.has(2)); ASSERT_FALSE(pool.has(2)); ASSERT_TRUE(pool.has(3)); ASSERT_FALSE(pool.has(3)); ASSERT_EQ(&pool.get(0), comp[0]); ASSERT_EQ(&pool.get(1), comp[1]); ASSERT_EQ(&pool.get(3), comp[3]); ASSERT_EQ(pool.get(0), 0); ASSERT_EQ(pool.get(1), 1); ASSERT_EQ(pool.get(3), 3); ASSERT_NO_THROW(pool.destroy(0)); ASSERT_NO_THROW(pool.destroy(1)); ASSERT_NO_THROW(pool.destroy(3)); } TEST(ComponentPool, HasGet) { using pool_type = entt::ComponentPool; pool_type pool; const pool_type &cpool = pool; int &comp = pool.construct(0, 42); ASSERT_EQ(pool.get(0), comp); ASSERT_EQ(pool.get(0), 42); ASSERT_TRUE(pool.has(0)); ASSERT_EQ(cpool.get(0), comp); ASSERT_EQ(cpool.get(0), 42); ASSERT_TRUE(cpool.has(0)); ASSERT_NO_THROW(pool.destroy(0)); } TEST(ComponentPool, EntitiesReset) { using pool_type = entt::ComponentPool; pool_type pool{2}; ASSERT_EQ(pool.construct(0, 0), 0); ASSERT_EQ(pool.construct(2, 2), 2); ASSERT_EQ(pool.construct(3, 3), 3); ASSERT_EQ(pool.construct(1, 1), 1); ASSERT_EQ(pool.size(), decltype(pool.size()){4}); ASSERT_EQ(pool.entities()[0], typename pool_type::entity_type{0}); ASSERT_EQ(pool.entities()[1], typename pool_type::entity_type{2}); ASSERT_EQ(pool.entities()[2], typename pool_type::entity_type{3}); ASSERT_EQ(pool.entities()[3], typename pool_type::entity_type{1}); pool.destroy(2); ASSERT_EQ(pool.size(), decltype(pool.size()){3}); ASSERT_EQ(pool.entities()[0], typename pool_type::entity_type{0}); ASSERT_EQ(pool.entities()[1], typename pool_type::entity_type{1}); ASSERT_EQ(pool.entities()[2], typename pool_type::entity_type{3}); ASSERT_NO_THROW(pool.reset()); }