#include #include TEST(DefaultRegistry, Functionalities) { using registry_type = entt::DefaultRegistry; registry_type registry; ASSERT_EQ(registry.size(), registry_type::size_type{0}); ASSERT_EQ(registry.capacity(), registry_type::size_type{0}); ASSERT_TRUE(registry.empty()); ASSERT_TRUE(registry.empty()); ASSERT_TRUE(registry.empty()); registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); ASSERT_FALSE(registry.empty()); ASSERT_FALSE(registry.empty()); ASSERT_NE(e1, e2); ASSERT_FALSE(registry.has(e1)); ASSERT_TRUE(registry.has(e2)); ASSERT_FALSE(registry.has(e1)); ASSERT_TRUE(registry.has(e2)); ASSERT_TRUE((registry.has(e2))); ASSERT_FALSE((registry.has(e1))); ASSERT_EQ(registry.assign(e1, 42), 42); ASSERT_EQ(registry.assign(e1, 'c'), 'c'); ASSERT_NO_THROW(registry.remove(e2)); ASSERT_NO_THROW(registry.remove(e2)); ASSERT_TRUE(registry.has(e1)); ASSERT_FALSE(registry.has(e2)); ASSERT_TRUE(registry.has(e1)); ASSERT_FALSE(registry.has(e2)); ASSERT_TRUE((registry.has(e1))); ASSERT_FALSE((registry.has(e2))); registry_type::entity_type e3 = registry.clone(e1); ASSERT_TRUE(registry.has(e3)); ASSERT_TRUE(registry.has(e3)); ASSERT_EQ(registry.get(e1), 42); ASSERT_EQ(registry.get(e1), 'c'); ASSERT_EQ(registry.get(e1), registry.get(e3)); ASSERT_EQ(registry.get(e1), registry.get(e3)); ASSERT_NE(®istry.get(e1), ®istry.get(e3)); ASSERT_NE(®istry.get(e1), ®istry.get(e3)); ASSERT_NO_THROW(registry.copy(e2, e1)); ASSERT_TRUE(registry.has(e2)); ASSERT_TRUE(registry.has(e2)); ASSERT_EQ(registry.get(e1), 42); ASSERT_EQ(registry.get(e1), 'c'); ASSERT_EQ(registry.get(e1), registry.get(e2)); ASSERT_EQ(registry.get(e1), registry.get(e2)); ASSERT_NE(®istry.get(e1), ®istry.get(e2)); ASSERT_NE(®istry.get(e1), ®istry.get(e2)); ASSERT_NO_THROW(registry.replace(e1, 0)); ASSERT_EQ(registry.get(e1), 0); ASSERT_NO_THROW(registry.copy(e2, e1)); ASSERT_EQ(registry.get(e2), 0); ASSERT_NE(®istry.get(e1), ®istry.get(e2)); ASSERT_NO_THROW(registry.remove(e2)); ASSERT_NO_THROW(registry.accomodate(e1, 1)); ASSERT_NO_THROW(registry.accomodate(e2, 1)); ASSERT_EQ(static_cast(registry).get(e1), 1); ASSERT_EQ(static_cast(registry).get(e2), 1); ASSERT_EQ(registry.size(), registry_type::size_type{3}); ASSERT_EQ(registry.capacity(), registry_type::size_type{3}); ASSERT_FALSE(registry.empty()); ASSERT_NO_THROW(registry.destroy(e3)); ASSERT_TRUE(registry.valid(e1)); ASSERT_TRUE(registry.valid(e2)); ASSERT_FALSE(registry.valid(e3)); ASSERT_EQ(registry.size(), registry_type::size_type{2}); ASSERT_EQ(registry.capacity(), registry_type::size_type{3}); ASSERT_FALSE(registry.empty()); ASSERT_NO_THROW(registry.reset()); ASSERT_EQ(registry.size(), registry_type::size_type{0}); ASSERT_EQ(registry.capacity(), registry_type::size_type{0}); ASSERT_TRUE(registry.empty()); registry.create(); ASSERT_FALSE(registry.empty()); ASSERT_FALSE(registry.empty()); ASSERT_NO_THROW(registry.reset()); ASSERT_TRUE(registry.empty()); ASSERT_FALSE(registry.empty()); ASSERT_NO_THROW(registry.reset()); ASSERT_TRUE(registry.empty()); ASSERT_TRUE(registry.empty()); e1 = registry.create(); e2 = registry.create(); ASSERT_NO_THROW(registry.reset(e1)); ASSERT_NO_THROW(registry.reset(e2)); ASSERT_TRUE(registry.empty()); } TEST(DefaultRegistry, Copy) { using registry_type = entt::DefaultRegistry; registry_type registry; registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); ASSERT_TRUE(registry.has(e1)); ASSERT_TRUE(registry.has(e1)); ASSERT_FALSE(registry.has(e1)); ASSERT_TRUE(registry.has(e2)); ASSERT_FALSE(registry.has(e2)); ASSERT_TRUE(registry.has(e2)); ASSERT_NO_THROW(registry.copy(e2, e1)); ASSERT_TRUE(registry.has(e1)); ASSERT_TRUE(registry.has(e1)); ASSERT_FALSE(registry.has(e1)); ASSERT_TRUE(registry.has(e2)); ASSERT_TRUE(registry.has(e2)); ASSERT_FALSE(registry.has(e2)); ASSERT_FALSE(registry.empty()); ASSERT_FALSE(registry.empty()); ASSERT_TRUE(registry.empty()); registry.reset(); } TEST(DefaultRegistry, Swap) { using registry_type = entt::DefaultRegistry; registry_type registry; registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); registry.get(e1) = 0; registry.get(e1) = 'a'; registry.get(e2) = 1; registry.get(e2) = 'b'; registry.swap(e1, e2); ASSERT_EQ(registry.get(e1), 1); ASSERT_EQ(registry.get(e1), 'a'); ASSERT_EQ(registry.get(e2), 0); ASSERT_EQ(registry.get(e2), 'b'); registry.reset(); } TEST(DefaultRegistry, Sort) { // TODO } TEST(DefaultRegistry, ViewSingleComponent) { using registry_type = entt::DefaultRegistry; registry_type registry; registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); ASSERT_NO_THROW(registry.view().begin()++); ASSERT_NO_THROW(++registry.view().begin()); auto view = registry.view(); ASSERT_NE(view.begin(), view.end()); ASSERT_EQ(view.size(), typename registry_type::view_type::size_type{1}); registry.assign(e1); ASSERT_EQ(view.size(), typename registry_type::view_type::size_type{2}); registry.remove(e1); registry.remove(e2); ASSERT_EQ(view.begin(), view.end()); ASSERT_NO_THROW(registry.reset()); } TEST(DefaultRegistry, ViewMultipleComponent) { using registry_type = entt::DefaultRegistry; registry_type registry; registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); ASSERT_NO_THROW((registry.view().begin()++)); ASSERT_NO_THROW((++registry.view().begin())); auto view = registry.view(); ASSERT_NE(view.begin(), view.end()); registry.remove(e1); registry.remove(e2); view.reset(); ASSERT_EQ(view.begin(), view.end()); ASSERT_NO_THROW(registry.reset()); } TEST(DefaultRegistry, ViewSingleComponentEmpty) { using registry_type = entt::DefaultRegistry; registry_type registry; registry.create(); registry.create(); auto view = registry.view(); ASSERT_EQ(view.size(), registry_type::size_type{0}); for(auto entity: view) { (void)entity; FAIL(); } registry.reset(); } TEST(DefaultRegistry, ViewMultipleComponentEmpty) { using registry_type = entt::DefaultRegistry; registry_type registry; registry.create(); registry.create(); auto view = registry.view(); for(auto entity: view) { (void)entity; FAIL(); } registry.reset(); }