|
|
@@ -1,4 +1,5 @@
|
|
|
#include <algorithm>
|
|
|
+#include <array>
|
|
|
#include <cstddef>
|
|
|
#include <iterator>
|
|
|
#include <memory>
|
|
|
@@ -161,10 +162,11 @@ TYPED_TEST(Storage, Swap) {
|
|
|
ASSERT_EQ(pool.type(), entt::type_id<value_type>());
|
|
|
ASSERT_EQ(other.type(), entt::type_id<value_type>());
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, 41); // NOLINT
|
|
|
- other.emplace(entt::entity{9}, 8); // NOLINT
|
|
|
- other.emplace(entt::entity{3}, 2);
|
|
|
- other.erase(entt::entity{9}); // NOLINT
|
|
|
+ pool.emplace(entt::entity{4}, 1);
|
|
|
+
|
|
|
+ other.emplace(entt::entity{2}, 2);
|
|
|
+ other.emplace(entt::entity{1}, 3);
|
|
|
+ other.erase(entt::entity{2});
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 1u);
|
|
|
ASSERT_EQ(other.size(), 1u + traits_type::in_place_delete);
|
|
|
@@ -177,11 +179,11 @@ TYPED_TEST(Storage, Swap) {
|
|
|
ASSERT_EQ(pool.size(), 1u + traits_type::in_place_delete);
|
|
|
ASSERT_EQ(other.size(), 1u);
|
|
|
|
|
|
- ASSERT_EQ(pool.index(entt::entity{3}), traits_type::in_place_delete);
|
|
|
- ASSERT_EQ(other.index(entt::entity{42}), 0u);
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{1}), traits_type::in_place_delete);
|
|
|
+ ASSERT_EQ(other.index(entt::entity{4}), 0u);
|
|
|
|
|
|
- ASSERT_EQ(pool.get(entt::entity{3}), value_type{2});
|
|
|
- ASSERT_EQ(other.get(entt::entity{42}), value_type{41});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}), value_type{3});
|
|
|
+ ASSERT_EQ(other.get(entt::entity{4}), value_type{1});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Capacity) {
|
|
|
@@ -189,7 +191,7 @@ TYPED_TEST(Storage, Capacity) {
|
|
|
using traits_type = entt::component_traits<value_type>;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.reserve(42); // NOLINT
|
|
|
+ pool.reserve(64);
|
|
|
|
|
|
ASSERT_EQ(pool.capacity(), traits_type::page_size);
|
|
|
ASSERT_TRUE(pool.empty());
|
|
|
@@ -236,11 +238,11 @@ TYPED_TEST(Storage, Raw) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
+ pool.emplace(entt::entity{1}, 1);
|
|
|
pool.emplace(entt::entity{3}, 3);
|
|
|
- pool.emplace(entt::entity{12}, 6); // NOLINT
|
|
|
|
|
|
- ASSERT_EQ(pool.raw()[0u][0u], value_type{3});
|
|
|
- ASSERT_EQ(std::as_const(pool).raw()[0u][1u], value_type{6});
|
|
|
+ ASSERT_EQ(pool.raw()[0u][0u], value_type{1});
|
|
|
+ ASSERT_EQ(std::as_const(pool).raw()[0u][1u], value_type{3});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Iterator) {
|
|
|
@@ -252,7 +254,7 @@ TYPED_TEST(Storage, Iterator) {
|
|
|
testing::StaticAssertTypeEq<typename iterator::reference, value_type &>();
|
|
|
|
|
|
entt::storage<value_type> pool;
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
|
|
|
iterator end{pool.begin()};
|
|
|
iterator begin{};
|
|
|
@@ -296,14 +298,14 @@ TYPED_TEST(Storage, Iterator) {
|
|
|
ASSERT_EQ(begin.index(), 0);
|
|
|
ASSERT_EQ(end.index(), -1);
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, 3); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
begin = pool.begin();
|
|
|
|
|
|
ASSERT_EQ(begin.index(), 1);
|
|
|
ASSERT_EQ(end.index(), -1);
|
|
|
|
|
|
- ASSERT_EQ(begin[0u], value_type{3});
|
|
|
- ASSERT_EQ(begin[1u], value_type{42});
|
|
|
+ ASSERT_EQ(begin[0u], value_type{4});
|
|
|
+ ASSERT_EQ(begin[1u], value_type{2});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, ConstIterator) {
|
|
|
@@ -315,7 +317,7 @@ TYPED_TEST(Storage, ConstIterator) {
|
|
|
testing::StaticAssertTypeEq<typename iterator::reference, const value_type &>();
|
|
|
|
|
|
entt::storage<value_type> pool;
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
|
|
|
iterator cend{pool.cbegin()};
|
|
|
iterator cbegin{};
|
|
|
@@ -360,14 +362,14 @@ TYPED_TEST(Storage, ConstIterator) {
|
|
|
ASSERT_EQ(cbegin.index(), 0);
|
|
|
ASSERT_EQ(cend.index(), -1);
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, 3); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
cbegin = pool.cbegin();
|
|
|
|
|
|
ASSERT_EQ(cbegin.index(), 1);
|
|
|
ASSERT_EQ(cend.index(), -1);
|
|
|
|
|
|
- ASSERT_EQ(cbegin[0u], value_type{3});
|
|
|
- ASSERT_EQ(cbegin[1u], value_type{42});
|
|
|
+ ASSERT_EQ(cbegin[0u], value_type{4});
|
|
|
+ ASSERT_EQ(cbegin[1u], value_type{2});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, ReverseIterator) {
|
|
|
@@ -379,7 +381,7 @@ TYPED_TEST(Storage, ReverseIterator) {
|
|
|
testing::StaticAssertTypeEq<typename reverse_iterator::reference, value_type &>();
|
|
|
|
|
|
entt::storage<value_type> pool;
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
|
|
|
reverse_iterator end{pool.rbegin()};
|
|
|
reverse_iterator begin{};
|
|
|
@@ -422,14 +424,14 @@ TYPED_TEST(Storage, ReverseIterator) {
|
|
|
ASSERT_EQ(begin.base().index(), -1);
|
|
|
ASSERT_EQ(end.base().index(), 0);
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, 3); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
end = pool.rend();
|
|
|
|
|
|
ASSERT_EQ(begin.base().index(), -1);
|
|
|
ASSERT_EQ(end.base().index(), 1);
|
|
|
|
|
|
- ASSERT_EQ(begin[0u], value_type{42});
|
|
|
- ASSERT_EQ(begin[1u], value_type{3});
|
|
|
+ ASSERT_EQ(begin[0u], value_type{2});
|
|
|
+ ASSERT_EQ(begin[1u], value_type{4});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, ConstReverseIterator) {
|
|
|
@@ -441,7 +443,7 @@ TYPED_TEST(Storage, ConstReverseIterator) {
|
|
|
testing::StaticAssertTypeEq<typename const_reverse_iterator::reference, const value_type &>();
|
|
|
|
|
|
entt::storage<value_type> pool;
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
|
|
|
const_reverse_iterator cend{pool.crbegin()};
|
|
|
const_reverse_iterator cbegin{};
|
|
|
@@ -486,21 +488,21 @@ TYPED_TEST(Storage, ConstReverseIterator) {
|
|
|
ASSERT_EQ(cbegin.base().index(), -1);
|
|
|
ASSERT_EQ(cend.base().index(), 0);
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, 3); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
cend = pool.crend();
|
|
|
|
|
|
ASSERT_EQ(cbegin.base().index(), -1);
|
|
|
ASSERT_EQ(cend.base().index(), 1);
|
|
|
|
|
|
- ASSERT_EQ(cbegin[0u], value_type{42});
|
|
|
- ASSERT_EQ(cbegin[1u], value_type{3});
|
|
|
+ ASSERT_EQ(cbegin[0u], value_type{2});
|
|
|
+ ASSERT_EQ(cbegin[1u], value_type{4});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, IteratorConversion) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
|
|
|
const typename entt::storage<value_type>::iterator it = pool.begin();
|
|
|
typename entt::storage<value_type>::const_iterator cit = it;
|
|
|
@@ -508,7 +510,7 @@ TYPED_TEST(Storage, IteratorConversion) {
|
|
|
testing::StaticAssertTypeEq<decltype(*it), value_type &>();
|
|
|
testing::StaticAssertTypeEq<decltype(*cit), const value_type &>();
|
|
|
|
|
|
- ASSERT_EQ(*it.operator->(), value_type{42});
|
|
|
+ ASSERT_EQ(*it.operator->(), value_type{2});
|
|
|
ASSERT_EQ(*it.operator->(), *cit);
|
|
|
|
|
|
ASSERT_EQ(it - cit, 0);
|
|
|
@@ -526,7 +528,7 @@ TYPED_TEST(Storage, IteratorPageSizeAwareness) {
|
|
|
using traits_type = entt::component_traits<value_type>;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- const value_type check{42};
|
|
|
+ const value_type check{2};
|
|
|
|
|
|
for(unsigned int next{}; next < traits_type::page_size; ++next) {
|
|
|
pool.emplace(entt::entity{next});
|
|
|
@@ -542,7 +544,7 @@ TYPED_TEST(Storage, Getters) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{41}, 3); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 3);
|
|
|
|
|
|
testing::StaticAssertTypeEq<decltype(pool.get({})), value_type &>();
|
|
|
testing::StaticAssertTypeEq<decltype(std::as_const(pool).get({})), const value_type &>();
|
|
|
@@ -550,38 +552,38 @@ TYPED_TEST(Storage, Getters) {
|
|
|
testing::StaticAssertTypeEq<decltype(pool.get_as_tuple({})), std::tuple<value_type &>>();
|
|
|
testing::StaticAssertTypeEq<decltype(std::as_const(pool).get_as_tuple({})), std::tuple<const value_type &>>();
|
|
|
|
|
|
- ASSERT_EQ(pool.get(entt::entity{41}), value_type{3});
|
|
|
- ASSERT_EQ(std::as_const(pool).get(entt::entity{41}), value_type{3});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}), value_type{3});
|
|
|
+ ASSERT_EQ(std::as_const(pool).get(entt::entity{1}), value_type{3});
|
|
|
|
|
|
- ASSERT_EQ(pool.get_as_tuple(entt::entity{41}), std::make_tuple(value_type{3}));
|
|
|
- ASSERT_EQ(std::as_const(pool).get_as_tuple(entt::entity{41}), std::make_tuple(value_type{3}));
|
|
|
+ ASSERT_EQ(pool.get_as_tuple(entt::entity{1}), std::make_tuple(value_type{3}));
|
|
|
+ ASSERT_EQ(std::as_const(pool).get_as_tuple(entt::entity{1}), std::make_tuple(value_type{3}));
|
|
|
}
|
|
|
|
|
|
ENTT_DEBUG_TYPED_TEST(StorageDeathTest, Getters) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- ASSERT_DEATH([[maybe_unused]] const auto &value = pool.get(entt::entity{41}), "");
|
|
|
- ASSERT_DEATH([[maybe_unused]] const auto &value = std::as_const(pool).get(entt::entity{41}), "");
|
|
|
+ ASSERT_DEATH([[maybe_unused]] const auto &value = pool.get(entt::entity{4}), "");
|
|
|
+ ASSERT_DEATH([[maybe_unused]] const auto &value = std::as_const(pool).get(entt::entity{4}), "");
|
|
|
|
|
|
- ASSERT_DEATH([[maybe_unused]] const auto value = pool.get_as_tuple(entt::entity{41}), "");
|
|
|
- ASSERT_DEATH([[maybe_unused]] const auto value = std::as_const(pool).get_as_tuple(entt::entity{41}), "");
|
|
|
+ ASSERT_DEATH([[maybe_unused]] const auto value = pool.get_as_tuple(entt::entity{4}), "");
|
|
|
+ ASSERT_DEATH([[maybe_unused]] const auto value = std::as_const(pool).get_as_tuple(entt::entity{4}), "");
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Value) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{42}); // NOLINT
|
|
|
+ pool.emplace(entt::entity{2});
|
|
|
|
|
|
- ASSERT_EQ(pool.value(entt::entity{42}), &pool.get(entt::entity{42}));
|
|
|
+ ASSERT_EQ(pool.value(entt::entity{2}), &pool.get(entt::entity{2}));
|
|
|
}
|
|
|
|
|
|
ENTT_DEBUG_TYPED_TEST(StorageDeathTest, Value) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- ASSERT_DEATH([[maybe_unused]] const void *value = pool.value(entt::entity{42}), "");
|
|
|
+ ASSERT_DEATH([[maybe_unused]] const void *value = pool.value(entt::entity{2}), "");
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Emplace) {
|
|
|
@@ -591,7 +593,7 @@ TYPED_TEST(Storage, Emplace) {
|
|
|
testing::StaticAssertTypeEq<decltype(pool.emplace({})), value_type &>();
|
|
|
|
|
|
ASSERT_EQ(pool.emplace(entt::entity{3}), value_type{});
|
|
|
- ASSERT_EQ(pool.emplace(entt::entity{42}, 42), value_type{42});
|
|
|
+ ASSERT_EQ(pool.emplace(entt::entity{1}, 2), value_type{2});
|
|
|
}
|
|
|
|
|
|
TEST(Storage, EmplaceAggregate) {
|
|
|
@@ -602,17 +604,17 @@ TEST(Storage, EmplaceAggregate) {
|
|
|
// aggregate types with no args enter the non-aggregate path
|
|
|
ASSERT_EQ(pool.emplace(entt::entity{3}), test::aggregate{});
|
|
|
// aggregate types with args work despite the lack of support in the standard library
|
|
|
- ASSERT_EQ(pool.emplace(entt::entity{42}, 42), test::aggregate{42});
|
|
|
+ ASSERT_EQ(pool.emplace(entt::entity{1}, 2), test::aggregate{2});
|
|
|
}
|
|
|
|
|
|
TEST(Storage, EmplaceSelfMoveSupport) {
|
|
|
// see #37 - this test shouldn't crash, that's all
|
|
|
entt::storage<std::unordered_set<int>> pool;
|
|
|
- const entt::entity entity{42};
|
|
|
+ const entt::entity entity{1};
|
|
|
|
|
|
ASSERT_EQ(pool.policy(), entt::deletion_policy::swap_and_pop);
|
|
|
|
|
|
- pool.emplace(entity).insert(42); // NOLINT
|
|
|
+ pool.emplace(entity).insert(2);
|
|
|
pool.erase(entity);
|
|
|
|
|
|
ASSERT_FALSE(pool.contains(entity));
|
|
|
@@ -621,11 +623,11 @@ TEST(Storage, EmplaceSelfMoveSupport) {
|
|
|
TEST(Storage, EmplaceSelfMoveSupportInPlaceDelete) {
|
|
|
// see #37 - this test shouldn't crash, that's all
|
|
|
entt::storage<std::unordered_set<char>> pool;
|
|
|
- const entt::entity entity{42};
|
|
|
+ const entt::entity entity{1};
|
|
|
|
|
|
ASSERT_EQ(pool.policy(), entt::deletion_policy::in_place);
|
|
|
|
|
|
- pool.emplace(entity).insert(42); // NOLINT
|
|
|
+ pool.emplace(entity).insert(2);
|
|
|
pool.erase(entity);
|
|
|
|
|
|
ASSERT_FALSE(pool.contains(entity));
|
|
|
@@ -637,19 +639,19 @@ TYPED_TEST(Storage, TryEmplace) {
|
|
|
entt::storage<value_type> pool;
|
|
|
entt::sparse_set &base = pool;
|
|
|
|
|
|
- entt::entity entity[2u]{entt::entity{3}, entt::entity{42}}; // NOLINT
|
|
|
- value_type instance{42}; // NOLINT
|
|
|
+ const std::array entity{entt::entity{1}, entt::entity{3}};
|
|
|
+ value_type instance{4};
|
|
|
|
|
|
ASSERT_NE(base.push(entity[0u], &instance), base.end());
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 1u);
|
|
|
ASSERT_EQ(base.index(entity[0u]), 0u);
|
|
|
ASSERT_EQ(base.value(entity[0u]), &pool.get(entity[0u]));
|
|
|
- ASSERT_EQ(pool.get(entity[0u]), value_type{42});
|
|
|
+ ASSERT_EQ(pool.get(entity[0u]), value_type{4});
|
|
|
|
|
|
base.erase(entity[0u]);
|
|
|
|
|
|
- ASSERT_NE(base.push(std::begin(entity), std::end(entity)), base.end());
|
|
|
+ ASSERT_NE(base.push(entity.begin(), entity.end()), base.end());
|
|
|
|
|
|
if constexpr(traits_type::in_place_delete) {
|
|
|
ASSERT_EQ(pool.size(), 3u);
|
|
|
@@ -664,9 +666,9 @@ TYPED_TEST(Storage, TryEmplace) {
|
|
|
ASSERT_EQ(pool.get(entity[0u]), value_type{});
|
|
|
ASSERT_EQ(pool.get(entity[1u]), value_type{});
|
|
|
|
|
|
- base.erase(std::begin(entity), std::end(entity));
|
|
|
+ base.erase(entity.begin(), entity.end());
|
|
|
|
|
|
- ASSERT_NE(base.push(std::rbegin(entity), std::rend(entity)), base.end());
|
|
|
+ ASSERT_NE(base.push(entity.rbegin(), entity.rend()), base.end());
|
|
|
|
|
|
if constexpr(traits_type::in_place_delete) {
|
|
|
ASSERT_EQ(pool.size(), 5u);
|
|
|
@@ -689,7 +691,7 @@ TEST(Storage, TryEmplaceNonDefaultConstructible) {
|
|
|
entt::storage<value_type> pool;
|
|
|
entt::sparse_set &base = pool;
|
|
|
|
|
|
- entt::entity entity[2u]{entt::entity{3}, entt::entity{42}}; // NOLINT
|
|
|
+ const std::array entity{entt::entity{1}, entt::entity{3}};
|
|
|
|
|
|
ASSERT_EQ(pool.type(), entt::type_id<value_type>());
|
|
|
ASSERT_EQ(pool.type(), base.type());
|
|
|
@@ -704,7 +706,7 @@ TEST(Storage, TryEmplaceNonDefaultConstructible) {
|
|
|
ASSERT_EQ(base.find(entity[0u]), base.end());
|
|
|
ASSERT_TRUE(pool.empty());
|
|
|
|
|
|
- int value = 42; // NOLINT
|
|
|
+ int value = 4;
|
|
|
value_type instance{value, value};
|
|
|
|
|
|
ASSERT_NE(base.push(entity[0u], &instance), base.end());
|
|
|
@@ -717,7 +719,7 @@ TEST(Storage, TryEmplaceNonDefaultConstructible) {
|
|
|
ASSERT_TRUE(pool.empty());
|
|
|
ASSERT_FALSE(pool.contains(entity[0u]));
|
|
|
|
|
|
- ASSERT_EQ(base.push(std::begin(entity), std::end(entity)), base.end());
|
|
|
+ ASSERT_EQ(base.push(entity.begin(), entity.end()), base.end());
|
|
|
|
|
|
ASSERT_FALSE(pool.contains(entity[0u]));
|
|
|
ASSERT_FALSE(pool.contains(entity[1u]));
|
|
|
@@ -733,7 +735,7 @@ TEST(Storage, TryEmplaceNonCopyConstructible) {
|
|
|
entt::storage<value_type> pool;
|
|
|
entt::sparse_set &base = pool;
|
|
|
|
|
|
- entt::entity entity[2u]{entt::entity{3}, entt::entity{42}}; // NOLINT
|
|
|
+ const std::array entity{entt::entity{1}, entt::entity{3}};
|
|
|
|
|
|
ASSERT_EQ(pool.type(), entt::type_id<value_type>());
|
|
|
ASSERT_EQ(pool.type(), base.type());
|
|
|
@@ -748,7 +750,7 @@ TEST(Storage, TryEmplaceNonCopyConstructible) {
|
|
|
ASSERT_NE(base.find(entity[0u]), base.end());
|
|
|
ASSERT_FALSE(pool.empty());
|
|
|
|
|
|
- value_type instance = std::make_unique<int>(3);
|
|
|
+ value_type instance = std::make_unique<int>(4);
|
|
|
|
|
|
ASSERT_EQ(base.push(entity[1u], &instance), base.end());
|
|
|
|
|
|
@@ -760,7 +762,7 @@ TEST(Storage, TryEmplaceNonCopyConstructible) {
|
|
|
ASSERT_TRUE(pool.empty());
|
|
|
ASSERT_FALSE(pool.contains(entity[0u]));
|
|
|
|
|
|
- ASSERT_NE(base.push(std::begin(entity), std::end(entity)), base.end());
|
|
|
+ ASSERT_NE(base.push(entity.begin(), entity.end()), base.end());
|
|
|
|
|
|
ASSERT_TRUE(pool.contains(entity[0u]));
|
|
|
ASSERT_TRUE(pool.contains(entity[1u]));
|
|
|
@@ -773,7 +775,7 @@ TYPED_TEST(Storage, Patch) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- const entt::entity entity{42};
|
|
|
+ const entt::entity entity{2};
|
|
|
|
|
|
auto callback = [](auto &&elem) {
|
|
|
if constexpr(std::is_class_v<std::remove_reference_t<decltype(elem)>>) {
|
|
|
@@ -891,16 +893,16 @@ TYPED_TEST(Storage, CrossErase) {
|
|
|
entt::storage<value_type> pool;
|
|
|
entt::sparse_set set;
|
|
|
|
|
|
- const entt::entity entity[2u]{entt::entity{3}, entt::entity{42}}; // NOLINT
|
|
|
+ const std::array entity{entt::entity{1}, entt::entity{3}};
|
|
|
|
|
|
- pool.emplace(entity[0u], 3);
|
|
|
- pool.emplace(entity[1u], 42); // NOLINT
|
|
|
+ pool.emplace(entity[0u], 1);
|
|
|
+ pool.emplace(entity[1u], 3);
|
|
|
set.push(entity[1u]);
|
|
|
pool.erase(set.begin(), set.end());
|
|
|
|
|
|
ASSERT_TRUE(pool.contains(entity[0u]));
|
|
|
ASSERT_FALSE(pool.contains(entity[1u]));
|
|
|
- ASSERT_EQ(pool.raw()[0u][0u], value_type{3});
|
|
|
+ ASSERT_EQ(pool.raw()[0u][0u], value_type{1});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Remove) {
|
|
|
@@ -908,8 +910,8 @@ TYPED_TEST(Storage, Remove) {
|
|
|
using traits_type = entt::component_traits<value_type>;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- entt::entity entity[3u]{entt::entity{3}, entt::entity{42}, entt::entity{9}}; // NOLINT
|
|
|
- const value_type values[3u]{value_type{0}, value_type{1}, value_type{2}}; // NOLINT
|
|
|
+ const entt::entity entity[3u]{entt::entity{3}, entt::entity{42}, entt::entity{9}}; // NOLINT
|
|
|
+ const value_type values[3u]{value_type{0}, value_type{1}, value_type{2}}; // NOLINT
|
|
|
|
|
|
pool.insert(std::begin(entity), std::end(entity), std::begin(values));
|
|
|
|
|
|
@@ -951,16 +953,16 @@ TYPED_TEST(Storage, CrossRemove) {
|
|
|
entt::storage<value_type> pool;
|
|
|
entt::sparse_set set;
|
|
|
|
|
|
- const entt::entity entity[2u]{entt::entity{3}, entt::entity{42}}; // NOLINT
|
|
|
+ const std::array entity{entt::entity{1}, entt::entity{3}};
|
|
|
|
|
|
- pool.emplace(entity[0u], 3);
|
|
|
- pool.emplace(entity[1u], 42); // NOLINT
|
|
|
+ pool.emplace(entity[0u], 1);
|
|
|
+ pool.emplace(entity[1u], 3);
|
|
|
set.push(entity[1u]);
|
|
|
pool.remove(set.begin(), set.end());
|
|
|
|
|
|
ASSERT_TRUE(pool.contains(entity[0u]));
|
|
|
ASSERT_FALSE(pool.contains(entity[1u]));
|
|
|
- ASSERT_EQ(pool.raw()[0u][0u], value_type{3});
|
|
|
+ ASSERT_EQ(pool.raw()[0u][0u], value_type{1});
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Clear) {
|
|
|
@@ -1004,30 +1006,30 @@ TYPED_TEST(Storage, Compact) {
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 1u);
|
|
|
|
|
|
- pool.emplace(entt::entity{42}, value_type{42}); // NOLINT
|
|
|
+ pool.emplace(entt::entity{4}, value_type{4});
|
|
|
pool.erase(entt::entity{0});
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 1u + traits_type::in_place_delete);
|
|
|
- ASSERT_EQ(pool.index(entt::entity{42}), traits_type::in_place_delete);
|
|
|
- ASSERT_EQ(pool.get(entt::entity{42}), value_type{42});
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{4}), traits_type::in_place_delete);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{4}), value_type{4});
|
|
|
|
|
|
pool.compact();
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 1u);
|
|
|
- ASSERT_EQ(pool.index(entt::entity{42}), 0u);
|
|
|
- ASSERT_EQ(pool.get(entt::entity{42}), value_type{42});
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{4}), 0u);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{4}), value_type{4});
|
|
|
|
|
|
pool.emplace(entt::entity{0}, value_type{0});
|
|
|
pool.compact();
|
|
|
|
|
|
ASSERT_EQ(pool.size(), 2u);
|
|
|
- ASSERT_EQ(pool.index(entt::entity{42}), 0u);
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{4}), 0u);
|
|
|
ASSERT_EQ(pool.index(entt::entity{0}), 1u);
|
|
|
- ASSERT_EQ(pool.get(entt::entity{42}), value_type{42});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{4}), value_type{4});
|
|
|
ASSERT_EQ(pool.get(entt::entity{0}), value_type{0});
|
|
|
|
|
|
pool.erase(entt::entity{0});
|
|
|
- pool.erase(entt::entity{42}); // NOLINT
|
|
|
+ pool.erase(entt::entity{4});
|
|
|
pool.compact();
|
|
|
|
|
|
ASSERT_TRUE(pool.empty());
|
|
|
@@ -1038,23 +1040,23 @@ TYPED_TEST(Storage, SwapElements) {
|
|
|
using traits_type = entt::component_traits<value_type>;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 3);
|
|
|
- pool.emplace(entt::entity{12}, 6); // NOLINT
|
|
|
- pool.emplace(entt::entity{42}, 9); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 1);
|
|
|
+ pool.emplace(entt::entity{2}, 3);
|
|
|
+ pool.emplace(entt::entity{4}, 8);
|
|
|
|
|
|
- pool.erase(entt::entity{12}); // NOLINT
|
|
|
+ pool.erase(entt::entity{2});
|
|
|
|
|
|
- ASSERT_EQ(pool.get(entt::entity{3}), value_type{3});
|
|
|
- ASSERT_EQ(pool.get(entt::entity{42}), value_type{9});
|
|
|
- ASSERT_EQ(pool.index(entt::entity{3}), 0u);
|
|
|
- ASSERT_EQ(pool.index(entt::entity{42}), 1u + traits_type::in_place_delete);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}), value_type{1});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{4}), value_type{8});
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{1}), 0u);
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{4}), 1u + traits_type::in_place_delete);
|
|
|
|
|
|
- pool.swap_elements(entt::entity{3}, entt::entity{42}); // NOLINT
|
|
|
+ pool.swap_elements(entt::entity{1}, entt::entity{4});
|
|
|
|
|
|
- ASSERT_EQ(pool.get(entt::entity{3}), value_type{3});
|
|
|
- ASSERT_EQ(pool.get(entt::entity{42}), value_type{9});
|
|
|
- ASSERT_EQ(pool.index(entt::entity{3}), 1u + traits_type::in_place_delete);
|
|
|
- ASSERT_EQ(pool.index(entt::entity{42}), 0u);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}), value_type{1});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{4}), value_type{8});
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{1}), 1u + traits_type::in_place_delete);
|
|
|
+ ASSERT_EQ(pool.index(entt::entity{4}), 0u);
|
|
|
}
|
|
|
|
|
|
TYPED_TEST(Storage, Iterable) {
|
|
|
@@ -1068,8 +1070,8 @@ TYPED_TEST(Storage, Iterable) {
|
|
|
entt::storage<value_type> pool;
|
|
|
const entt::sparse_set &base = pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{1}, 99); // NOLINT
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
|
|
|
auto iterable = pool.each();
|
|
|
|
|
|
@@ -1087,9 +1089,9 @@ TYPED_TEST(Storage, Iterable) {
|
|
|
ASSERT_EQ(end.base(), base.end());
|
|
|
|
|
|
ASSERT_EQ(std::get<0>(*begin.operator->().operator->()), entt::entity{3});
|
|
|
- ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{42});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{4});
|
|
|
ASSERT_EQ(std::get<0>(*begin), entt::entity{3});
|
|
|
- ASSERT_EQ(std::get<1>(*begin), value_type{42});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin), value_type{4});
|
|
|
|
|
|
ASSERT_EQ(begin++, iterable.begin());
|
|
|
ASSERT_EQ(begin.base(), ++base.begin());
|
|
|
@@ -1099,8 +1101,8 @@ TYPED_TEST(Storage, Iterable) {
|
|
|
for(auto [entity, element]: iterable) {
|
|
|
testing::StaticAssertTypeEq<decltype(entity), entt::entity>();
|
|
|
testing::StaticAssertTypeEq<decltype(element), value_type &>();
|
|
|
- ASSERT_TRUE(entity != entt::entity{1} || element == value_type{99});
|
|
|
- ASSERT_TRUE(entity != entt::entity{3} || element == value_type{42});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{1} || element == value_type{2});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{3} || element == value_type{4});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1115,8 +1117,8 @@ TYPED_TEST(Storage, ConstIterable) {
|
|
|
entt::storage<value_type> pool;
|
|
|
const entt::sparse_set &base = pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{1}, 99); // NOLINT
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
|
|
|
auto iterable = std::as_const(pool).each();
|
|
|
|
|
|
@@ -1134,9 +1136,9 @@ TYPED_TEST(Storage, ConstIterable) {
|
|
|
ASSERT_EQ(end.base(), base.end());
|
|
|
|
|
|
ASSERT_EQ(std::get<0>(*begin.operator->().operator->()), entt::entity{3});
|
|
|
- ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{42});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{4});
|
|
|
ASSERT_EQ(std::get<0>(*begin), entt::entity{3});
|
|
|
- ASSERT_EQ(std::get<1>(*begin), value_type{42});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin), value_type{4});
|
|
|
|
|
|
ASSERT_EQ(begin++, iterable.begin());
|
|
|
ASSERT_EQ(begin.base(), ++base.begin());
|
|
|
@@ -1146,8 +1148,8 @@ TYPED_TEST(Storage, ConstIterable) {
|
|
|
for(auto [entity, element]: iterable) {
|
|
|
testing::StaticAssertTypeEq<decltype(entity), entt::entity>();
|
|
|
testing::StaticAssertTypeEq<decltype(element), const value_type &>();
|
|
|
- ASSERT_TRUE(entity != entt::entity{1} || element == value_type{99});
|
|
|
- ASSERT_TRUE(entity != entt::entity{3} || element == value_type{42});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{1} || element == value_type{2});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{3} || element == value_type{4});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1155,7 +1157,7 @@ TYPED_TEST(Storage, IterableIteratorConversion) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 1);
|
|
|
|
|
|
const typename entt::storage<value_type>::iterable::iterator it = pool.each().begin();
|
|
|
typename entt::storage<value_type>::const_iterable::iterator cit = it;
|
|
|
@@ -1171,7 +1173,7 @@ TYPED_TEST(Storage, IterableAlgorithmCompatibility) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 1);
|
|
|
|
|
|
const auto iterable = pool.each();
|
|
|
const auto it = std::find_if(iterable.begin(), iterable.end(), [](auto args) { return std::get<0>(args) == entt::entity{3}; });
|
|
|
@@ -1190,8 +1192,8 @@ TYPED_TEST(Storage, ReverseIterable) {
|
|
|
entt::storage<value_type> pool;
|
|
|
const entt::sparse_set &base = pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{1}, 99); // NOLINT
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
|
|
|
auto iterable = pool.reach();
|
|
|
|
|
|
@@ -1209,9 +1211,9 @@ TYPED_TEST(Storage, ReverseIterable) {
|
|
|
ASSERT_EQ(end.base(), base.rend());
|
|
|
|
|
|
ASSERT_EQ(std::get<0>(*begin.operator->().operator->()), entt::entity{1});
|
|
|
- ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{99});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{2});
|
|
|
ASSERT_EQ(std::get<0>(*begin), entt::entity{1});
|
|
|
- ASSERT_EQ(std::get<1>(*begin), value_type{99});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin), value_type{2});
|
|
|
|
|
|
ASSERT_EQ(begin++, iterable.begin());
|
|
|
ASSERT_EQ(begin.base(), ++base.rbegin());
|
|
|
@@ -1221,8 +1223,8 @@ TYPED_TEST(Storage, ReverseIterable) {
|
|
|
for(auto [entity, element]: iterable) {
|
|
|
testing::StaticAssertTypeEq<decltype(entity), entt::entity>();
|
|
|
testing::StaticAssertTypeEq<decltype(element), value_type &>();
|
|
|
- ASSERT_TRUE(entity != entt::entity{1} || element == value_type{99});
|
|
|
- ASSERT_TRUE(entity != entt::entity{3} || element == value_type{42});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{1} || element == value_type{2});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{3} || element == value_type{4});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1237,8 +1239,8 @@ TYPED_TEST(Storage, ConstReverseIterable) {
|
|
|
entt::storage<value_type> pool;
|
|
|
const entt::sparse_set &base = pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{1}, 99); // NOLINT
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{1}, 2);
|
|
|
+ pool.emplace(entt::entity{3}, 4);
|
|
|
|
|
|
auto iterable = std::as_const(pool).reach();
|
|
|
|
|
|
@@ -1256,9 +1258,9 @@ TYPED_TEST(Storage, ConstReverseIterable) {
|
|
|
ASSERT_EQ(end.base(), base.rend());
|
|
|
|
|
|
ASSERT_EQ(std::get<0>(*begin.operator->().operator->()), entt::entity{1});
|
|
|
- ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{99});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin.operator->().operator->()), value_type{2});
|
|
|
ASSERT_EQ(std::get<0>(*begin), entt::entity{1});
|
|
|
- ASSERT_EQ(std::get<1>(*begin), value_type{99});
|
|
|
+ ASSERT_EQ(std::get<1>(*begin), value_type{2});
|
|
|
|
|
|
ASSERT_EQ(begin++, iterable.begin());
|
|
|
ASSERT_EQ(begin.base(), ++base.rbegin());
|
|
|
@@ -1268,8 +1270,8 @@ TYPED_TEST(Storage, ConstReverseIterable) {
|
|
|
for(auto [entity, element]: iterable) {
|
|
|
testing::StaticAssertTypeEq<decltype(entity), entt::entity>();
|
|
|
testing::StaticAssertTypeEq<decltype(element), const value_type &>();
|
|
|
- ASSERT_TRUE(entity != entt::entity{1} || element == value_type{99});
|
|
|
- ASSERT_TRUE(entity != entt::entity{3} || element == value_type{42});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{1} || element == value_type{2});
|
|
|
+ ASSERT_TRUE(entity != entt::entity{3} || element == value_type{4});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1277,7 +1279,7 @@ TYPED_TEST(Storage, ReverseIterableIteratorConversion) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 1);
|
|
|
|
|
|
const typename entt::storage<value_type>::reverse_iterable::iterator it = pool.reach().begin();
|
|
|
typename entt::storage<value_type>::const_reverse_iterable::iterator cit = it;
|
|
|
@@ -1293,7 +1295,7 @@ TYPED_TEST(Storage, ReverseIterableAlgorithmCompatibility) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- pool.emplace(entt::entity{3}, 42); // NOLINT
|
|
|
+ pool.emplace(entt::entity{3}, 1);
|
|
|
|
|
|
const auto iterable = pool.reach();
|
|
|
const auto it = std::find_if(iterable.begin(), iterable.end(), [](auto args) { return std::get<0>(args) == entt::entity{3}; });
|
|
|
@@ -1601,7 +1603,7 @@ TYPED_TEST(Storage, CanModifyDuringIteration) {
|
|
|
using traits_type = entt::component_traits<value_type>;
|
|
|
entt::storage<value_type> pool;
|
|
|
|
|
|
- auto *ptr = &pool.emplace(entt::entity{0}, 42); // NOLINT
|
|
|
+ auto *ptr = &pool.emplace(entt::entity{0}, 2);
|
|
|
|
|
|
ASSERT_EQ(pool.capacity(), traits_type::page_size);
|
|
|
|
|
|
@@ -1627,12 +1629,12 @@ TYPED_TEST(Storage, ReferencesGuaranteed) {
|
|
|
|
|
|
for(auto &&elem: pool) {
|
|
|
if(!(elem == value_type{})) {
|
|
|
- elem = value_type{42}; // NOLINT
|
|
|
+ elem = value_type{4};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ASSERT_EQ(pool.get(entt::entity{0}), value_type{0});
|
|
|
- ASSERT_EQ(pool.get(entt::entity{1}), value_type{42});
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}), value_type{4});
|
|
|
|
|
|
auto begin = pool.begin();
|
|
|
|
|
|
@@ -1842,7 +1844,7 @@ TYPED_TEST(Storage, NoUsesAllocatorConstruction) {
|
|
|
using value_type = typename TestFixture::type;
|
|
|
test::tracked_memory_resource memory_resource{};
|
|
|
entt::basic_storage<value_type, entt::entity, std::pmr::polymorphic_allocator<value_type>> pool{&memory_resource};
|
|
|
- const entt::entity entity{42};
|
|
|
+ const entt::entity entity{2};
|
|
|
|
|
|
pool.emplace(entity);
|
|
|
pool.erase(entity);
|
|
|
@@ -1858,7 +1860,7 @@ TEST(Storage, UsesAllocatorConstruction) {
|
|
|
using string_type = typename test::tracked_memory_resource::string_type;
|
|
|
test::tracked_memory_resource memory_resource{};
|
|
|
entt::basic_storage<string_type, entt::entity, std::pmr::polymorphic_allocator<string_type>> pool{&memory_resource};
|
|
|
- const entt::entity entity{42};
|
|
|
+ const entt::entity entity{2};
|
|
|
|
|
|
pool.emplace(entity);
|
|
|
pool.erase(entity);
|