Просмотр исходного кода

sparse_set::arrange: more tests (see #323)

Michele Caini 6 лет назад
Родитель
Сommit
b043b48e6e
1 измененных файлов с 46 добавлено и 0 удалено
  1. 46 0
      test/entt/entity/sparse_set.cpp

+ 46 - 0
test/entt/entity/sparse_set.cpp

@@ -418,6 +418,12 @@ TEST(SparseSet, ArrangOrdered) {
 
     set.arrange(set.begin(), set.end(), [](auto...) { FAIL(); }, std::less{});
 
+    ASSERT_EQ(set.index(entt::entity{42}), 0u);
+    ASSERT_EQ(set.index(entt::entity{12}), 1u);
+    ASSERT_EQ(set.index(entt::entity{9}), 2u);
+    ASSERT_EQ(set.index(entt::entity{7}), 3u);
+    ASSERT_EQ(set.index(entt::entity{3}), 4u);
+
     ASSERT_EQ(*(set.data() + 0u), entt::entity{42});
     ASSERT_EQ(*(set.data() + 1u), entt::entity{12});
     ASSERT_EQ(*(set.data() + 2u), entt::entity{9});
@@ -436,6 +442,12 @@ TEST(SparseSet, ArrangeReverse) {
         std::swap(entities[set.index(lhs)], entities[set.index(rhs)]);
     }, std::less{});
 
+    ASSERT_EQ(set.index(entt::entity{42}), 0u);
+    ASSERT_EQ(set.index(entt::entity{12}), 1u);
+    ASSERT_EQ(set.index(entt::entity{9}), 2u);
+    ASSERT_EQ(set.index(entt::entity{7}), 3u);
+    ASSERT_EQ(set.index(entt::entity{3}), 4u);
+
     ASSERT_EQ(*(set.data() + 0u), entt::entity{42});
     ASSERT_EQ(*(set.data() + 1u), entt::entity{12});
     ASSERT_EQ(*(set.data() + 2u), entt::entity{9});
@@ -454,6 +466,12 @@ TEST(SparseSet, ArrangeUnordered) {
         std::swap(entities[set.index(lhs)], entities[set.index(rhs)]);
     }, std::less{});
 
+    ASSERT_EQ(set.index(entt::entity{42}), 0u);
+    ASSERT_EQ(set.index(entt::entity{12}), 1u);
+    ASSERT_EQ(set.index(entt::entity{9}), 2u);
+    ASSERT_EQ(set.index(entt::entity{7}), 3u);
+    ASSERT_EQ(set.index(entt::entity{3}), 4u);
+
     ASSERT_EQ(*(set.data() + 0u), entt::entity{42});
     ASSERT_EQ(*(set.data() + 1u), entt::entity{12});
     ASSERT_EQ(*(set.data() + 2u), entt::entity{9});
@@ -502,6 +520,12 @@ TEST(SparseSet, ArrangeRange) {
         std::swap(entities[set.index(lhs)], entities[set.index(rhs)]);
     }, std::less{});
 
+    ASSERT_EQ(set.index(entt::entity{9}), 0u);
+    ASSERT_EQ(set.index(entt::entity{12}), 1u);
+    ASSERT_EQ(set.index(entt::entity{7}), 2u);
+    ASSERT_EQ(set.index(entt::entity{3}), 3u);
+    ASSERT_EQ(set.index(entt::entity{42}), 4u);
+
     ASSERT_EQ(*(set.data() + 0u), entt::entity{9});
     ASSERT_EQ(*(set.data() + 1u), entt::entity{12});
     ASSERT_EQ(*(set.data() + 2u), entt::entity{7});
@@ -509,6 +533,28 @@ TEST(SparseSet, ArrangeRange) {
     ASSERT_EQ(*(set.data() + 4u), entt::entity{42});
 }
 
+TEST(SparseSet, ArrangeCornerCase) {
+    entt::sparse_set<entt::entity> set;
+    entt::entity entities[5]{entt::entity{0}, entt::entity{1}, entt::entity{4}, entt::entity{3}, entt::entity{2}};
+    set.batch(std::begin(entities), std::end(entities));
+
+    set.arrange(++set.begin(), set.end(), [&set, &entities](const auto lhs, const auto rhs) {
+        std::swap(entities[set.index(lhs)], entities[set.index(rhs)]);
+    }, std::less{});
+
+    ASSERT_EQ(set.index(entt::entity{4}), 0u);
+    ASSERT_EQ(set.index(entt::entity{3}), 1u);
+    ASSERT_EQ(set.index(entt::entity{1}), 2u);
+    ASSERT_EQ(set.index(entt::entity{0}), 3u);
+    ASSERT_EQ(set.index(entt::entity{2}), 4u);
+
+    ASSERT_EQ(*(set.data() + 0u), entt::entity{4});
+    ASSERT_EQ(*(set.data() + 1u), entt::entity{3});
+    ASSERT_EQ(*(set.data() + 2u), entt::entity{1});
+    ASSERT_EQ(*(set.data() + 3u), entt::entity{0});
+    ASSERT_EQ(*(set.data() + 4u), entt::entity{2});
+}
+
 TEST(SparseSet, RespectDisjoint) {
     entt::sparse_set<entt::entity> lhs;
     entt::sparse_set<entt::entity> rhs;