|
|
@@ -4,9 +4,8 @@
|
|
|
#include <entt/entity/registry.hpp>
|
|
|
#include <entt/entity/view.hpp>
|
|
|
|
|
|
-TEST(PersistentView, Prepare) {
|
|
|
+TEST(PersistentView, Functionalities) {
|
|
|
entt::registry<> registry;
|
|
|
- registry.prepare_persistent_view<int, char>();
|
|
|
auto view = registry.persistent_view<int, char>();
|
|
|
const auto &cview = view;
|
|
|
|
|
|
@@ -56,55 +55,6 @@ TEST(PersistentView, Prepare) {
|
|
|
ASSERT_TRUE(view.empty());
|
|
|
}
|
|
|
|
|
|
-TEST(PersistentView, NoPrepare) {
|
|
|
- entt::registry<> registry;
|
|
|
- auto view = registry.persistent_view<int, char>();
|
|
|
-
|
|
|
- ASSERT_TRUE(view.empty());
|
|
|
-
|
|
|
- const auto e0 = registry.create();
|
|
|
- registry.assign<char>(e0);
|
|
|
-
|
|
|
- const auto e1 = registry.create();
|
|
|
- registry.assign<int>(e1);
|
|
|
- registry.assign<char>(e1);
|
|
|
-
|
|
|
- ASSERT_FALSE(view.empty());
|
|
|
- ASSERT_NO_THROW((registry.persistent_view<int, char>().begin()++));
|
|
|
- ASSERT_NO_THROW((++registry.persistent_view<int, char>().begin()));
|
|
|
-
|
|
|
- ASSERT_NE(view.begin(), view.end());
|
|
|
- ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
-
|
|
|
- registry.assign<int>(e0);
|
|
|
-
|
|
|
- ASSERT_EQ(view.size(), typename decltype(view)::size_type{2});
|
|
|
-
|
|
|
- registry.remove<int>(e0);
|
|
|
-
|
|
|
- ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
-
|
|
|
- registry.get<char>(e0) = '1';
|
|
|
- registry.get<char>(e1) = '2';
|
|
|
- registry.get<int>(e1) = 42;
|
|
|
-
|
|
|
- for(auto entity: view) {
|
|
|
- const auto &cview = static_cast<const decltype(view) &>(view);
|
|
|
- ASSERT_EQ(std::get<0>(cview.get<int, char>(entity)), 42);
|
|
|
- ASSERT_EQ(std::get<1>(view.get<int, char>(entity)), '2');
|
|
|
- ASSERT_EQ(cview.get<char>(entity), '2');
|
|
|
- }
|
|
|
-
|
|
|
- ASSERT_EQ(*(view.data() + 0), e1);
|
|
|
-
|
|
|
- registry.remove<char>(e0);
|
|
|
- registry.remove<char>(e1);
|
|
|
-
|
|
|
- ASSERT_EQ(view.begin(), view.end());
|
|
|
- ASSERT_EQ(view.cbegin(), view.cend());
|
|
|
- ASSERT_TRUE(view.empty());
|
|
|
-}
|
|
|
-
|
|
|
TEST(PersistentView, ElementAccess) {
|
|
|
entt::registry<> registry;
|
|
|
auto view = registry.persistent_view<int, char>();
|
|
|
@@ -126,6 +76,7 @@ TEST(PersistentView, ElementAccess) {
|
|
|
|
|
|
TEST(PersistentView, Contains) {
|
|
|
entt::registry<> registry;
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
|
|
|
const auto e0 = registry.create();
|
|
|
registry.assign<int>(e0);
|
|
|
@@ -137,8 +88,6 @@ TEST(PersistentView, Contains) {
|
|
|
|
|
|
registry.destroy(e0);
|
|
|
|
|
|
- auto view = registry.persistent_view<int, char>();
|
|
|
-
|
|
|
ASSERT_FALSE(view.contains(e0));
|
|
|
ASSERT_TRUE(view.contains(e1));
|
|
|
}
|
|
|
@@ -168,7 +117,7 @@ TEST(PersistentView, Empty) {
|
|
|
|
|
|
TEST(PersistentView, Each) {
|
|
|
entt::registry<> registry;
|
|
|
- registry.prepare_persistent_view<int, char>();
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
|
|
|
const auto e0 = registry.create();
|
|
|
registry.assign<int>(e0);
|
|
|
@@ -178,7 +127,6 @@ TEST(PersistentView, Each) {
|
|
|
registry.assign<int>(e1);
|
|
|
registry.assign<char>(e1);
|
|
|
|
|
|
- auto view = registry.persistent_view<int, char>();
|
|
|
const auto &cview = static_cast<const decltype(view) &>(view);
|
|
|
std::size_t cnt = 0;
|
|
|
|
|
|
@@ -193,7 +141,7 @@ TEST(PersistentView, Each) {
|
|
|
|
|
|
TEST(PersistentView, Sort) {
|
|
|
entt::registry<> registry;
|
|
|
- registry.prepare_persistent_view<int, unsigned int>();
|
|
|
+ auto view = registry.persistent_view<int, unsigned int>();
|
|
|
|
|
|
const auto e0 = registry.create();
|
|
|
const auto e1 = registry.create();
|
|
|
@@ -210,8 +158,6 @@ TEST(PersistentView, Sort) {
|
|
|
registry.assign<int>(e1, ival++);
|
|
|
registry.assign<int>(e2, ival++);
|
|
|
|
|
|
- auto view = registry.persistent_view<int, unsigned int>();
|
|
|
-
|
|
|
for(auto entity: view) {
|
|
|
ASSERT_EQ(view.get<unsigned int>(entity), --uval);
|
|
|
ASSERT_EQ(view.get<int>(entity), --ival);
|
|
|
@@ -226,6 +172,156 @@ TEST(PersistentView, Sort) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+TEST(PersistentView, Initialize) {
|
|
|
+ entt::registry<> registry;
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create());
|
|
|
+
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.assign<char>(entity);
|
|
|
+ registry.assign<int>(entity);
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create());
|
|
|
+
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ for(auto entt: view) {
|
|
|
+ (void)entt;
|
|
|
+ FAIL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ view.initialize();
|
|
|
+
|
|
|
+ for(auto entt: view) {
|
|
|
+ ASSERT_EQ(entity, entt);
|
|
|
+ }
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+}
|
|
|
+
|
|
|
+TEST(PersistentView, RebuildOnFirstUse) {
|
|
|
+ entt::registry<> registry;
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create());
|
|
|
+
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.assign<char>(entity);
|
|
|
+ registry.assign<int>(entity);
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create());
|
|
|
+
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ for(auto entt: view) {
|
|
|
+ (void)entt;
|
|
|
+ FAIL();
|
|
|
+ }
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ view.each([entity](auto entt, auto &&...) {
|
|
|
+ ASSERT_EQ(entity, entt);
|
|
|
+ });
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+}
|
|
|
+
|
|
|
+TEST(PersistentView, RebuildOnFirstUseAfterDirectSort) {
|
|
|
+ entt::registry<> registry;
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create(), 1);
|
|
|
+
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.assign<char>(entity, 'c');
|
|
|
+ registry.assign<int>(entity, 0);
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create(), 2);
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+
|
|
|
+ registry.sort<int>([](auto lhs, auto rhs) { return lhs < rhs; });
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ view.each([entity](auto entt, auto &&...) {
|
|
|
+ ASSERT_EQ(entity, entt);
|
|
|
+ });
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+}
|
|
|
+
|
|
|
+TEST(PersistentView, RebuildOnFirstUseAfterDependentSort) {
|
|
|
+ entt::registry<> registry;
|
|
|
+ auto view = registry.persistent_view<int, char>();
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create(), 1);
|
|
|
+
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.assign<char>(entity, 'c');
|
|
|
+ registry.assign<int>(entity, 0);
|
|
|
+
|
|
|
+ registry.assign<int>(registry.create(), 2);
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+
|
|
|
+ registry.sort<int, char>();
|
|
|
+
|
|
|
+ ASSERT_TRUE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{});
|
|
|
+
|
|
|
+ view.each([entity](auto entt, auto &&...) {
|
|
|
+ ASSERT_EQ(entity, entt);
|
|
|
+ });
|
|
|
+
|
|
|
+ ASSERT_FALSE(view.empty());
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+}
|
|
|
+
|
|
|
+TEST(PersistentView, IndexRebuiltOnDestroy) {
|
|
|
+ entt::registry<> registry;
|
|
|
+ auto view = registry.persistent_view<int, unsigned int>();
|
|
|
+
|
|
|
+ const auto e0 = registry.create();
|
|
|
+ const auto e1 = registry.create();
|
|
|
+
|
|
|
+ registry.assign<unsigned int>(e0, 0u);
|
|
|
+ registry.assign<unsigned int>(e1, 1u);
|
|
|
+
|
|
|
+ registry.assign<int>(e0, 0);
|
|
|
+ registry.assign<int>(e1, 1);
|
|
|
+
|
|
|
+ registry.destroy(e0);
|
|
|
+ registry.assign<int>(registry.create(), 42);
|
|
|
+
|
|
|
+ ASSERT_EQ(view.size(), typename decltype(view)::size_type{1});
|
|
|
+ ASSERT_EQ(view[{}], e1);
|
|
|
+ ASSERT_EQ(view.get<int>(e1), 1);
|
|
|
+ ASSERT_EQ(view.get<unsigned int>(e1), 1u);
|
|
|
+
|
|
|
+ view.each([e1](auto entity, auto ivalue, auto uivalue) {
|
|
|
+ ASSERT_EQ(entity, e1);
|
|
|
+ ASSERT_EQ(ivalue, 1);
|
|
|
+ ASSERT_EQ(uivalue, 1u);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
TEST(SingleComponentView, Functionalities) {
|
|
|
entt::registry<> registry;
|
|
|
auto view = registry.view<char>();
|