helper.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include <gtest/gtest.h>
  2. #include <entt/entity/entity.hpp>
  3. #include <entt/entity/helper.hpp>
  4. #include <entt/entity/registry.hpp>
  5. struct clazz {
  6. void func(entt::registry &, entt::entity curr) {
  7. entt = curr;
  8. }
  9. entt::entity entt{entt::null};
  10. };
  11. struct stable_type {
  12. static constexpr auto in_place_delete = true;
  13. int value;
  14. };
  15. TEST(Helper, AsView) {
  16. entt::registry registry;
  17. const entt::registry cregistry;
  18. ([](entt::view<entt::get_t<int>>) {})(entt::as_view{registry});
  19. ([](entt::view<entt::get_t<char, double>, entt::exclude_t<int>>) {})(entt::as_view{registry});
  20. ([](entt::view<entt::get_t<const char, double>, entt::exclude_t<const int>>) {})(entt::as_view{registry});
  21. ([](entt::view<entt::get_t<const char, const double>, entt::exclude_t<const int>>) {})(entt::as_view{cregistry});
  22. }
  23. TEST(Helper, AsGroup) {
  24. entt::registry registry;
  25. const entt::registry cregistry;
  26. ([](entt::group<entt::owned_t<double>, entt::get_t<char>, entt::exclude_t<int>>) {})(entt::as_group{registry});
  27. ([](entt::group<entt::owned_t<double>, entt::get_t<const char>, entt::exclude_t<const int>>) {})(entt::as_group{registry});
  28. ([](entt::group<entt::owned_t<const double>, entt::get_t<const char>, entt::exclude_t<const int>>) {})(entt::as_group{cregistry});
  29. }
  30. TEST(Helper, Invoke) {
  31. entt::registry registry;
  32. const auto entity = registry.create();
  33. registry.on_construct<clazz>().connect<entt::invoke<&clazz::func>>();
  34. registry.emplace<clazz>(entity);
  35. ASSERT_EQ(entity, registry.get<clazz>(entity).entt);
  36. }
  37. TEST(Helper, ToEntity) {
  38. entt::registry registry;
  39. const entt::entity null = entt::null;
  40. const int value = 42;
  41. ASSERT_EQ(entt::to_entity(registry, 42), null);
  42. ASSERT_EQ(entt::to_entity(registry, value), null);
  43. const auto entity = registry.create();
  44. auto &&storage = registry.storage<int>();
  45. storage.emplace(entity);
  46. while(storage.size() < (ENTT_PACKED_PAGE - 1u)) {
  47. storage.emplace(registry.create(), value);
  48. }
  49. const auto other = registry.create();
  50. const auto next = registry.create();
  51. registry.emplace<int>(other);
  52. registry.emplace<int>(next);
  53. ASSERT_EQ(entt::to_entity(registry, registry.get<int>(entity)), entity);
  54. ASSERT_EQ(entt::to_entity(registry, registry.get<int>(other)), other);
  55. ASSERT_EQ(entt::to_entity(registry, registry.get<int>(next)), next);
  56. ASSERT_EQ(&registry.get<int>(entity) + ENTT_PACKED_PAGE - 1u, &registry.get<int>(other));
  57. registry.destroy(other);
  58. ASSERT_EQ(entt::to_entity(registry, registry.get<int>(entity)), entity);
  59. ASSERT_EQ(entt::to_entity(registry, registry.get<int>(next)), next);
  60. ASSERT_EQ(&registry.get<int>(entity) + ENTT_PACKED_PAGE - 1u, &registry.get<int>(next));
  61. ASSERT_EQ(entt::to_entity(registry, 42), null);
  62. ASSERT_EQ(entt::to_entity(registry, value), null);
  63. }
  64. TEST(Helper, ToEntityStableType) {
  65. entt::registry registry;
  66. const entt::entity null = entt::null;
  67. const stable_type value{42};
  68. ASSERT_EQ(entt::to_entity(registry, stable_type{42}), null);
  69. ASSERT_EQ(entt::to_entity(registry, value), null);
  70. const auto entity = registry.create();
  71. auto &&storage = registry.storage<stable_type>();
  72. registry.emplace<stable_type>(entity);
  73. while(storage.size() < (ENTT_PACKED_PAGE - 2u)) {
  74. storage.emplace(registry.create(), value);
  75. }
  76. const auto other = registry.create();
  77. const auto next = registry.create();
  78. registry.emplace<stable_type>(other);
  79. registry.emplace<stable_type>(next);
  80. ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(entity)), entity);
  81. ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(other)), other);
  82. ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(next)), next);
  83. ASSERT_EQ(&registry.get<stable_type>(entity) + ENTT_PACKED_PAGE - 2u, &registry.get<stable_type>(other));
  84. registry.destroy(other);
  85. ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(entity)), entity);
  86. ASSERT_EQ(entt::to_entity(registry, registry.get<stable_type>(next)), next);
  87. ASSERT_EQ(&registry.get<stable_type>(entity) + ENTT_PACKED_PAGE - 1u, &registry.get<stable_type>(next));
  88. ASSERT_EQ(entt::to_entity(registry, stable_type{42}), null);
  89. ASSERT_EQ(entt::to_entity(registry, value), null);
  90. }