|
@@ -428,6 +428,22 @@ TEST(SparseSetDeathTest, Erase) {
|
|
|
ASSERT_DEATH(set.erase(entt::null), "");
|
|
ASSERT_DEATH(set.erase(entt::null), "");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+TEST(SparseSet, CrossErase) {
|
|
|
|
|
+ using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
+
|
|
|
|
|
+ entt::sparse_set set;
|
|
|
|
|
+ entt::sparse_set other;
|
|
|
|
|
+ entt::entity entities[2u]{entt::entity{3}, entt::entity{42}};
|
|
|
|
|
+
|
|
|
|
|
+ set.insert(std::begin(entities), std::end(entities));
|
|
|
|
|
+ other.emplace(entities[1u]);
|
|
|
|
|
+ set.erase(other.begin(), other.end());
|
|
|
|
|
+
|
|
|
|
|
+ ASSERT_TRUE(set.contains(entities[0u]));
|
|
|
|
|
+ ASSERT_FALSE(set.contains(entities[1u]));
|
|
|
|
|
+ ASSERT_EQ(set.data()[0u], entities[0u]);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
TEST(SparseSet, StableErase) {
|
|
TEST(SparseSet, StableErase) {
|
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
|
|
@@ -552,6 +568,22 @@ TEST(SparseSetDeathTest, StableErase) {
|
|
|
ASSERT_DEATH(set.erase(entt::null), "");
|
|
ASSERT_DEATH(set.erase(entt::null), "");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+TEST(SparseSet, CrossStableErase) {
|
|
|
|
|
+ using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
+
|
|
|
|
|
+ entt::sparse_set set{entt::deletion_policy::in_place};
|
|
|
|
|
+ entt::sparse_set other{entt::deletion_policy::in_place};
|
|
|
|
|
+ entt::entity entities[2u]{entt::entity{3}, entt::entity{42}};
|
|
|
|
|
+
|
|
|
|
|
+ set.insert(std::begin(entities), std::end(entities));
|
|
|
|
|
+ other.emplace(entities[1u]);
|
|
|
|
|
+ set.erase(other.begin(), other.end());
|
|
|
|
|
+
|
|
|
|
|
+ ASSERT_TRUE(set.contains(entities[0u]));
|
|
|
|
|
+ ASSERT_FALSE(set.contains(entities[1u]));
|
|
|
|
|
+ ASSERT_EQ(set.data()[0u], entities[0u]);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
TEST(SparseSet, Remove) {
|
|
TEST(SparseSet, Remove) {
|
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
|
|
@@ -609,6 +641,22 @@ TEST(SparseSet, Remove) {
|
|
|
ASSERT_EQ(set.remove(entt::null), 0u);
|
|
ASSERT_EQ(set.remove(entt::null), 0u);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+TEST(SparseSet, CrossRemove) {
|
|
|
|
|
+ using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
+
|
|
|
|
|
+ entt::sparse_set set;
|
|
|
|
|
+ entt::sparse_set other;
|
|
|
|
|
+ entt::entity entities[2u]{entt::entity{3}, entt::entity{42}};
|
|
|
|
|
+
|
|
|
|
|
+ set.insert(std::begin(entities), std::end(entities));
|
|
|
|
|
+ other.emplace(entities[1u]);
|
|
|
|
|
+ set.remove(other.begin(), other.end());
|
|
|
|
|
+
|
|
|
|
|
+ ASSERT_TRUE(set.contains(entities[0u]));
|
|
|
|
|
+ ASSERT_FALSE(set.contains(entities[1u]));
|
|
|
|
|
+ ASSERT_EQ(set.data()[0u], entities[0u]);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
TEST(SparseSet, StableRemove) {
|
|
TEST(SparseSet, StableRemove) {
|
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
|
|
@@ -739,6 +787,22 @@ TEST(SparseSet, StableRemove) {
|
|
|
ASSERT_EQ(set.remove(entt::null), 0u);
|
|
ASSERT_EQ(set.remove(entt::null), 0u);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+TEST(SparseSet, CrossStableRemove) {
|
|
|
|
|
+ using traits_type = entt::entt_traits<entt::entity>;
|
|
|
|
|
+
|
|
|
|
|
+ entt::sparse_set set{entt::deletion_policy::in_place};
|
|
|
|
|
+ entt::sparse_set other{entt::deletion_policy::in_place};
|
|
|
|
|
+ entt::entity entities[2u]{entt::entity{3}, entt::entity{42}};
|
|
|
|
|
+
|
|
|
|
|
+ set.insert(std::begin(entities), std::end(entities));
|
|
|
|
|
+ other.emplace(entities[1u]);
|
|
|
|
|
+ set.remove(other.begin(), other.end());
|
|
|
|
|
+
|
|
|
|
|
+ ASSERT_TRUE(set.contains(entities[0u]));
|
|
|
|
|
+ ASSERT_FALSE(set.contains(entities[1u]));
|
|
|
|
|
+ ASSERT_EQ(set.data()[0u], entities[0u]);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
TEST(SparseSet, Compact) {
|
|
TEST(SparseSet, Compact) {
|
|
|
entt::sparse_set set{entt::deletion_policy::in_place};
|
|
entt::sparse_set set{entt::deletion_policy::in_place};
|
|
|
|
|
|