#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()); registry_type::entity_type e1 = registry.create(); registry_type::entity_type e2 = registry.create(); 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_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)); 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(e1, e2)); 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(e1, e2)); ASSERT_EQ(registry.get(e2), 0); ASSERT_NE(®istry.get(e1), ®istry.get(e2)); 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_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()); } 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(); 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()); ASSERT_NO_THROW(registry.view().begin()++); ASSERT_NO_THROW(++registry.view().begin()); } 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(); 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()); ASSERT_NO_THROW((registry.view().begin()++)); ASSERT_NO_THROW((++registry.view().begin())); }