|
|
@@ -2098,7 +2098,7 @@ TEST(Registry, Storage) {
|
|
|
entt::registry registry;
|
|
|
const auto entity = registry.create();
|
|
|
|
|
|
- auto &storage = registry.storage<int>("int"_hs);
|
|
|
+ auto &storage = registry.storage<int>("other"_hs);
|
|
|
storage.emplace(entity);
|
|
|
|
|
|
for(auto [id, pool]: registry.storage()) {
|
|
|
@@ -2107,8 +2107,18 @@ TEST(Registry, Storage) {
|
|
|
|
|
|
ASSERT_TRUE(pool.contains(entity));
|
|
|
ASSERT_EQ(std::addressof(storage), std::addressof(pool));
|
|
|
- ASSERT_EQ(id, "int"_hs);
|
|
|
+ ASSERT_EQ(id, "other"_hs);
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+TEST(Registry, ConstStorage) {
|
|
|
+ using namespace entt::literals;
|
|
|
+
|
|
|
+ entt::registry registry;
|
|
|
+ const auto entity = registry.create();
|
|
|
+
|
|
|
+ auto &storage = registry.storage<int>("other"_hs);
|
|
|
+ storage.emplace(entity);
|
|
|
|
|
|
for(auto &&curr: std::as_const(registry).storage()) {
|
|
|
testing::StaticAssertTypeEq<decltype(curr.second), const entt::sparse_set &>();
|
|
|
@@ -2116,7 +2126,7 @@ TEST(Registry, Storage) {
|
|
|
|
|
|
ASSERT_TRUE(curr.second.contains(entity));
|
|
|
ASSERT_EQ(std::addressof(storage), std::addressof(curr.second));
|
|
|
- ASSERT_EQ(curr.first, "int"_hs);
|
|
|
+ ASSERT_EQ(curr.first, "other"_hs);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -2125,54 +2135,93 @@ TEST(Registry, RegistryStorageIterator) {
|
|
|
const auto entity = registry.create();
|
|
|
registry.emplace<int>(entity);
|
|
|
|
|
|
- auto test = [entity](auto iterable) {
|
|
|
- auto end{iterable.begin()};
|
|
|
- decltype(end) begin{};
|
|
|
- begin = iterable.end();
|
|
|
- std::swap(begin, end);
|
|
|
+ auto iterable = registry.storage();
|
|
|
+
|
|
|
+ auto end{iterable.begin()};
|
|
|
+ decltype(end) begin{};
|
|
|
+ begin = iterable.end();
|
|
|
+ std::swap(begin, end);
|
|
|
+
|
|
|
+ ASSERT_EQ(begin, iterable.cbegin());
|
|
|
+ ASSERT_EQ(end, iterable.cend());
|
|
|
+ ASSERT_NE(begin, end);
|
|
|
+
|
|
|
+ ASSERT_EQ(begin++, iterable.begin());
|
|
|
+ ASSERT_EQ(begin--, iterable.end());
|
|
|
+
|
|
|
+ ASSERT_EQ(begin + 1, iterable.end());
|
|
|
+ ASSERT_EQ(end - 1, iterable.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin, iterable.cbegin());
|
|
|
- ASSERT_EQ(end, iterable.cend());
|
|
|
- ASSERT_NE(begin, end);
|
|
|
+ ASSERT_EQ(++begin, iterable.end());
|
|
|
+ ASSERT_EQ(--begin, iterable.begin());
|
|
|
+
|
|
|
+ ASSERT_EQ(begin += 1, iterable.end());
|
|
|
+ ASSERT_EQ(begin -= 1, iterable.begin());
|
|
|
+
|
|
|
+ ASSERT_EQ(begin + (end - begin), iterable.end());
|
|
|
+ ASSERT_EQ(begin - (begin - end), iterable.end());
|
|
|
+
|
|
|
+ ASSERT_EQ(end - (end - begin), iterable.begin());
|
|
|
+ ASSERT_EQ(end + (begin - end), iterable.begin());
|
|
|
+
|
|
|
+ ASSERT_EQ(begin[0u].first, iterable.begin()->first);
|
|
|
+ ASSERT_EQ(std::addressof(begin[0u].second), std::addressof((*iterable.begin()).second));
|
|
|
+
|
|
|
+ ASSERT_LT(begin, end);
|
|
|
+ ASSERT_LE(begin, iterable.begin());
|
|
|
+
|
|
|
+ ASSERT_GT(end, begin);
|
|
|
+ ASSERT_GE(end, iterable.end());
|
|
|
+
|
|
|
+ ASSERT_EQ(begin[0u].first, entt::type_id<int>().hash());
|
|
|
+ ASSERT_TRUE(begin[0u].second.contains(entity));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(Registry, RegistryConstStorageIterator) {
|
|
|
+ entt::registry registry;
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.emplace<int>(entity);
|
|
|
|
|
|
- ASSERT_EQ(begin++, iterable.begin());
|
|
|
- ASSERT_EQ(begin--, iterable.end());
|
|
|
+ auto iterable = std::as_const(registry).storage();
|
|
|
|
|
|
- ASSERT_EQ(begin + 1, iterable.end());
|
|
|
- ASSERT_EQ(end - 1, iterable.begin());
|
|
|
+ auto end{iterable.begin()};
|
|
|
+ decltype(end) begin{};
|
|
|
+ begin = iterable.end();
|
|
|
+ std::swap(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(++begin, iterable.end());
|
|
|
- ASSERT_EQ(--begin, iterable.begin());
|
|
|
+ ASSERT_EQ(begin, iterable.cbegin());
|
|
|
+ ASSERT_EQ(end, iterable.cend());
|
|
|
+ ASSERT_NE(begin, end);
|
|
|
|
|
|
- ASSERT_EQ(begin += 1, iterable.end());
|
|
|
- ASSERT_EQ(begin -= 1, iterable.begin());
|
|
|
+ ASSERT_EQ(begin++, iterable.begin());
|
|
|
+ ASSERT_EQ(begin--, iterable.end());
|
|
|
|
|
|
- ASSERT_EQ(begin + (end - begin), iterable.end());
|
|
|
- ASSERT_EQ(begin - (begin - end), iterable.end());
|
|
|
+ ASSERT_EQ(begin + 1, iterable.end());
|
|
|
+ ASSERT_EQ(end - 1, iterable.begin());
|
|
|
|
|
|
- ASSERT_EQ(end - (end - begin), iterable.begin());
|
|
|
- ASSERT_EQ(end + (begin - end), iterable.begin());
|
|
|
+ ASSERT_EQ(++begin, iterable.end());
|
|
|
+ ASSERT_EQ(--begin, iterable.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin[0u].first, iterable.begin()->first);
|
|
|
- ASSERT_EQ(std::addressof(begin[0u].second), std::addressof((*iterable.begin()).second));
|
|
|
+ ASSERT_EQ(begin += 1, iterable.end());
|
|
|
+ ASSERT_EQ(begin -= 1, iterable.begin());
|
|
|
|
|
|
- ASSERT_LT(begin, end);
|
|
|
- ASSERT_LE(begin, iterable.begin());
|
|
|
+ ASSERT_EQ(begin + (end - begin), iterable.end());
|
|
|
+ ASSERT_EQ(begin - (begin - end), iterable.end());
|
|
|
|
|
|
- ASSERT_GT(end, begin);
|
|
|
- ASSERT_GE(end, iterable.end());
|
|
|
+ ASSERT_EQ(end - (end - begin), iterable.begin());
|
|
|
+ ASSERT_EQ(end + (begin - end), iterable.begin());
|
|
|
|
|
|
- ASSERT_EQ(begin[0u].first, entt::type_id<int>().hash());
|
|
|
- ASSERT_TRUE(begin[0u].second.contains(entity));
|
|
|
- };
|
|
|
+ ASSERT_EQ(begin[0u].first, iterable.begin()->first);
|
|
|
+ ASSERT_EQ(std::addressof(begin[0u].second), std::addressof((*iterable.begin()).second));
|
|
|
|
|
|
- test(registry.storage());
|
|
|
- test(std::as_const(registry).storage());
|
|
|
+ ASSERT_LT(begin, end);
|
|
|
+ ASSERT_LE(begin, iterable.begin());
|
|
|
|
|
|
- decltype(std::as_const(registry).storage().begin()) cit = registry.storage().begin();
|
|
|
+ ASSERT_GT(end, begin);
|
|
|
+ ASSERT_GE(end, iterable.end());
|
|
|
|
|
|
- ASSERT_EQ(cit, registry.storage().begin());
|
|
|
- ASSERT_NE(cit, std::as_const(registry).storage().end());
|
|
|
+ ASSERT_EQ(begin[0u].first, entt::type_id<int>().hash());
|
|
|
+ ASSERT_TRUE(begin[0u].second.contains(entity));
|
|
|
}
|
|
|
|
|
|
TEST(Registry, RegistryStorageIteratorConversion) {
|