|
|
@@ -21,135 +21,135 @@ struct throwing_component {
|
|
|
};
|
|
|
|
|
|
TEST(Storage, Functionalities) {
|
|
|
- entt::storage<entt::entity, int> set;
|
|
|
+ entt::storage<entt::entity, int> pool;
|
|
|
|
|
|
- set.reserve(42);
|
|
|
+ pool.reserve(42);
|
|
|
|
|
|
- ASSERT_EQ(set.capacity(), 42);
|
|
|
- ASSERT_TRUE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 0u);
|
|
|
- ASSERT_EQ(std::as_const(set).begin(), std::as_const(set).end());
|
|
|
- ASSERT_EQ(set.begin(), set.end());
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{41}));
|
|
|
+ ASSERT_EQ(pool.capacity(), 42);
|
|
|
+ ASSERT_TRUE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 0u);
|
|
|
+ ASSERT_EQ(std::as_const(pool).begin(), std::as_const(pool).end());
|
|
|
+ ASSERT_EQ(pool.begin(), pool.end());
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{41}));
|
|
|
|
|
|
- set.construct(entt::entity{41}, 3);
|
|
|
+ pool.construct(entt::entity{41}, 3);
|
|
|
|
|
|
- ASSERT_FALSE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 1u);
|
|
|
- ASSERT_NE(std::as_const(set).begin(), std::as_const(set).end());
|
|
|
- ASSERT_NE(set.begin(), set.end());
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{41}));
|
|
|
- ASSERT_EQ(set.get(entt::entity{41}), 3);
|
|
|
- ASSERT_EQ(*set.try_get(entt::entity{41}), 3);
|
|
|
- ASSERT_EQ(set.try_get(entt::entity{99}), nullptr);
|
|
|
+ ASSERT_FALSE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 1u);
|
|
|
+ ASSERT_NE(std::as_const(pool).begin(), std::as_const(pool).end());
|
|
|
+ ASSERT_NE(pool.begin(), pool.end());
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{41}));
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{41}), 3);
|
|
|
+ ASSERT_EQ(*pool.try_get(entt::entity{41}), 3);
|
|
|
+ ASSERT_EQ(pool.try_get(entt::entity{99}), nullptr);
|
|
|
|
|
|
- set.destroy(entt::entity{41});
|
|
|
+ pool.destroy(entt::entity{41});
|
|
|
|
|
|
- ASSERT_TRUE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 0u);
|
|
|
- ASSERT_EQ(std::as_const(set).begin(), std::as_const(set).end());
|
|
|
- ASSERT_EQ(set.begin(), set.end());
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{41}));
|
|
|
+ ASSERT_TRUE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 0u);
|
|
|
+ ASSERT_EQ(std::as_const(pool).begin(), std::as_const(pool).end());
|
|
|
+ ASSERT_EQ(pool.begin(), pool.end());
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{41}));
|
|
|
|
|
|
- set.construct(entt::entity{41}, 12);
|
|
|
+ pool.construct(entt::entity{41}, 12);
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{41}), 12);
|
|
|
- ASSERT_EQ(*set.try_get(entt::entity{41}), 12);
|
|
|
- ASSERT_EQ(set.try_get(entt::entity{99}), nullptr);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{41}), 12);
|
|
|
+ ASSERT_EQ(*pool.try_get(entt::entity{41}), 12);
|
|
|
+ ASSERT_EQ(pool.try_get(entt::entity{99}), nullptr);
|
|
|
|
|
|
- set.reset();
|
|
|
+ pool.reset();
|
|
|
|
|
|
- ASSERT_TRUE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 0u);
|
|
|
- ASSERT_EQ(std::as_const(set).begin(), std::as_const(set).end());
|
|
|
- ASSERT_EQ(set.begin(), set.end());
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{41}));
|
|
|
+ ASSERT_TRUE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 0u);
|
|
|
+ ASSERT_EQ(std::as_const(pool).begin(), std::as_const(pool).end());
|
|
|
+ ASSERT_EQ(pool.begin(), pool.end());
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{41}));
|
|
|
|
|
|
- ASSERT_EQ(set.capacity(), 42);
|
|
|
+ ASSERT_EQ(pool.capacity(), 42);
|
|
|
|
|
|
- set.shrink_to_fit();
|
|
|
+ pool.shrink_to_fit();
|
|
|
|
|
|
- ASSERT_EQ(set.capacity(), 0);
|
|
|
+ ASSERT_EQ(pool.capacity(), 0);
|
|
|
|
|
|
- (void)entt::storage<entt::entity, int>{std::move(set)};
|
|
|
+ (void)entt::storage<entt::entity, int>{std::move(pool)};
|
|
|
entt::storage<entt::entity, int> other;
|
|
|
- other = std::move(set);
|
|
|
+ other = std::move(pool);
|
|
|
}
|
|
|
|
|
|
TEST(Storage, EmptyType) {
|
|
|
- entt::storage<entt::entity, empty_type> set;
|
|
|
+ entt::storage<entt::entity, empty_type> pool;
|
|
|
|
|
|
- set.construct(entt::entity{42});
|
|
|
- set.construct(entt::entity{99});
|
|
|
+ pool.construct(entt::entity{42});
|
|
|
+ pool.construct(entt::entity{99});
|
|
|
|
|
|
- ASSERT_TRUE(set.has(entt::entity{42}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{99}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{42}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{99}));
|
|
|
|
|
|
- auto &&component = set.get(entt::entity{42});
|
|
|
+ auto &&component = pool.get(entt::entity{42});
|
|
|
|
|
|
ASSERT_TRUE((std::is_same_v<decltype(component), empty_type &&>));
|
|
|
}
|
|
|
|
|
|
TEST(Storage, BatchAdd) {
|
|
|
- entt::storage<entt::entity, int> set;
|
|
|
+ entt::storage<entt::entity, int> pool;
|
|
|
entt::storage<entt::entity, int>::entity_type entities[2];
|
|
|
|
|
|
entities[0] = entt::entity{3};
|
|
|
entities[1] = entt::entity{42};
|
|
|
|
|
|
- set.reserve(4);
|
|
|
- set.construct(entt::entity{12}, 21);
|
|
|
- auto *component = set.batch(std::begin(entities), std::end(entities));
|
|
|
- set.construct(entt::entity{24}, 42);
|
|
|
-
|
|
|
- ASSERT_TRUE(set.has(entities[0]));
|
|
|
- ASSERT_TRUE(set.has(entities[1]));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{9}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{12}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{24}));
|
|
|
-
|
|
|
- ASSERT_FALSE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 4u);
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}), 21);
|
|
|
- ASSERT_EQ(set.get(entities[0]), 0);
|
|
|
- ASSERT_EQ(set.get(entities[1]), 0);
|
|
|
- ASSERT_EQ(set.get(entt::entity{24}), 42);
|
|
|
+ pool.reserve(4);
|
|
|
+ pool.construct(entt::entity{12}, 21);
|
|
|
+ auto *component = pool.batch(std::begin(entities), std::end(entities));
|
|
|
+ pool.construct(entt::entity{24}, 42);
|
|
|
+
|
|
|
+ ASSERT_TRUE(pool.has(entities[0]));
|
|
|
+ ASSERT_TRUE(pool.has(entities[1]));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{9}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{12}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{24}));
|
|
|
+
|
|
|
+ ASSERT_FALSE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 4u);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}), 21);
|
|
|
+ ASSERT_EQ(pool.get(entities[0]), 0);
|
|
|
+ ASSERT_EQ(pool.get(entities[1]), 0);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{24}), 42);
|
|
|
|
|
|
component[0] = 1;
|
|
|
component[1] = 2;
|
|
|
|
|
|
- ASSERT_EQ(set.get(entities[0]), 1);
|
|
|
- ASSERT_EQ(set.get(entities[1]), 2);
|
|
|
+ ASSERT_EQ(pool.get(entities[0]), 1);
|
|
|
+ ASSERT_EQ(pool.get(entities[1]), 2);
|
|
|
}
|
|
|
|
|
|
TEST(Storage, BatchAddEmptyType) {
|
|
|
- entt::storage<entt::entity, empty_type> set;
|
|
|
+ entt::storage<entt::entity, empty_type> pool;
|
|
|
entt::storage<entt::entity, empty_type>::entity_type entities[2];
|
|
|
|
|
|
entities[0] = entt::entity{3};
|
|
|
entities[1] = entt::entity{42};
|
|
|
|
|
|
- set.reserve(4);
|
|
|
- set.construct(entt::entity{12});
|
|
|
- set.batch(std::begin(entities), std::end(entities));
|
|
|
- set.construct(entt::entity{24});
|
|
|
+ pool.reserve(4);
|
|
|
+ pool.construct(entt::entity{12});
|
|
|
+ pool.batch(std::begin(entities), std::end(entities));
|
|
|
+ pool.construct(entt::entity{24});
|
|
|
|
|
|
- ASSERT_TRUE(set.has(entities[0]));
|
|
|
- ASSERT_TRUE(set.has(entities[1]));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{0}));
|
|
|
- ASSERT_FALSE(set.has(entt::entity{9}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{12}));
|
|
|
- ASSERT_TRUE(set.has(entt::entity{24}));
|
|
|
+ ASSERT_TRUE(pool.has(entities[0]));
|
|
|
+ ASSERT_TRUE(pool.has(entities[1]));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{0}));
|
|
|
+ ASSERT_FALSE(pool.has(entt::entity{9}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{12}));
|
|
|
+ ASSERT_TRUE(pool.has(entt::entity{24}));
|
|
|
|
|
|
- ASSERT_FALSE(set.empty());
|
|
|
- ASSERT_EQ(set.size(), 4u);
|
|
|
+ ASSERT_FALSE(pool.empty());
|
|
|
+ ASSERT_EQ(pool.size(), 4u);
|
|
|
|
|
|
- auto &&component = set.get(entities[0]);
|
|
|
+ auto &&component = pool.get(entities[0]);
|
|
|
|
|
|
ASSERT_TRUE((std::is_same_v<decltype(component), empty_type &&>));
|
|
|
}
|
|
|
@@ -162,184 +162,184 @@ TEST(Storage, AggregatesMustWork) {
|
|
|
|
|
|
TEST(Storage, TypesFromStandardTemplateLibraryMustWork) {
|
|
|
// see #37 - this test shouldn't crash, that's all
|
|
|
- entt::storage<entt::entity, std::unordered_set<int>> set;
|
|
|
- set.construct(entt::entity{0}).insert(42);
|
|
|
- set.destroy(entt::entity{0});
|
|
|
+ entt::storage<entt::entity, std::unordered_set<int>> pool;
|
|
|
+ pool.construct(entt::entity{0}).insert(42);
|
|
|
+ pool.destroy(entt::entity{0});
|
|
|
}
|
|
|
|
|
|
TEST(Storage, Iterator) {
|
|
|
using iterator_type = typename entt::storage<entt::entity, boxed_int>::iterator_type;
|
|
|
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
- set.construct(entt::entity{3}, 42);
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
+ pool.construct(entt::entity{3}, 42);
|
|
|
|
|
|
- iterator_type end{set.begin()};
|
|
|
+ iterator_type end{pool.begin()};
|
|
|
iterator_type begin{};
|
|
|
- begin = set.end();
|
|
|
+ begin = pool.end();
|
|
|
std::swap(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(begin, set.begin());
|
|
|
- ASSERT_EQ(end, set.end());
|
|
|
+ ASSERT_EQ(begin, pool.begin());
|
|
|
+ ASSERT_EQ(end, pool.end());
|
|
|
ASSERT_NE(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(begin++, set.begin());
|
|
|
- ASSERT_EQ(begin--, set.end());
|
|
|
+ ASSERT_EQ(begin++, pool.begin());
|
|
|
+ ASSERT_EQ(begin--, pool.end());
|
|
|
|
|
|
- ASSERT_EQ(begin+1, set.end());
|
|
|
- ASSERT_EQ(end-1, set.begin());
|
|
|
+ ASSERT_EQ(begin+1, pool.end());
|
|
|
+ ASSERT_EQ(end-1, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(++begin, set.end());
|
|
|
- ASSERT_EQ(--begin, set.begin());
|
|
|
+ ASSERT_EQ(++begin, pool.end());
|
|
|
+ ASSERT_EQ(--begin, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin += 1, set.end());
|
|
|
- ASSERT_EQ(begin -= 1, set.begin());
|
|
|
+ ASSERT_EQ(begin += 1, pool.end());
|
|
|
+ ASSERT_EQ(begin -= 1, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin + (end - begin), set.end());
|
|
|
- ASSERT_EQ(begin - (begin - end), set.end());
|
|
|
+ ASSERT_EQ(begin + (end - begin), pool.end());
|
|
|
+ ASSERT_EQ(begin - (begin - end), pool.end());
|
|
|
|
|
|
- ASSERT_EQ(end - (end - begin), set.begin());
|
|
|
- ASSERT_EQ(end + (begin - end), set.begin());
|
|
|
+ ASSERT_EQ(end - (end - begin), pool.begin());
|
|
|
+ ASSERT_EQ(end + (begin - end), pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin[0].value, set.begin()->value);
|
|
|
+ ASSERT_EQ(begin[0].value, pool.begin()->value);
|
|
|
|
|
|
ASSERT_LT(begin, end);
|
|
|
- ASSERT_LE(begin, set.begin());
|
|
|
+ ASSERT_LE(begin, pool.begin());
|
|
|
|
|
|
ASSERT_GT(end, begin);
|
|
|
- ASSERT_GE(end, set.end());
|
|
|
+ ASSERT_GE(end, pool.end());
|
|
|
}
|
|
|
|
|
|
TEST(Storage, ConstIterator) {
|
|
|
using iterator_type = typename entt::storage<entt::entity, boxed_int>::const_iterator_type;
|
|
|
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
- set.construct(entt::entity{3}, 42);
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
+ pool.construct(entt::entity{3}, 42);
|
|
|
|
|
|
- iterator_type cend{set.cbegin()};
|
|
|
+ iterator_type cend{pool.cbegin()};
|
|
|
iterator_type cbegin{};
|
|
|
- cbegin = set.cend();
|
|
|
+ cbegin = pool.cend();
|
|
|
std::swap(cbegin, cend);
|
|
|
|
|
|
- ASSERT_EQ(cbegin, set.cbegin());
|
|
|
- ASSERT_EQ(cend, set.cend());
|
|
|
+ ASSERT_EQ(cbegin, pool.cbegin());
|
|
|
+ ASSERT_EQ(cend, pool.cend());
|
|
|
ASSERT_NE(cbegin, cend);
|
|
|
|
|
|
- ASSERT_EQ(cbegin++, set.cbegin());
|
|
|
- ASSERT_EQ(cbegin--, set.cend());
|
|
|
+ ASSERT_EQ(cbegin++, pool.cbegin());
|
|
|
+ ASSERT_EQ(cbegin--, pool.cend());
|
|
|
|
|
|
- ASSERT_EQ(cbegin+1, set.cend());
|
|
|
- ASSERT_EQ(cend-1, set.cbegin());
|
|
|
+ ASSERT_EQ(cbegin+1, pool.cend());
|
|
|
+ ASSERT_EQ(cend-1, pool.cbegin());
|
|
|
|
|
|
- ASSERT_EQ(++cbegin, set.cend());
|
|
|
- ASSERT_EQ(--cbegin, set.cbegin());
|
|
|
+ ASSERT_EQ(++cbegin, pool.cend());
|
|
|
+ ASSERT_EQ(--cbegin, pool.cbegin());
|
|
|
|
|
|
- ASSERT_EQ(cbegin += 1, set.cend());
|
|
|
- ASSERT_EQ(cbegin -= 1, set.cbegin());
|
|
|
+ ASSERT_EQ(cbegin += 1, pool.cend());
|
|
|
+ ASSERT_EQ(cbegin -= 1, pool.cbegin());
|
|
|
|
|
|
- ASSERT_EQ(cbegin + (cend - cbegin), set.cend());
|
|
|
- ASSERT_EQ(cbegin - (cbegin - cend), set.cend());
|
|
|
+ ASSERT_EQ(cbegin + (cend - cbegin), pool.cend());
|
|
|
+ ASSERT_EQ(cbegin - (cbegin - cend), pool.cend());
|
|
|
|
|
|
- ASSERT_EQ(cend - (cend - cbegin), set.cbegin());
|
|
|
- ASSERT_EQ(cend + (cbegin - cend), set.cbegin());
|
|
|
+ ASSERT_EQ(cend - (cend - cbegin), pool.cbegin());
|
|
|
+ ASSERT_EQ(cend + (cbegin - cend), pool.cbegin());
|
|
|
|
|
|
- ASSERT_EQ(cbegin[0].value, set.cbegin()->value);
|
|
|
+ ASSERT_EQ(cbegin[0].value, pool.cbegin()->value);
|
|
|
|
|
|
ASSERT_LT(cbegin, cend);
|
|
|
- ASSERT_LE(cbegin, set.cbegin());
|
|
|
+ ASSERT_LE(cbegin, pool.cbegin());
|
|
|
|
|
|
ASSERT_GT(cend, cbegin);
|
|
|
- ASSERT_GE(cend, set.cend());
|
|
|
+ ASSERT_GE(cend, pool.cend());
|
|
|
}
|
|
|
|
|
|
TEST(Storage, IteratorEmptyType) {
|
|
|
using iterator_type = typename entt::storage<entt::entity, empty_type>::iterator_type;
|
|
|
- entt::storage<entt::entity, empty_type> set;
|
|
|
- set.construct(entt::entity{3});
|
|
|
+ entt::storage<entt::entity, empty_type> pool;
|
|
|
+ pool.construct(entt::entity{3});
|
|
|
|
|
|
- iterator_type end{set.begin()};
|
|
|
+ iterator_type end{pool.begin()};
|
|
|
iterator_type begin{};
|
|
|
- begin = set.end();
|
|
|
+ begin = pool.end();
|
|
|
std::swap(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(begin, set.begin());
|
|
|
- ASSERT_EQ(end, set.end());
|
|
|
+ ASSERT_EQ(begin, pool.begin());
|
|
|
+ ASSERT_EQ(end, pool.end());
|
|
|
ASSERT_NE(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(begin++, set.begin());
|
|
|
- ASSERT_EQ(begin--, set.end());
|
|
|
+ ASSERT_EQ(begin++, pool.begin());
|
|
|
+ ASSERT_EQ(begin--, pool.end());
|
|
|
|
|
|
- ASSERT_EQ(begin+1, set.end());
|
|
|
- ASSERT_EQ(end-1, set.begin());
|
|
|
+ ASSERT_EQ(begin+1, pool.end());
|
|
|
+ ASSERT_EQ(end-1, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(++begin, set.end());
|
|
|
- ASSERT_EQ(--begin, set.begin());
|
|
|
+ ASSERT_EQ(++begin, pool.end());
|
|
|
+ ASSERT_EQ(--begin, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin += 1, set.end());
|
|
|
- ASSERT_EQ(begin -= 1, set.begin());
|
|
|
+ ASSERT_EQ(begin += 1, pool.end());
|
|
|
+ ASSERT_EQ(begin -= 1, pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin + (end - begin), set.end());
|
|
|
- ASSERT_EQ(begin - (begin - end), set.end());
|
|
|
+ ASSERT_EQ(begin + (end - begin), pool.end());
|
|
|
+ ASSERT_EQ(begin - (begin - end), pool.end());
|
|
|
|
|
|
- ASSERT_EQ(end - (end - begin), set.begin());
|
|
|
- ASSERT_EQ(end + (begin - end), set.begin());
|
|
|
+ ASSERT_EQ(end - (end - begin), pool.begin());
|
|
|
+ ASSERT_EQ(end + (begin - end), pool.begin());
|
|
|
|
|
|
- ASSERT_EQ(set.begin().operator->(), nullptr);
|
|
|
+ ASSERT_EQ(pool.begin().operator->(), nullptr);
|
|
|
|
|
|
ASSERT_LT(begin, end);
|
|
|
- ASSERT_LE(begin, set.begin());
|
|
|
+ ASSERT_LE(begin, pool.begin());
|
|
|
|
|
|
ASSERT_GT(end, begin);
|
|
|
- ASSERT_GE(end, set.end());
|
|
|
+ ASSERT_GE(end, pool.end());
|
|
|
|
|
|
- set.construct(entt::entity{33});
|
|
|
+ pool.construct(entt::entity{33});
|
|
|
auto &&component = *begin;
|
|
|
|
|
|
ASSERT_TRUE((std::is_same_v<decltype(component), empty_type &&>));
|
|
|
}
|
|
|
|
|
|
TEST(Storage, Raw) {
|
|
|
- entt::storage<entt::entity, int> set;
|
|
|
+ entt::storage<entt::entity, int> pool;
|
|
|
|
|
|
- set.construct(entt::entity{3}, 3);
|
|
|
- set.construct(entt::entity{12}, 6);
|
|
|
- set.construct(entt::entity{42}, 9);
|
|
|
+ pool.construct(entt::entity{3}, 3);
|
|
|
+ pool.construct(entt::entity{12}, 6);
|
|
|
+ pool.construct(entt::entity{42}, 9);
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}), 3);
|
|
|
- ASSERT_EQ(std::as_const(set).get(entt::entity{12}), 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}), 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}), 3);
|
|
|
+ ASSERT_EQ(std::as_const(pool).get(entt::entity{12}), 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}), 9);
|
|
|
|
|
|
- ASSERT_EQ(*(set.raw() + 0u), 3);
|
|
|
- ASSERT_EQ(*(std::as_const(set).raw() + 1u), 6);
|
|
|
- ASSERT_EQ(*(set.raw() + 2u), 9);
|
|
|
+ ASSERT_EQ(*(pool.raw() + 0u), 3);
|
|
|
+ ASSERT_EQ(*(std::as_const(pool).raw() + 1u), 6);
|
|
|
+ ASSERT_EQ(*(pool.raw() + 2u), 9);
|
|
|
}
|
|
|
|
|
|
TEST(Storage, SortOrdered) {
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
|
|
|
- set.construct(entt::entity{12}, boxed_int{12});
|
|
|
- set.construct(entt::entity{42}, boxed_int{9});
|
|
|
- set.construct(entt::entity{7}, boxed_int{6});
|
|
|
- set.construct(entt::entity{3}, boxed_int{3});
|
|
|
- set.construct(entt::entity{9}, boxed_int{1});
|
|
|
+ pool.construct(entt::entity{12}, boxed_int{12});
|
|
|
+ pool.construct(entt::entity{42}, boxed_int{9});
|
|
|
+ pool.construct(entt::entity{7}, boxed_int{6});
|
|
|
+ pool.construct(entt::entity{3}, boxed_int{3});
|
|
|
+ pool.construct(entt::entity{9}, boxed_int{1});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 12);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 1);
|
|
|
|
|
|
- set.sort(set.begin(), set.end(), [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(pool.begin(), pool.end(), [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ((set.raw() + 0u)->value, 12);
|
|
|
- ASSERT_EQ((set.raw() + 1u)->value, 9);
|
|
|
- ASSERT_EQ((set.raw() + 2u)->value, 6);
|
|
|
- ASSERT_EQ((set.raw() + 3u)->value, 3);
|
|
|
- ASSERT_EQ((set.raw() + 4u)->value, 1);
|
|
|
+ ASSERT_EQ((pool.raw() + 0u)->value, 12);
|
|
|
+ ASSERT_EQ((pool.raw() + 1u)->value, 9);
|
|
|
+ ASSERT_EQ((pool.raw() + 2u)->value, 6);
|
|
|
+ ASSERT_EQ((pool.raw() + 3u)->value, 3);
|
|
|
+ ASSERT_EQ((pool.raw() + 4u)->value, 1);
|
|
|
|
|
|
- auto begin = set.begin();
|
|
|
- auto end = set.end();
|
|
|
+ auto begin = pool.begin();
|
|
|
+ auto end = pool.end();
|
|
|
|
|
|
ASSERT_EQ((begin++)->value, 1);
|
|
|
ASSERT_EQ((begin++)->value, 3);
|
|
|
@@ -350,32 +350,32 @@ TEST(Storage, SortOrdered) {
|
|
|
}
|
|
|
|
|
|
TEST(Storage, SortReverse) {
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
-
|
|
|
- set.construct(entt::entity{12}, boxed_int{1});
|
|
|
- set.construct(entt::entity{42}, boxed_int{3});
|
|
|
- set.construct(entt::entity{7}, boxed_int{6});
|
|
|
- set.construct(entt::entity{3}, boxed_int{9});
|
|
|
- set.construct(entt::entity{9}, boxed_int{12});
|
|
|
-
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
-
|
|
|
- set.sort(set.begin(), set.end(), [&set](entt::entity lhs, entt::entity rhs) {
|
|
|
- return set.get(lhs).value < set.get(rhs).value;
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
+
|
|
|
+ pool.construct(entt::entity{12}, boxed_int{1});
|
|
|
+ pool.construct(entt::entity{42}, boxed_int{3});
|
|
|
+ pool.construct(entt::entity{7}, boxed_int{6});
|
|
|
+ pool.construct(entt::entity{3}, boxed_int{9});
|
|
|
+ pool.construct(entt::entity{9}, boxed_int{12});
|
|
|
+
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
+
|
|
|
+ pool.sort(pool.begin(), pool.end(), [&pool](entt::entity lhs, entt::entity rhs) {
|
|
|
+ return pool.get(lhs).value < pool.get(rhs).value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ((set.raw() + 0u)->value, 12);
|
|
|
- ASSERT_EQ((set.raw() + 1u)->value, 9);
|
|
|
- ASSERT_EQ((set.raw() + 2u)->value, 6);
|
|
|
- ASSERT_EQ((set.raw() + 3u)->value, 3);
|
|
|
- ASSERT_EQ((set.raw() + 4u)->value, 1);
|
|
|
+ ASSERT_EQ((pool.raw() + 0u)->value, 12);
|
|
|
+ ASSERT_EQ((pool.raw() + 1u)->value, 9);
|
|
|
+ ASSERT_EQ((pool.raw() + 2u)->value, 6);
|
|
|
+ ASSERT_EQ((pool.raw() + 3u)->value, 3);
|
|
|
+ ASSERT_EQ((pool.raw() + 4u)->value, 1);
|
|
|
|
|
|
- auto begin = set.begin();
|
|
|
- auto end = set.end();
|
|
|
+ auto begin = pool.begin();
|
|
|
+ auto end = pool.end();
|
|
|
|
|
|
ASSERT_EQ((begin++)->value, 1);
|
|
|
ASSERT_EQ((begin++)->value, 3);
|
|
|
@@ -386,32 +386,32 @@ TEST(Storage, SortReverse) {
|
|
|
}
|
|
|
|
|
|
TEST(Storage, SortUnordered) {
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
|
|
|
- set.construct(entt::entity{12}, boxed_int{6});
|
|
|
- set.construct(entt::entity{42}, boxed_int{3});
|
|
|
- set.construct(entt::entity{7}, boxed_int{1});
|
|
|
- set.construct(entt::entity{3}, boxed_int{9});
|
|
|
- set.construct(entt::entity{9}, boxed_int{12});
|
|
|
+ pool.construct(entt::entity{12}, boxed_int{6});
|
|
|
+ pool.construct(entt::entity{42}, boxed_int{3});
|
|
|
+ pool.construct(entt::entity{7}, boxed_int{1});
|
|
|
+ pool.construct(entt::entity{3}, boxed_int{9});
|
|
|
+ pool.construct(entt::entity{9}, boxed_int{12});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
|
|
|
- set.sort(set.begin(), set.end(), [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(pool.begin(), pool.end(), [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ((set.raw() + 0u)->value, 12);
|
|
|
- ASSERT_EQ((set.raw() + 1u)->value, 9);
|
|
|
- ASSERT_EQ((set.raw() + 2u)->value, 6);
|
|
|
- ASSERT_EQ((set.raw() + 3u)->value, 3);
|
|
|
- ASSERT_EQ((set.raw() + 4u)->value, 1);
|
|
|
+ ASSERT_EQ((pool.raw() + 0u)->value, 12);
|
|
|
+ ASSERT_EQ((pool.raw() + 1u)->value, 9);
|
|
|
+ ASSERT_EQ((pool.raw() + 2u)->value, 6);
|
|
|
+ ASSERT_EQ((pool.raw() + 3u)->value, 3);
|
|
|
+ ASSERT_EQ((pool.raw() + 4u)->value, 1);
|
|
|
|
|
|
- auto begin = set.begin();
|
|
|
- auto end = set.end();
|
|
|
+ auto begin = pool.begin();
|
|
|
+ auto end = pool.end();
|
|
|
|
|
|
ASSERT_EQ((begin++)->value, 1);
|
|
|
ASSERT_EQ((begin++)->value, 3);
|
|
|
@@ -422,62 +422,62 @@ TEST(Storage, SortUnordered) {
|
|
|
}
|
|
|
|
|
|
TEST(Storage, SortRange) {
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
|
|
|
- set.construct(entt::entity{12}, boxed_int{6});
|
|
|
- set.construct(entt::entity{42}, boxed_int{3});
|
|
|
- set.construct(entt::entity{7}, boxed_int{1});
|
|
|
- set.construct(entt::entity{3}, boxed_int{9});
|
|
|
- set.construct(entt::entity{9}, boxed_int{12});
|
|
|
+ pool.construct(entt::entity{12}, boxed_int{6});
|
|
|
+ pool.construct(entt::entity{42}, boxed_int{3});
|
|
|
+ pool.construct(entt::entity{7}, boxed_int{1});
|
|
|
+ pool.construct(entt::entity{3}, boxed_int{9});
|
|
|
+ pool.construct(entt::entity{9}, boxed_int{12});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
|
|
|
- set.sort(set.end(), set.end(), [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(pool.end(), pool.end(), [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
|
|
|
- set.sort(set.begin(), set.begin(), [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(pool.begin(), pool.begin(), [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
|
|
|
- set.sort(set.begin()+2, set.begin()+3, [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(pool.begin()+2, pool.begin()+3, [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{12}).value, 6);
|
|
|
- ASSERT_EQ(set.get(entt::entity{42}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{7}).value, 1);
|
|
|
- ASSERT_EQ(set.get(entt::entity{3}).value, 9);
|
|
|
- ASSERT_EQ(set.get(entt::entity{9}).value, 12);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{12}).value, 6);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{42}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{7}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{3}).value, 9);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{9}).value, 12);
|
|
|
|
|
|
- set.sort(++set.begin(), --set.end(), [](auto lhs, auto rhs) {
|
|
|
+ pool.sort(++pool.begin(), --pool.end(), [](auto lhs, auto rhs) {
|
|
|
return lhs.value < rhs.value;
|
|
|
});
|
|
|
|
|
|
- ASSERT_EQ((set.raw() + 0u)->value, 6);
|
|
|
- ASSERT_EQ((set.raw() + 1u)->value, 9);
|
|
|
- ASSERT_EQ((set.raw() + 2u)->value, 3);
|
|
|
- ASSERT_EQ((set.raw() + 3u)->value, 1);
|
|
|
- ASSERT_EQ((set.raw() + 4u)->value, 12);
|
|
|
+ ASSERT_EQ((pool.raw() + 0u)->value, 6);
|
|
|
+ ASSERT_EQ((pool.raw() + 1u)->value, 9);
|
|
|
+ ASSERT_EQ((pool.raw() + 2u)->value, 3);
|
|
|
+ ASSERT_EQ((pool.raw() + 3u)->value, 1);
|
|
|
+ ASSERT_EQ((pool.raw() + 4u)->value, 12);
|
|
|
|
|
|
- auto begin = set.begin();
|
|
|
- auto end = set.end();
|
|
|
+ auto begin = pool.begin();
|
|
|
+ auto end = pool.end();
|
|
|
|
|
|
ASSERT_EQ((begin++)->value, 12);
|
|
|
ASSERT_EQ((begin++)->value, 1);
|
|
|
@@ -703,15 +703,15 @@ TEST(Storage, RespectOverlapEmptyType) {
|
|
|
}
|
|
|
|
|
|
TEST(Storage, CanModifyDuringIteration) {
|
|
|
- entt::storage<entt::entity, int> set;
|
|
|
- set.construct(entt::entity{0}, 42);
|
|
|
+ entt::storage<entt::entity, int> pool;
|
|
|
+ pool.construct(entt::entity{0}, 42);
|
|
|
|
|
|
- ASSERT_EQ(set.capacity(), (entt::storage<entt::entity, int>::size_type{1}));
|
|
|
+ ASSERT_EQ(pool.capacity(), (entt::storage<entt::entity, int>::size_type{1}));
|
|
|
|
|
|
- const auto it = set.cbegin();
|
|
|
- set.reserve(entt::storage<entt::entity, int>::size_type{2});
|
|
|
+ const auto it = pool.cbegin();
|
|
|
+ pool.reserve(entt::storage<entt::entity, int>::size_type{2});
|
|
|
|
|
|
- ASSERT_EQ(set.capacity(), (entt::storage<entt::entity, int>::size_type{2}));
|
|
|
+ ASSERT_EQ(pool.capacity(), (entt::storage<entt::entity, int>::size_type{2}));
|
|
|
|
|
|
// this should crash with asan enabled if we break the constraint
|
|
|
const auto entity = *it;
|
|
|
@@ -719,46 +719,46 @@ TEST(Storage, CanModifyDuringIteration) {
|
|
|
}
|
|
|
|
|
|
TEST(Storage, ReferencesGuaranteed) {
|
|
|
- entt::storage<entt::entity, boxed_int> set;
|
|
|
+ entt::storage<entt::entity, boxed_int> pool;
|
|
|
|
|
|
- set.construct(entt::entity{0}, 0);
|
|
|
- set.construct(entt::entity{1}, 1);
|
|
|
+ pool.construct(entt::entity{0}, 0);
|
|
|
+ pool.construct(entt::entity{1}, 1);
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{0}).value, 0);
|
|
|
- ASSERT_EQ(set.get(entt::entity{1}).value, 1);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{0}).value, 0);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}).value, 1);
|
|
|
|
|
|
- for(auto &&type: set) {
|
|
|
+ for(auto &&type: pool) {
|
|
|
if(type.value) {
|
|
|
type.value = 42;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{0}).value, 0);
|
|
|
- ASSERT_EQ(set.get(entt::entity{1}).value, 42);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{0}).value, 0);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}).value, 42);
|
|
|
|
|
|
- auto begin = set.begin();
|
|
|
+ auto begin = pool.begin();
|
|
|
|
|
|
- while(begin != set.end()) {
|
|
|
+ while(begin != pool.end()) {
|
|
|
(begin++)->value = 3;
|
|
|
}
|
|
|
|
|
|
- ASSERT_EQ(set.get(entt::entity{0}).value, 3);
|
|
|
- ASSERT_EQ(set.get(entt::entity{1}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{0}).value, 3);
|
|
|
+ ASSERT_EQ(pool.get(entt::entity{1}).value, 3);
|
|
|
}
|
|
|
|
|
|
TEST(Storage, MoveOnlyComponent) {
|
|
|
// the purpose is to ensure that move only components are always accepted
|
|
|
- entt::storage<entt::entity, std::unique_ptr<int>> set;
|
|
|
- (void)set;
|
|
|
+ entt::storage<entt::entity, std::unique_ptr<int>> pool;
|
|
|
+ (void)pool;
|
|
|
}
|
|
|
|
|
|
-TEST(Storage, ConstructorExceptionDoesNotAddToSet) {
|
|
|
- entt::storage<entt::entity, throwing_component> set;
|
|
|
+TEST(Storage, ConstructorExceptionDoesNotAddToStorage) {
|
|
|
+ entt::storage<entt::entity, throwing_component> pool;
|
|
|
|
|
|
try {
|
|
|
- set.construct(entt::entity{0});
|
|
|
+ pool.construct(entt::entity{0});
|
|
|
FAIL() << "Expected constructor_exception to be thrown";
|
|
|
} catch (const throwing_component::constructor_exception &) {
|
|
|
- ASSERT_TRUE(set.empty());
|
|
|
+ ASSERT_TRUE(pool.empty());
|
|
|
}
|
|
|
}
|