|
|
@@ -13,6 +13,15 @@ struct clazz {
|
|
|
entt::entity entt{entt::null};
|
|
|
};
|
|
|
|
|
|
+struct stable_type {
|
|
|
+ int value;
|
|
|
+};
|
|
|
+
|
|
|
+template<>
|
|
|
+struct entt::component_traits<stable_type>: basic_component_traits {
|
|
|
+ using in_place_delete = std::true_type;
|
|
|
+};
|
|
|
+
|
|
|
TEST(Helper, AsView) {
|
|
|
entt::registry registry;
|
|
|
const entt::registry cregistry;
|
|
|
@@ -79,3 +88,41 @@ TEST(Helper, ToEntity) {
|
|
|
ASSERT_EQ(entt::to_entity(registry, 42), null);
|
|
|
ASSERT_EQ(entt::to_entity(registry, value), null);
|
|
|
}
|
|
|
+
|
|
|
+TEST(Helper, ToEntityStableType) {
|
|
|
+ entt::registry registry;
|
|
|
+ const entt::entity null = entt::null;
|
|
|
+ const stable_type value{42};
|
|
|
+
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, stable_type{42}), null);
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, value), null);
|
|
|
+
|
|
|
+ const auto entity = registry.create();
|
|
|
+ registry.emplace<stable_type>(entity);
|
|
|
+
|
|
|
+ while(registry.size<stable_type>() < (ENTT_PACKED_PAGE - 2u)) {
|
|
|
+ registry.emplace<stable_type>(registry.create(), value);
|
|
|
+ }
|
|
|
+
|
|
|
+ const auto other = registry.create();
|
|
|
+ const auto next = registry.create();
|
|
|
+
|
|
|
+ registry.emplace<stable_type>(other);
|
|
|
+ registry.emplace<stable_type>(next);
|
|
|
+
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(entity)), entity);
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(other)), other);
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(next)), next);
|
|
|
+
|
|
|
+ ASSERT_EQ(®istry.get<stable_type>(entity) + ENTT_PACKED_PAGE - 2u, ®istry.get<stable_type>(other));
|
|
|
+
|
|
|
+ registry.destroy(other);
|
|
|
+
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(entity)), entity);
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(next)), next);
|
|
|
+
|
|
|
+ ASSERT_EQ(®istry.get<stable_type>(entity) + ENTT_PACKED_PAGE - 1u, ®istry.get<stable_type>(next));
|
|
|
+
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, stable_type{42}), null);
|
|
|
+ ASSERT_EQ(entt::to_entity(registry, value), null);
|
|
|
+}
|