Browse Source

test: runtime view and storage entity with exclude

skypjack 10 months ago
parent
commit
38caafd999
1 changed files with 38 additions and 0 deletions
  1. 38 0
      test/entt/entity/runtime_view.cpp

+ 38 - 0
test/entt/entity/runtime_view.cpp

@@ -478,3 +478,41 @@ TYPED_TEST(RuntimeView, StorageEntity) {
         ASSERT_EQ(entt, entity[1u]);
     });
 }
+
+TYPED_TEST(RuntimeView, StorageEntityWithExclude) {
+    using runtime_view_type = typename TestFixture::type;
+
+    std::tuple<entt::storage<entt::entity>, entt::storage<int>, entt::storage<char>> storage{};
+    const std::array entity{std::get<0>(storage).generate(), std::get<0>(storage).generate(), std::get<0>(storage).generate()};
+    runtime_view_type view{};
+
+    std::get<1>(storage).emplace(entity[0u]);
+    std::get<1>(storage).emplace(entity[1u]);
+    std::get<1>(storage).emplace(entity[2u]);
+
+    std::get<2>(storage).emplace(entity[2u]);
+
+    std::get<1>(storage).erase(entity[0u]);
+    std::get<0>(storage).erase(entity[0u]);
+    std::get<0>(storage).bump(entity[0u]);
+
+    view.iterate(std::get<0>(storage)).iterate(std::get<1>(storage)).exclude(std::get<2>(storage));
+
+    ASSERT_FALSE(view.contains(entity[0u]));
+    ASSERT_TRUE(view.contains(entity[1u]));
+    ASSERT_FALSE(view.contains(entity[2u]));
+
+    ASSERT_EQ(view.size_hint(), 2u);
+    ASSERT_NE(view.begin(), view.end());
+
+    ASSERT_EQ(std::distance(view.begin(), view.end()), 1);
+    ASSERT_EQ(*view.begin(), entity[1u]);
+
+    for(auto entt: view) {
+        ASSERT_EQ(entt, entity[1u]);
+    }
+
+    view.each([&entity](auto entt, auto &&...) {
+        ASSERT_EQ(entt, entity[1u]);
+    });
+}