Lines Matching refs:registry

32     static void sort(entt::registry &registry) {  in sort()
33 registry.sort<Component>([](auto lhs, auto rhs) { return lhs < rhs; }); in sort()
37 void incr(const entt::registry &, entt::entity entity) { in incr()
43 void decr(const entt::registry &, entt::entity entity) { in decr()
53 void receive(const entt::registry &ref) { in receive()
57 const entt::registry *parent{nullptr};
61 entt::registry registry; in TEST() local
63 ASSERT_EQ(registry.try_ctx<char>(), nullptr); in TEST()
64 ASSERT_EQ(registry.try_ctx<const int>(), nullptr); in TEST()
65 ASSERT_EQ(registry.try_ctx<double>(), nullptr); in TEST()
67 registry.set<char>(); in TEST()
68 registry.set<int>(); in TEST()
70 static_cast<void>(registry.ctx_or_set<double>()); in TEST()
72 ASSERT_NE(registry.try_ctx<char>(), nullptr); in TEST()
73 ASSERT_NE(registry.try_ctx<const int>(), nullptr); in TEST()
74 ASSERT_NE(registry.try_ctx<double>(), nullptr); in TEST()
76 registry.unset<int>(); in TEST()
77 registry.unset<double>(); in TEST()
81 registry.ctx([&count](auto info) { in TEST()
88 ASSERT_NE(registry.try_ctx<char>(), nullptr); in TEST()
89 ASSERT_EQ(registry.try_ctx<const int>(), nullptr); in TEST()
90 ASSERT_EQ(registry.try_ctx<double>(), nullptr); in TEST()
92 registry.set<char>('c'); in TEST()
93 registry.set<int>(0); in TEST()
94 registry.set<double>(1.); in TEST()
95 registry.set<int>(42); in TEST()
97 ASSERT_EQ(registry.ctx_or_set<char>('a'), 'c'); in TEST()
98 ASSERT_NE(registry.try_ctx<char>(), nullptr); in TEST()
99 ASSERT_EQ(registry.try_ctx<char>(), &registry.ctx<char>()); in TEST()
100 ASSERT_EQ(registry.ctx<char>(), std::as_const(registry).ctx<const char>()); in TEST()
102 ASSERT_EQ(registry.ctx<const int>(), 42); in TEST()
103 ASSERT_NE(registry.try_ctx<int>(), nullptr); in TEST()
104 ASSERT_EQ(registry.try_ctx<const int>(), &registry.ctx<int>()); in TEST()
105 ASSERT_EQ(registry.ctx<int>(), std::as_const(registry).ctx<const int>()); in TEST()
107 ASSERT_EQ(registry.ctx<const double>(), 1.); in TEST()
108 ASSERT_NE(registry.try_ctx<double>(), nullptr); in TEST()
109 ASSERT_EQ(registry.try_ctx<const double>(), &registry.ctx<double>()); in TEST()
110 ASSERT_EQ(registry.ctx<double>(), std::as_const(registry).ctx<const double>()); in TEST()
112 ASSERT_EQ(registry.try_ctx<float>(), nullptr); in TEST()
116 entt::registry registry; in TEST() local
119 registry.set<int &>(value); in TEST()
121 ASSERT_NE(registry.try_ctx<int>(), nullptr); in TEST()
122 ASSERT_NE(registry.try_ctx<const int>(), nullptr); in TEST()
123 ASSERT_NE(std::as_const(registry).try_ctx<const int>(), nullptr); in TEST()
124 ASSERT_EQ(registry.ctx<const int>(), 3); in TEST()
125 ASSERT_EQ(registry.ctx<int>(), 3); in TEST()
127 registry.ctx<int>() = 42; in TEST()
129 ASSERT_EQ(registry.ctx<int>(), 42); in TEST()
134 ASSERT_EQ(std::as_const(registry).ctx<const int>(), 3); in TEST()
138 entt::registry registry; in TEST() local
141 registry.set<const int &>(value); in TEST()
143 ASSERT_EQ(registry.try_ctx<int>(), nullptr); in TEST()
144 ASSERT_NE(registry.try_ctx<const int>(), nullptr); in TEST()
145 ASSERT_NE(std::as_const(registry).try_ctx<const int>(), nullptr); in TEST()
146 ASSERT_EQ(registry.ctx<const int>(), 3); in TEST()
150 ASSERT_EQ(std::as_const(registry).ctx<const int>(), 42); in TEST()
154 entt::registry registry; in TEST() local
156 ASSERT_EQ(registry.size(), 0u); in TEST()
157 ASSERT_EQ(registry.alive(), 0u); in TEST()
158 ASSERT_NO_FATAL_FAILURE((registry.reserve<int, char>(8))); in TEST()
159 ASSERT_NO_FATAL_FAILURE(registry.reserve_pools(16)); in TEST()
160 ASSERT_NO_FATAL_FAILURE(registry.reserve(42)); in TEST()
161 ASSERT_TRUE(registry.empty()); in TEST()
163 ASSERT_EQ(registry.capacity(), 42u); in TEST()
164 ASSERT_EQ(registry.capacity<int>(), ENTT_PACKED_PAGE); in TEST()
165 ASSERT_EQ(registry.capacity<char>(), ENTT_PACKED_PAGE); in TEST()
166 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
167 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
168 ASSERT_TRUE((registry.empty<int, char>())); in TEST()
170 registry.prepare<double>(); in TEST()
172 const auto e0 = registry.create(); in TEST()
173 const auto e1 = registry.create(); in TEST()
175 registry.emplace<int>(e1); in TEST()
176 registry.emplace<char>(e1); in TEST()
178 ASSERT_TRUE(registry.all_of<>(e0)); in TEST()
179 ASSERT_FALSE(registry.any_of<>(e1)); in TEST()
181 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
182 ASSERT_EQ(registry.size<char>(), 1u); in TEST()
183 ASSERT_FALSE(registry.empty<int>()); in TEST()
184 ASSERT_FALSE(registry.empty<char>()); in TEST()
188 ASSERT_FALSE((registry.all_of<int, char>(e0))); in TEST()
189 ASSERT_TRUE((registry.all_of<int, char>(e1))); in TEST()
190 ASSERT_FALSE((registry.any_of<int, double>(e0))); in TEST()
191 ASSERT_TRUE((registry.any_of<int, double>(e1))); in TEST()
193 ASSERT_EQ(registry.try_get<int>(e0), nullptr); in TEST()
194 ASSERT_NE(registry.try_get<int>(e1), nullptr); in TEST()
195 ASSERT_EQ(registry.try_get<char>(e0), nullptr); in TEST()
196 ASSERT_NE(registry.try_get<char>(e1), nullptr); in TEST()
197 ASSERT_EQ(registry.try_get<double>(e0), nullptr); in TEST()
198 ASSERT_EQ(registry.try_get<double>(e1), nullptr); in TEST()
200 ASSERT_EQ(registry.emplace<int>(e0, 42), 42); in TEST()
201 ASSERT_EQ(registry.emplace<char>(e0, 'c'), 'c'); in TEST()
202 ASSERT_NO_FATAL_FAILURE(registry.erase<int>(e1)); in TEST()
203 ASSERT_NO_FATAL_FAILURE(registry.erase<char>(e1)); in TEST()
205 ASSERT_TRUE((registry.all_of<int, char>(e0))); in TEST()
206 ASSERT_FALSE((registry.all_of<int, char>(e1))); in TEST()
207 ASSERT_TRUE((registry.any_of<int, double>(e0))); in TEST()
208 ASSERT_FALSE((registry.any_of<int, double>(e1))); in TEST()
210 const auto e2 = registry.create(); in TEST()
212 registry.emplace_or_replace<int>(e2, registry.get<int>(e0)); in TEST()
213 registry.emplace_or_replace<char>(e2, registry.get<char>(e0)); in TEST()
215 ASSERT_TRUE((registry.all_of<int, char>(e2))); in TEST()
216 ASSERT_EQ(registry.get<int>(e0), 42); in TEST()
217 ASSERT_EQ(registry.get<char>(e0), 'c'); in TEST()
219 ASSERT_NE(registry.try_get<int>(e0), nullptr); in TEST()
220 ASSERT_NE(registry.try_get<char>(e0), nullptr); in TEST()
221 ASSERT_EQ(registry.try_get<double>(e0), nullptr); in TEST()
222 ASSERT_EQ(*registry.try_get<int>(e0), 42); in TEST()
223 ASSERT_EQ(*registry.try_get<char>(e0), 'c'); in TEST()
225 ASSERT_EQ(std::get<0>(registry.get<int, char>(e0)), 42); in TEST()
226 ASSERT_EQ(*std::get<0>(registry.try_get<int, char, double>(e0)), 42); in TEST()
227 ASSERT_EQ(std::get<1>(static_cast<const entt::registry &>(registry).get<int, char>(e0)), 'c'); in TEST()
228 …ASSERT_EQ(*std::get<1>(static_cast<const entt::registry &>(registry).try_get<int, char, double>(e0… in TEST()
230 ASSERT_EQ(registry.get<int>(e0), registry.get<int>(e2)); in TEST()
231 ASSERT_EQ(registry.get<char>(e0), registry.get<char>(e2)); in TEST()
232 ASSERT_NE(&registry.get<int>(e0), &registry.get<int>(e2)); in TEST()
233 ASSERT_NE(&registry.get<char>(e0), &registry.get<char>(e2)); in TEST()
235 ASSERT_EQ(registry.patch<int>(e0, [](auto &instance) { instance = 2; }), 2); in TEST()
236 ASSERT_EQ(registry.replace<int>(e0, 3), 3); in TEST()
238 ASSERT_NO_FATAL_FAILURE(registry.emplace_or_replace<int>(e0, 1)); in TEST()
239 ASSERT_NO_FATAL_FAILURE(registry.emplace_or_replace<int>(e1, 1)); in TEST()
240 ASSERT_EQ(static_cast<const entt::registry &>(registry).get<int>(e0), 1); in TEST()
241 ASSERT_EQ(static_cast<const entt::registry &>(registry).get<int>(e1), 1); in TEST()
243 ASSERT_EQ(registry.size(), 3u); in TEST()
244 ASSERT_EQ(registry.alive(), 3u); in TEST()
245 ASSERT_FALSE(registry.empty()); in TEST()
247 ASSERT_EQ(registry.version(e2), 0u); in TEST()
248 ASSERT_EQ(registry.current(e2), 0u); in TEST()
249 ASSERT_DEATH(registry.release(e2), ""); in TEST()
250 ASSERT_NO_FATAL_FAILURE(registry.destroy(e2)); in TEST()
251 ASSERT_DEATH(registry.destroy(e2), ""); in TEST()
252 ASSERT_EQ(registry.version(e2), 0u); in TEST()
253 ASSERT_EQ(registry.current(e2), 1u); in TEST()
255 ASSERT_TRUE(registry.valid(e0)); in TEST()
256 ASSERT_TRUE(registry.valid(e1)); in TEST()
257 ASSERT_FALSE(registry.valid(e2)); in TEST()
259 ASSERT_EQ(registry.size(), 3u); in TEST()
260 ASSERT_EQ(registry.alive(), 2u); in TEST()
261 ASSERT_FALSE(registry.empty()); in TEST()
263 ASSERT_NO_FATAL_FAILURE(registry.clear()); in TEST()
265 ASSERT_EQ(registry.size(), 3u); in TEST()
266 ASSERT_EQ(registry.alive(), 0u); in TEST()
267 ASSERT_TRUE(registry.empty()); in TEST()
269 const auto e3 = registry.create(); in TEST()
271 ASSERT_EQ(registry.get_or_emplace<int>(e3, 3), 3); in TEST()
272 ASSERT_EQ(registry.get_or_emplace<char>(e3, 'c'), 'c'); in TEST()
274 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
275 ASSERT_EQ(registry.size<char>(), 1u); in TEST()
276 ASSERT_FALSE(registry.empty<int>()); in TEST()
277 ASSERT_FALSE(registry.empty<char>()); in TEST()
278 ASSERT_TRUE((registry.all_of<int, char>(e3))); in TEST()
279 ASSERT_EQ(registry.get<int>(e3), 3); in TEST()
280 ASSERT_EQ(registry.get<char>(e3), 'c'); in TEST()
282 ASSERT_NO_FATAL_FAILURE(registry.clear<int>()); in TEST()
284 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
285 ASSERT_EQ(registry.size<char>(), 1u); in TEST()
286 ASSERT_TRUE(registry.empty<int>()); in TEST()
287 ASSERT_FALSE(registry.empty<char>()); in TEST()
289 ASSERT_NO_FATAL_FAILURE(registry.clear()); in TEST()
291 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
292 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
293 ASSERT_TRUE((registry.empty<int, char>())); in TEST()
295 const auto e4 = registry.create(); in TEST()
296 const auto e5 = registry.create(); in TEST()
298 registry.emplace<int>(e4); in TEST()
300 ASSERT_EQ(registry.remove<int>(e4), 1u); in TEST()
301 ASSERT_EQ(registry.remove<int>(e5), 0u); in TEST()
303 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
304 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
305 ASSERT_TRUE(registry.empty<int>()); in TEST()
307 ASSERT_EQ(registry.capacity<int>(), ENTT_PACKED_PAGE); in TEST()
308 ASSERT_EQ(registry.capacity<char>(), ENTT_PACKED_PAGE); in TEST()
310 registry.shrink_to_fit<int, char>(); in TEST()
312 ASSERT_EQ(registry.capacity<int>(), 0u); in TEST()
313 ASSERT_EQ(registry.capacity<char>(), 0u); in TEST()
317 entt::registry registry; in TEST() local
318 const auto entity = registry.create(); in TEST()
321 registry.on_construct<int>().connect<&owner::receive>(test); in TEST()
322 registry.on_destroy<int>().connect<&owner::receive>(test); in TEST()
326 registry.emplace<int>(entity); in TEST()
328 ASSERT_EQ(test.parent, &registry); in TEST()
330 entt::registry other{std::move(registry)}; in TEST()
332 registry.emplace<int>(registry.create(entity)); in TEST()
336 registry = std::move(other); in TEST()
337 registry.emplace<int>(entity); in TEST()
338 registry.emplace<int>(registry.create(entity)); in TEST()
340 ASSERT_EQ(test.parent, &registry); in TEST()
344 entt::registry registry; in TEST() local
345 const auto entity = registry.create(); in TEST()
347 registry.emplace<aggregate>(entity, 0); in TEST()
348 auto &instance = registry.replace<aggregate>(entity, 42); in TEST()
354 entt::registry registry; in TEST() local
355 const auto entity = registry.create(); in TEST()
356 auto &instance = registry.emplace_or_replace<aggregate>(entity, 42); in TEST()
362 entt::registry registry; in TEST() local
363 const auto pre = registry.create(); in TEST()
365 ASSERT_EQ(pre, registry.entity(pre)); in TEST()
367 registry.release(pre); in TEST()
368 const auto post = registry.create(); in TEST()
371 ASSERT_EQ(entt::registry::entity(pre), entt::registry::entity(post)); in TEST()
372 ASSERT_NE(entt::registry::version(pre), entt::registry::version(post)); in TEST()
373 ASSERT_NE(registry.version(pre), registry.current(pre)); in TEST()
374 ASSERT_EQ(registry.version(post), registry.current(post)); in TEST()
378 entt::registry registry; in TEST() local
380 ASSERT_EQ(std::as_const(registry).data(), nullptr); in TEST()
382 const auto entity = registry.create(); in TEST()
384 ASSERT_EQ(*std::as_const(registry).data(), entity); in TEST()
386 const auto other = registry.create(); in TEST()
387 registry.release(entity); in TEST()
389 ASSERT_NE(*std::as_const(registry).data(), entity); in TEST()
390 ASSERT_EQ(*(std::as_const(registry).data() + 1u), other); in TEST()
394 entt::registry registry; in TEST() local
397 const auto entity = registry.create(); in TEST()
398 registry.release(registry.create()); in TEST()
399 registry.release(entity); in TEST()
400 registry.release(registry.create()); in TEST()
402 registry.create(std::begin(entities), std::end(entities)); in TEST()
404 ASSERT_TRUE(registry.valid(entities[0])); in TEST()
405 ASSERT_TRUE(registry.valid(entities[1])); in TEST()
406 ASSERT_TRUE(registry.valid(entities[2])); in TEST()
408 ASSERT_EQ(registry.entity(entities[0]), entt::entity{0}); in TEST()
409 ASSERT_EQ(registry.version(entities[0]), entt::registry::version_type{2}); in TEST()
411 ASSERT_EQ(registry.entity(entities[1]), entt::entity{1}); in TEST()
412 ASSERT_EQ(registry.version(entities[1]), entt::registry::version_type{1}); in TEST()
414 ASSERT_EQ(registry.entity(entities[2]), entt::entity{2}); in TEST()
415 ASSERT_EQ(registry.version(entities[2]), entt::registry::version_type{0}); in TEST()
419 entt::registry registry; in TEST() local
423 registry.on_construct<int>().connect<&listener::incr<int>>(listener); in TEST()
424 registry.create(std::begin(entities), std::end(entities)); in TEST()
425 registry.insert(std::begin(entities), std::end(entities), 42); in TEST()
426 registry.insert(std::begin(entities), std::end(entities), 'c'); in TEST()
428 ASSERT_EQ(registry.get<int>(entities[0]), 42); in TEST()
429 ASSERT_EQ(registry.get<char>(entities[1]), 'c'); in TEST()
432 registry.on_construct<int>().disconnect<&listener::incr<int>>(listener); in TEST()
433 registry.on_construct<empty_type>().connect<&listener::incr<empty_type>>(listener); in TEST()
434 registry.create(std::begin(entities), std::end(entities)); in TEST()
435 registry.insert(std::begin(entities), std::end(entities), 'a'); in TEST()
436 registry.insert<empty_type>(std::begin(entities), std::end(entities)); in TEST()
438 ASSERT_TRUE(registry.all_of<empty_type>(entities[0])); in TEST()
439 ASSERT_EQ(registry.get<char>(entities[2]), 'a'); in TEST()
444 entt::registry registry; in TEST() local
445 auto e3 = registry.create(entt::entity{3}); in TEST()
446 auto e2 = registry.create(entt::entity{3}); in TEST()
449 ASSERT_FALSE(registry.valid(entt::entity{1})); in TEST()
452 registry.release(e2); in TEST()
454 ASSERT_EQ(registry.version(e2), entt::registry::version_type{}); in TEST()
455 ASSERT_EQ(registry.current(e2), entt::registry::version_type{1}); in TEST()
457 e2 = registry.create(); in TEST()
458 auto e1 = registry.create(entt::entity{2}); in TEST()
460 ASSERT_EQ(registry.entity(e2), entt::entity{2}); in TEST()
461 ASSERT_EQ(registry.version(e2), entt::registry::version_type{1}); in TEST()
463 ASSERT_EQ(registry.entity(e1), entt::entity{1}); in TEST()
464 ASSERT_EQ(registry.version(e1), entt::registry::version_type{}); in TEST()
466 registry.release(e1); in TEST()
467 registry.release(e2); in TEST()
468 auto e0 = registry.create(entt::entity{0}); in TEST()
471 ASSERT_EQ(registry.version(e0), entt::registry::version_type{}); in TEST()
475 entt::registry registry; in TEST() local
479 const auto entity = registry.create(); in TEST()
480 registry.emplace<double>(entity); in TEST()
483 registry.clear(); in TEST()
486 const auto entity = registry.create(); in TEST()
487 registry.emplace<int>(entity); in TEST()
491 registry.clear(); in TEST()
494 const auto entity = registry.create(); in TEST()
498 ASSERT_FALSE(registry.valid(pre)); in TEST()
499 ASSERT_TRUE(registry.valid(post)); in TEST()
500 ASSERT_NE(registry.version(pre), registry.version(post)); in TEST()
501 ASSERT_EQ(registry.version(pre) + 1, registry.version(post)); in TEST()
502 ASSERT_EQ(registry.current(pre), registry.current(post)); in TEST()
506 entt::registry registry; in TEST() local
508 const auto e0 = registry.create(); in TEST()
509 const auto e1 = registry.create(); in TEST()
511 registry.destroy(e0); in TEST()
512 registry.release(e1); in TEST()
514 registry.each([](auto) { FAIL(); }); in TEST()
516 ASSERT_EQ(registry.current(e0), entt::registry::version_type{1}); in TEST()
517 ASSERT_EQ(registry.current(e1), entt::registry::version_type{1}); in TEST()
521 entt::registry registry; in TEST() local
523 const auto e0 = registry.create(); in TEST()
524 const auto e1 = registry.create(); in TEST()
526 ASSERT_EQ(registry.current(e0), entt::registry::version_type{}); in TEST()
527 ASSERT_EQ(registry.current(e1), entt::registry::version_type{}); in TEST()
529 registry.destroy(e0); in TEST()
530 registry.destroy(e1, 3); in TEST()
532 ASSERT_DEATH(registry.destroy(e0), ""); in TEST()
533 ASSERT_DEATH(registry.destroy(e1, 3), ""); in TEST()
534 ASSERT_EQ(registry.current(e0), entt::registry::version_type{1}); in TEST()
535 ASSERT_EQ(registry.current(e1), entt::registry::version_type{3}); in TEST()
539 entt::registry registry; in TEST() local
540 const auto iview = registry.view<int>(); in TEST()
541 const auto icview = registry.view<int, char>(); in TEST()
544 registry.create(std::begin(entities), std::end(entities)); in TEST()
546 registry.emplace<int>(entities[0u]); in TEST()
547 registry.emplace<char>(entities[0u]); in TEST()
548 registry.emplace<double>(entities[0u]); in TEST()
550 registry.emplace<int>(entities[1u]); in TEST()
551 registry.emplace<char>(entities[1u]); in TEST()
553 registry.emplace<int>(entities[2u]); in TEST()
555 ASSERT_TRUE(registry.valid(entities[0u])); in TEST()
556 ASSERT_TRUE(registry.valid(entities[1u])); in TEST()
557 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
559 registry.destroy(icview.begin(), icview.end()); in TEST()
560 registry.destroy(icview.rbegin(), icview.rend()); in TEST()
562 ASSERT_FALSE(registry.valid(entities[0u])); in TEST()
563 ASSERT_FALSE(registry.valid(entities[1u])); in TEST()
564 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
566 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
567 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
568 ASSERT_EQ(registry.size<double>(), 0u); in TEST()
570 registry.destroy(iview.begin(), iview.end()); in TEST()
572 ASSERT_FALSE(registry.valid(entities[2u])); in TEST()
573 ASSERT_NO_FATAL_FAILURE(registry.destroy(iview.rbegin(), iview.rend())); in TEST()
577 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
578 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
579 ASSERT_EQ(registry.size<double>(), 0u); in TEST()
581 registry.create(std::begin(entities), std::end(entities)); in TEST()
582 registry.insert<int>(std::begin(entities), std::end(entities)); in TEST()
584 ASSERT_TRUE(registry.valid(entities[0u])); in TEST()
585 ASSERT_TRUE(registry.valid(entities[1u])); in TEST()
586 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
587 ASSERT_EQ(registry.size<int>(), 3u); in TEST()
589 registry.destroy(std::begin(entities), std::end(entities)); in TEST()
591 ASSERT_FALSE(registry.valid(entities[0u])); in TEST()
592 ASSERT_FALSE(registry.valid(entities[1u])); in TEST()
593 ASSERT_FALSE(registry.valid(entities[2u])); in TEST()
594 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
598 entt::registry registry; in TEST() local
599 const auto iview = registry.view<int>(); in TEST()
600 const auto icview = registry.view<int, stable_type>(); in TEST()
603 registry.create(std::begin(entities), std::end(entities)); in TEST()
605 registry.emplace<int>(entities[0u]); in TEST()
606 registry.emplace<stable_type>(entities[0u]); in TEST()
607 registry.emplace<double>(entities[0u]); in TEST()
609 registry.emplace<int>(entities[1u]); in TEST()
610 registry.emplace<stable_type>(entities[1u]); in TEST()
612 registry.emplace<int>(entities[2u]); in TEST()
614 ASSERT_TRUE(registry.valid(entities[0u])); in TEST()
615 ASSERT_TRUE(registry.valid(entities[1u])); in TEST()
616 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
618 registry.destroy(icview.begin(), icview.end()); in TEST()
620 ASSERT_FALSE(registry.valid(entities[0u])); in TEST()
621 ASSERT_FALSE(registry.valid(entities[1u])); in TEST()
622 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
624 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
625 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
626 ASSERT_EQ(registry.size<double>(), 0u); in TEST()
628 registry.destroy(iview.begin(), iview.end()); in TEST()
630 ASSERT_FALSE(registry.valid(entities[2u])); in TEST()
634 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
635 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
636 ASSERT_EQ(registry.size<double>(), 0u); in TEST()
640 entt::registry registry; in TEST() local
643 registry.create(std::begin(entities), std::end(entities)); in TEST()
645 ASSERT_EQ(registry.current(entities[0u]), entt::registry::version_type{}); in TEST()
646 ASSERT_EQ(registry.current(entities[1u]), entt::registry::version_type{}); in TEST()
648 registry.release(entities[0u]); in TEST()
649 registry.release(entities[1u], 3); in TEST()
651 ASSERT_DEATH(registry.release(entities[0u]), ""); in TEST()
652 ASSERT_DEATH(registry.release(entities[1u], 3), ""); in TEST()
653 ASSERT_EQ(registry.current(entities[0u]), entt::registry::version_type{1}); in TEST()
654 ASSERT_EQ(registry.current(entities[1u]), entt::registry::version_type{3}); in TEST()
658 entt::registry registry; in TEST() local
661 registry.create(std::begin(entities), std::end(entities)); in TEST()
663 ASSERT_TRUE(registry.valid(entities[0u])); in TEST()
664 ASSERT_TRUE(registry.valid(entities[1u])); in TEST()
665 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
667 registry.release(std::begin(entities), std::end(entities) - 1u); in TEST()
669 ASSERT_FALSE(registry.valid(entities[0u])); in TEST()
670 ASSERT_FALSE(registry.valid(entities[1u])); in TEST()
671 ASSERT_TRUE(registry.valid(entities[2u])); in TEST()
673 registry.release(std::end(entities) - 1u, std::end(entities)); in TEST()
675 ASSERT_FALSE(registry.valid(entities[2u])); in TEST()
681 entt::registry registry; in TEST() local
682 const auto entity = registry.create(); in TEST()
684 registry.release(entity); in TEST()
686 ASSERT_NE(registry.current(entity), registry.version(entity)); in TEST()
687 ASSERT_NE(registry.current(entity), typename traits_type::version_type{}); in TEST()
689 registry.release(registry.create(), traits_type::to_version(traits_type::construct()) - 1u); in TEST()
690 registry.release(registry.create()); in TEST()
692 ASSERT_EQ(registry.current(entity), registry.version(entity)); in TEST()
693 ASSERT_EQ(registry.current(entity), typename traits_type::version_type{}); in TEST()
697 entt::registry registry; in TEST() local
700 ASSERT_FALSE(registry.valid(entity)); in TEST()
701 ASSERT_NE(registry.create(entity), entity); in TEST()
707 entt::registry registry; in TEST() local
710 ASSERT_FALSE(registry.valid(entity)); in TEST()
712 const auto other = registry.create(); in TEST()
716 ASSERT_NE(registry.release(other, vers), vers); in TEST()
717 ASSERT_NE(registry.create(required), required); in TEST()
721 entt::registry registry; in TEST() local
722 entt::registry::size_type tot; in TEST()
723 entt::registry::size_type match; in TEST()
725 static_cast<void>(registry.create()); in TEST()
726 registry.emplace<int>(registry.create()); in TEST()
727 static_cast<void>(registry.create()); in TEST()
728 registry.emplace<int>(registry.create()); in TEST()
729 static_cast<void>(registry.create()); in TEST()
734 registry.each([&](auto entity) { in TEST()
735 if(registry.all_of<int>(entity)) { ++match; } in TEST()
736 static_cast<void>(registry.create()); in TEST()
746 registry.each([&](auto entity) { in TEST()
747 if(registry.all_of<int>(entity)) { in TEST()
748 registry.destroy(entity); in TEST()
761 registry.each([&](auto entity) { in TEST()
762 if(registry.all_of<int>(entity)) { ++match; } in TEST()
763 registry.destroy(entity); in TEST()
770 registry.each([&](auto) { FAIL(); }); in TEST()
774 entt::registry registry; in TEST() local
775 entt::registry::size_type tot{}; in TEST()
778 registry.create(std::begin(entities), std::end(entities)); in TEST()
779 registry.emplace<int>(entities[0u]); in TEST()
780 registry.emplace<int>(entities[2u]); in TEST()
782 registry.orphans([&](auto) { ++tot; }); in TEST()
786 registry.erase<int>(entities[0u]); in TEST()
787 registry.erase<int>(entities[2u]); in TEST()
790 registry.orphans([&](auto) { ++tot; }); in TEST()
794 registry.clear(); in TEST()
797 registry.orphans([&](auto) { ++tot; }); in TEST()
802 entt::registry registry; in TEST() local
803 auto mview = registry.view<int, char>(); in TEST()
804 auto iview = registry.view<int>(); in TEST()
805 auto cview = registry.view<char>(); in TEST()
808 registry.create(std::begin(entities), std::end(entities)); in TEST()
810 registry.emplace<int>(entities[0u], 0); in TEST()
811 registry.emplace<char>(entities[0u], 'c'); in TEST()
813 registry.emplace<int>(entities[1u], 0); in TEST()
815 registry.emplace<int>(entities[2u], 0); in TEST()
816 registry.emplace<char>(entities[2u], 'c'); in TEST()
828 entt::registry registry; in TEST() local
830 const auto entity = registry.create(); in TEST()
831 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
839 auto group = registry.group<>(entt::get<int, char>); in TEST()
842 ASSERT_TRUE((registry.sortable<int, char>())); in TEST()
847 entt::registry registry; in TEST() local
848 auto group = registry.group<>(entt::get<int, char>); in TEST()
850 const auto entity = registry.create(); in TEST()
851 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
861 ASSERT_TRUE((registry.sortable<int, char>())); in TEST()
866 entt::registry registry; in TEST() local
868 const auto entity = registry.create(); in TEST()
869 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
877 auto group = registry.group<int, char>(); in TEST()
880 ASSERT_FALSE(registry.sortable<int>()); in TEST()
881 ASSERT_FALSE(registry.sortable<char>()); in TEST()
882 ASSERT_TRUE(registry.sortable<double>()); in TEST()
887 entt::registry registry; in TEST() local
888 auto group = registry.group<int, char>(); in TEST()
890 const auto entity = registry.create(); in TEST()
891 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
901 ASSERT_FALSE(registry.sortable<int>()); in TEST()
902 ASSERT_FALSE(registry.sortable<char>()); in TEST()
903 ASSERT_TRUE(registry.sortable<double>()); in TEST()
908 entt::registry registry; in TEST() local
910 const auto entity = registry.create(); in TEST()
911 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
919 auto group = registry.group<int>(entt::get<char>); in TEST()
922 ASSERT_FALSE((registry.sortable<int, char>())); in TEST()
923 ASSERT_FALSE(registry.sortable<int>()); in TEST()
924 ASSERT_TRUE(registry.sortable<char>()); in TEST()
930 entt::registry registry; in TEST() local
931 auto group = registry.group<int>(entt::get<char>); in TEST()
933 const auto entity = registry.create(); in TEST()
934 (registry.emplace<decltype(component)>(entity, component), ...); in TEST()
944 ASSERT_FALSE((registry.sortable<int, char>())); in TEST()
945 ASSERT_FALSE(registry.sortable<int>()); in TEST()
946 ASSERT_TRUE(registry.sortable<char>()); in TEST()
951 entt::registry registry; in TEST() local
952 auto view = registry.view<int, char>(); in TEST()
954 const auto entity = registry.create(); in TEST()
955 registry.emplace<int>(entity); in TEST()
956 registry.emplace<char>(entity); in TEST()
960 registry.erase<char>(entity); in TEST()
964 registry.emplace<char>(entity); in TEST()
968 registry.clear<int>(); in TEST()
972 registry.emplace<int>(entity); in TEST()
976 registry.clear(); in TEST()
982 entt::registry registry; in TEST() local
983 auto group = registry.group<>(entt::get<int, char>); in TEST()
985 const auto entity = registry.create(); in TEST()
986 registry.emplace<int>(entity, 0); in TEST()
987 registry.emplace<char>(entity, 'c'); in TEST()
991 registry.erase<char>(entity); in TEST()
995 registry.emplace<char>(entity, 'c'); in TEST()
999 registry.clear<int>(); in TEST()
1003 registry.emplace<int>(entity, 0); in TEST()
1007 registry.clear(); in TEST()
1013 entt::registry registry; in TEST() local
1014 auto group = registry.group<int, char>(); in TEST()
1016 const auto entity = registry.create(); in TEST()
1017 registry.emplace<int>(entity, 0); in TEST()
1018 registry.emplace<char>(entity, 'c'); in TEST()
1022 registry.erase<char>(entity); in TEST()
1026 registry.emplace<char>(entity, 'c'); in TEST()
1030 registry.clear<int>(); in TEST()
1034 registry.emplace<int>(entity, 0); in TEST()
1038 registry.clear(); in TEST()
1044 entt::registry registry; in TEST() local
1045 auto group = registry.group<int>(entt::get<char>); in TEST()
1047 const auto entity = registry.create(); in TEST()
1048 registry.emplace<int>(entity, 0); in TEST()
1049 registry.emplace<char>(entity, 'c'); in TEST()
1053 registry.erase<char>(entity); in TEST()
1057 registry.emplace<char>(entity, 'c'); in TEST()
1061 registry.clear<int>(); in TEST()
1065 registry.emplace<int>(entity, 0); in TEST()
1069 registry.clear(); in TEST()
1075 entt::registry registry; in TEST() local
1078 registry.create(std::begin(entities), std::end(entities)); in TEST()
1079 registry.insert<int>(std::begin(entities), std::end(entities)); in TEST()
1080 registry.insert<char>(std::begin(entities), std::end(entities)); in TEST()
1081 const auto g1 = registry.group<int>(entt::get<char>, entt::exclude<double>); in TEST()
1083 ASSERT_TRUE(registry.sortable(g1)); in TEST()
1086 const auto g2 = registry.group<int>(entt::get<char>); in TEST()
1088 ASSERT_TRUE(registry.sortable(g1)); in TEST()
1089 ASSERT_FALSE(registry.sortable(g2)); in TEST()
1098 registry.emplace<double>(entities[i*2]); in TEST()
1109 registry.erase<int>(entities[i*2+1]); in TEST()
1115 const auto g3= registry.group<int, float>(entt::get<char>, entt::exclude<double>); in TEST()
1117 ASSERT_FALSE(registry.sortable(g1)); in TEST()
1118 ASSERT_FALSE(registry.sortable(g2)); in TEST()
1119 ASSERT_TRUE(registry.sortable(g3)); in TEST()
1132 registry.emplace<int>(entities[i*2+1]); in TEST()
1146 registry.emplace<float>(entities[i*2]); in TEST()
1154 registry.erase<double>(entities[i*2]); in TEST()
1168 registry.erase<int>(entities[i*2+1]); in TEST()
1169 registry.erase<int>(entities[i*2]); in TEST()
1178 entt::registry registry; in TEST() local
1182 registry.emplace<int>(registry.create(), val++); in TEST()
1183 registry.emplace<int>(registry.create(), val++); in TEST()
1184 registry.emplace<int>(registry.create(), val++); in TEST()
1186 for(auto entity: registry.view<int>()) { in TEST()
1187 ASSERT_EQ(registry.get<int>(entity), --val); in TEST()
1190 registry.sort<int>(std::less<int>{}); in TEST()
1192 for(auto entity: registry.view<int>()) { in TEST()
1193 ASSERT_EQ(registry.get<int>(entity), val++); in TEST()
1198 entt::registry registry; in TEST() local
1204 const auto entity = registry.create(); in TEST()
1205 registry.emplace<unsigned int>(entity, uval++); in TEST()
1206 registry.emplace<int>(entity, ival++); in TEST()
1209 for(auto entity: registry.view<unsigned int>()) { in TEST()
1210 ASSERT_EQ(registry.get<unsigned int>(entity), --uval); in TEST()
1213 for(auto entity: registry.view<int>()) { in TEST()
1214 ASSERT_EQ(registry.get<int>(entity), --ival); in TEST()
1217 registry.sort<unsigned int>(std::less<unsigned int>{}); in TEST()
1218 registry.sort<int, unsigned int>(); in TEST()
1220 for(auto entity: registry.view<unsigned int>()) { in TEST()
1221 ASSERT_EQ(registry.get<unsigned int>(entity), uval++); in TEST()
1224 for(auto entity: registry.view<int>()) { in TEST()
1225 ASSERT_EQ(registry.get<int>(entity), ival++); in TEST()
1230 entt::registry registry; in TEST() local
1232 registry.emplace<empty_type>(registry.create()); in TEST()
1233 registry.emplace<empty_type>(registry.create()); in TEST()
1234 registry.emplace<empty_type>(registry.create()); in TEST()
1236 ASSERT_LT(registry.view<empty_type>().data()[0], registry.view<empty_type>().data()[1]); in TEST()
1237 ASSERT_LT(registry.view<empty_type>().data()[1], registry.view<empty_type>().data()[2]); in TEST()
1239 registry.sort<empty_type>(std::less<entt::entity>{}); in TEST()
1241 ASSERT_GT(registry.view<empty_type>().data()[0], registry.view<empty_type>().data()[1]); in TEST()
1242 ASSERT_GT(registry.view<empty_type>().data()[1], registry.view<empty_type>().data()[2]); in TEST()
1247 entt::registry registry; in TEST() local
1248 const auto entity = registry.create(); in TEST()
1249 registry.emplace<std::unordered_set<int>>(entity).insert(42); in TEST()
1250 registry.destroy(entity); in TEST()
1255 entt::registry registry; in TEST() local
1257 registry.emplace<int>(registry.create(), value); in TEST()
1261 entt::registry registry; in TEST() local
1265 registry.on_construct<empty_type>().connect<&listener::incr<empty_type>>(listener); in TEST()
1266 registry.on_destroy<empty_type>().connect<&listener::decr<empty_type>>(listener); in TEST()
1267 registry.on_construct<int>().connect<&listener::incr<int>>(listener); in TEST()
1268 registry.on_destroy<int>().connect<&listener::decr<int>>(listener); in TEST()
1270 registry.create(std::begin(entities), std::end(entities)); in TEST()
1271 registry.insert<empty_type>(std::begin(entities), std::end(entities)); in TEST()
1276 registry.insert<int>(std::rbegin(entities), std::rend(entities)); in TEST()
1281 registry.erase<empty_type, int>(entities[0u]); in TEST()
1286 registry.on_destroy<empty_type>().disconnect<&listener::decr<empty_type>>(listener); in TEST()
1287 registry.on_destroy<int>().disconnect<&listener::decr<int>>(listener); in TEST()
1289 registry.erase<empty_type, int>(entities[1u]); in TEST()
1294 registry.on_construct<empty_type>().disconnect<&listener::incr<empty_type>>(listener); in TEST()
1295 registry.on_construct<int>().disconnect<&listener::incr<int>>(listener); in TEST()
1297 registry.emplace<empty_type>(entities[1u]); in TEST()
1298 registry.emplace<int>(entities[1u]); in TEST()
1303 registry.on_construct<int>().connect<&listener::incr<int>>(listener); in TEST()
1304 registry.on_destroy<int>().connect<&listener::decr<int>>(listener); in TEST()
1306 registry.emplace<int>(entities[0u]); in TEST()
1307 registry.erase<int>(entities[1u]); in TEST()
1312 registry.on_construct<empty_type>().connect<&listener::incr<empty_type>>(listener); in TEST()
1313 registry.on_destroy<empty_type>().connect<&listener::decr<empty_type>>(listener); in TEST()
1315 registry.erase<empty_type>(entities[1u]); in TEST()
1316 registry.emplace<empty_type>(entities[0u]); in TEST()
1321 registry.clear<empty_type, int>(); in TEST()
1326 registry.insert<empty_type>(std::begin(entities), std::end(entities)); in TEST()
1327 registry.insert<int>(std::begin(entities), std::end(entities)); in TEST()
1328 registry.destroy(entities[1u]); in TEST()
1333 registry.erase<int, empty_type>(entities[0u]); in TEST()
1334 registry.emplace_or_replace<int>(entities[0u]); in TEST()
1335 registry.emplace_or_replace<empty_type>(entities[0u]); in TEST()
1340 registry.on_destroy<empty_type>().disconnect<&listener::decr<empty_type>>(listener); in TEST()
1341 registry.on_destroy<int>().disconnect<&listener::decr<int>>(listener); in TEST()
1343 registry.emplace_or_replace<empty_type>(entities[0u]); in TEST()
1344 registry.emplace_or_replace<int>(entities[0u]); in TEST()
1349 registry.on_update<empty_type>().connect<&listener::incr<empty_type>>(listener); in TEST()
1350 registry.on_update<int>().connect<&listener::incr<int>>(listener); in TEST()
1352 registry.emplace_or_replace<empty_type>(entities[0u]); in TEST()
1353 registry.emplace_or_replace<int>(entities[0u]); in TEST()
1358 registry.replace<empty_type>(entities[0u]); in TEST()
1359 registry.replace<int>(entities[0u]); in TEST()
1366 entt::registry registry; in TEST() local
1369 registry.create(std::begin(entities), std::end(entities)); in TEST()
1371 registry.emplace<int>(entities[0u]); in TEST()
1372 registry.emplace<char>(entities[0u]); in TEST()
1373 registry.emplace<double>(entities[0u]); in TEST()
1375 registry.emplace<int>(entities[1u]); in TEST()
1376 registry.emplace<char>(entities[1u]); in TEST()
1378 registry.emplace<int>(entities[2u]); in TEST()
1380 ASSERT_FALSE(registry.all_of<float>(entities[0u])); in TEST()
1381 ASSERT_FALSE(registry.all_of<float>(entities[1u])); in TEST()
1382 ASSERT_FALSE(registry.all_of<float>(entities[2u])); in TEST()
1384 const auto icview = registry.view<int, char>(); in TEST()
1385 registry.insert(icview.begin(), icview.end(), 3.f); in TEST()
1387 ASSERT_EQ(registry.get<float>(entities[0u]), 3.f); in TEST()
1388 ASSERT_EQ(registry.get<float>(entities[1u]), 3.f); in TEST()
1389 ASSERT_FALSE(registry.all_of<float>(entities[2u])); in TEST()
1391 registry.clear<float>(); in TEST()
1394 const auto iview = registry.view<int>(); in TEST()
1395 registry.insert<float>(iview.data(), iview.data() + iview.size(), value); in TEST()
1397 ASSERT_EQ(registry.get<float>(entities[0u]), 0.f); in TEST()
1398 ASSERT_EQ(registry.get<float>(entities[1u]), 1.f); in TEST()
1399 ASSERT_EQ(registry.get<float>(entities[2u]), 2.f); in TEST()
1403 entt::registry registry; in TEST() local
1404 const auto iview = registry.view<int>(); in TEST()
1405 const auto icview = registry.view<int, char>(); in TEST()
1408 registry.create(std::begin(entities), std::end(entities)); in TEST()
1410 registry.emplace<int>(entities[0u]); in TEST()
1411 registry.emplace<char>(entities[0u]); in TEST()
1412 registry.emplace<double>(entities[0u]); in TEST()
1414 registry.emplace<int>(entities[1u]); in TEST()
1415 registry.emplace<char>(entities[1u]); in TEST()
1417 registry.emplace<int>(entities[2u]); in TEST()
1419 ASSERT_TRUE(registry.any_of<int>(entities[0u])); in TEST()
1420 ASSERT_TRUE(registry.all_of<int>(entities[1u])); in TEST()
1421 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1423 registry.erase<int, char>(entities[0u]); in TEST()
1424 registry.erase<int, char>(icview.begin(), icview.end()); in TEST()
1425 registry.erase<int, char>(icview.rbegin(), icview.rend()); in TEST()
1427 ASSERT_FALSE(registry.any_of<int>(entities[0u])); in TEST()
1428 ASSERT_FALSE(registry.all_of<int>(entities[1u])); in TEST()
1429 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1431 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
1432 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1433 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1435 registry.erase<int>(iview.begin(), iview.end()); in TEST()
1437 ASSERT_DEATH(registry.erase<int>(entities[0u]), ""); in TEST()
1438 ASSERT_DEATH(registry.erase<int>(entities[1u]), ""); in TEST()
1440 ASSERT_FALSE(registry.any_of<int>(entities[2u])); in TEST()
1441 ASSERT_NO_FATAL_FAILURE(registry.erase<int>(iview.rbegin(), iview.rend())); in TEST()
1443 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1444 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1445 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1447 registry.insert<int>(std::begin(entities), std::end(entities)); in TEST()
1448 registry.insert<char>(std::begin(entities), std::end(entities)); in TEST()
1450 ASSERT_EQ(registry.size<int>(), 3u); in TEST()
1451 ASSERT_EQ(registry.size<char>(), 3u); in TEST()
1453 registry.erase<int, char>(std::begin(entities), std::end(entities)); in TEST()
1455 ASSERT_DEATH((registry.erase<int, char>(std::begin(entities), std::end(entities))), ""); in TEST()
1456 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1457 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1459 ASSERT_FALSE(registry.orphan(entities[0u])); in TEST()
1460 ASSERT_TRUE(registry.orphan(entities[1u])); in TEST()
1461 ASSERT_TRUE(registry.orphan(entities[2u])); in TEST()
1465 entt::registry registry; in TEST() local
1466 const auto iview = registry.view<int>(); in TEST()
1467 const auto icview = registry.view<int, stable_type>(); in TEST()
1470 registry.create(std::begin(entities), std::end(entities)); in TEST()
1472 registry.emplace<int>(entities[0u]); in TEST()
1473 registry.emplace<stable_type>(entities[0u]); in TEST()
1474 registry.emplace<double>(entities[0u]); in TEST()
1476 registry.emplace<int>(entities[1u]); in TEST()
1477 registry.emplace<stable_type>(entities[1u]); in TEST()
1479 registry.emplace<int>(entities[2u]); in TEST()
1481 ASSERT_TRUE(registry.any_of<int>(entities[0u])); in TEST()
1482 ASSERT_TRUE(registry.all_of<int>(entities[1u])); in TEST()
1483 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1485 registry.erase<int, stable_type>(entities[0u]); in TEST()
1486 registry.erase<int, stable_type>(icview.begin(), icview.end()); in TEST()
1487 registry.erase<int, stable_type>(icview.begin(), icview.end()); in TEST()
1489 ASSERT_FALSE(registry.any_of<int>(entities[0u])); in TEST()
1490 ASSERT_FALSE(registry.all_of<int>(entities[1u])); in TEST()
1491 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1493 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
1494 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1495 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1497 registry.erase<int>(iview.begin(), iview.end()); in TEST()
1499 ASSERT_DEATH(registry.erase<int>(entities[0u]), ""); in TEST()
1500 ASSERT_DEATH(registry.erase<int>(entities[1u]), ""); in TEST()
1502 ASSERT_FALSE(registry.any_of<int>(entities[2u])); in TEST()
1504 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1505 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1506 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1510 entt::registry registry; in TEST() local
1511 const auto iview = registry.view<int>(); in TEST()
1512 const auto icview = registry.view<int, char>(); in TEST()
1515 registry.create(std::begin(entities), std::end(entities)); in TEST()
1517 registry.emplace<int>(entities[0u]); in TEST()
1518 registry.emplace<char>(entities[0u]); in TEST()
1519 registry.emplace<double>(entities[0u]); in TEST()
1521 registry.emplace<int>(entities[1u]); in TEST()
1522 registry.emplace<char>(entities[1u]); in TEST()
1524 registry.emplace<int>(entities[2u]); in TEST()
1526 ASSERT_TRUE(registry.any_of<int>(entities[0u])); in TEST()
1527 ASSERT_TRUE(registry.all_of<int>(entities[1u])); in TEST()
1528 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1530 registry.remove<int, char>(entities[0u]); in TEST()
1532 ASSERT_EQ((registry.remove<int, char>(icview.begin(), icview.end())), 2u); in TEST()
1533 ASSERT_EQ((registry.remove<int, char>(icview.rbegin(), icview.rend())), 0u); in TEST()
1535 ASSERT_FALSE(registry.any_of<int>(entities[0u])); in TEST()
1536 ASSERT_FALSE(registry.all_of<int>(entities[1u])); in TEST()
1537 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1539 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
1540 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1541 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1543 ASSERT_EQ((registry.remove<int>(iview.begin(), iview.end())), 1u); in TEST()
1545 ASSERT_EQ(registry.remove<int>(entities[0u]), 0u); in TEST()
1546 ASSERT_EQ(registry.remove<int>(entities[1u]), 0u); in TEST()
1548 ASSERT_FALSE(registry.any_of<int>(entities[2u])); in TEST()
1549 ASSERT_EQ(registry.remove<int>(iview.begin(), iview.end()), 0u); in TEST()
1551 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1552 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1553 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1555 registry.insert<int>(std::begin(entities), std::end(entities)); in TEST()
1556 registry.insert<char>(std::begin(entities), std::end(entities)); in TEST()
1558 ASSERT_EQ(registry.size<int>(), 3u); in TEST()
1559 ASSERT_EQ(registry.size<char>(), 3u); in TEST()
1561 registry.remove<int, char>(std::begin(entities), std::end(entities)); in TEST()
1562 registry.remove<int, char>(std::begin(entities), std::end(entities)); in TEST()
1564 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1565 ASSERT_EQ(registry.size<char>(), 0u); in TEST()
1567 ASSERT_FALSE(registry.orphan(entities[0u])); in TEST()
1568 ASSERT_TRUE(registry.orphan(entities[1u])); in TEST()
1569 ASSERT_TRUE(registry.orphan(entities[2u])); in TEST()
1573 entt::registry registry; in TEST() local
1574 const auto iview = registry.view<int>(); in TEST()
1575 const auto icview = registry.view<int, stable_type>(); in TEST()
1578 registry.create(std::begin(entities), std::end(entities)); in TEST()
1580 registry.emplace<int>(entities[0u]); in TEST()
1581 registry.emplace<stable_type>(entities[0u]); in TEST()
1582 registry.emplace<double>(entities[0u]); in TEST()
1584 registry.emplace<int>(entities[1u]); in TEST()
1585 registry.emplace<stable_type>(entities[1u]); in TEST()
1587 registry.emplace<int>(entities[2u]); in TEST()
1589 ASSERT_TRUE(registry.any_of<int>(entities[0u])); in TEST()
1590 ASSERT_TRUE(registry.all_of<int>(entities[1u])); in TEST()
1591 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1593 registry.remove<int, stable_type>(entities[0u]); in TEST()
1595 ASSERT_EQ((registry.remove<int, stable_type>(icview.begin(), icview.end())), 2u); in TEST()
1596 ASSERT_EQ((registry.remove<int, stable_type>(icview.rbegin(), icview.rend())), 0u); in TEST()
1598 ASSERT_FALSE(registry.any_of<int>(entities[0u])); in TEST()
1599 ASSERT_FALSE(registry.all_of<int>(entities[1u])); in TEST()
1600 ASSERT_TRUE(registry.any_of<int>(entities[2u])); in TEST()
1602 ASSERT_EQ(registry.size<int>(), 1u); in TEST()
1603 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1604 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1606 ASSERT_EQ((registry.remove<int>(iview.begin(), iview.end())), 1u); in TEST()
1608 ASSERT_EQ(registry.remove<int>(entities[0u]), 0u); in TEST()
1609 ASSERT_EQ(registry.remove<int>(entities[1u]), 0u); in TEST()
1611 ASSERT_FALSE(registry.any_of<int>(entities[2u])); in TEST()
1613 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1614 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1615 ASSERT_EQ(registry.size<double>(), 1u); in TEST()
1619 entt::registry registry; in TEST() local
1622 registry.create(std::begin(entities), std::end(entities)); in TEST()
1624 registry.emplace<int>(entities[0u]); in TEST()
1625 registry.emplace<stable_type>(entities[0u]); in TEST()
1627 registry.emplace<int>(entities[1u]); in TEST()
1628 registry.emplace<stable_type>(entities[1u]); in TEST()
1630 ASSERT_EQ(registry.size<int>(), 2u); in TEST()
1631 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1633 registry.destroy(std::begin(entities), std::end(entities)); in TEST()
1635 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1636 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1638 registry.compact<int>(); in TEST()
1640 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1641 ASSERT_EQ(registry.size<stable_type>(), 2u); in TEST()
1643 registry.compact(); in TEST()
1645 ASSERT_EQ(registry.size<int>(), 0u); in TEST()
1646 ASSERT_EQ(registry.size<stable_type>(), 0u); in TEST()
1650 entt::registry registry; in TEST() local
1653 entity = registry.create(); in TEST()
1654 registry.emplace<int>(entity); in TEST()
1655 registry.emplace<char>(entity); in TEST()
1657 const auto group = registry.group<>(entt::get<int, char>); in TEST()
1659 entity = registry.create(); in TEST()
1660 registry.emplace<int>(entity); in TEST()
1661 registry.emplace<char>(entity); in TEST()
1670 entt::registry registry; in TEST() local
1673 entity = registry.create(); in TEST()
1674 registry.emplace<int>(entity); in TEST()
1675 registry.emplace<char>(entity); in TEST()
1677 const auto group = registry.group<int, char>(); in TEST()
1679 entity = registry.create(); in TEST()
1680 registry.emplace<int>(entity); in TEST()
1681 registry.emplace<char>(entity); in TEST()
1690 entt::registry registry; in TEST() local
1693 entity = registry.create(); in TEST()
1694 registry.emplace<int>(entity); in TEST()
1695 registry.emplace<char>(entity); in TEST()
1697 const auto group = registry.group<int>(entt::get<char>); in TEST()
1699 entity = registry.create(); in TEST()
1700 registry.emplace<int>(entity); in TEST()
1701 registry.emplace<char>(entity); in TEST()
1710 entt::registry registry; in TEST() local
1711 const auto group = registry.group<>(entt::get<int, char>); in TEST()
1713 const auto e0 = registry.create(); in TEST()
1714 registry.emplace<int>(e0, 0); in TEST()
1715 registry.emplace<char>(e0, '0'); in TEST()
1717 const auto e1 = registry.create(); in TEST()
1718 registry.emplace<int>(e1, 1); in TEST()
1719 registry.emplace<char>(e1, '1'); in TEST()
1721 registry.sort<int>(std::greater{}); in TEST()
1722 registry.sort<char>(std::less{}); in TEST()
1724 const auto e2 = registry.create(); in TEST()
1725 registry.emplace<int>(e2, 2); in TEST()
1726 registry.emplace<char>(e2, '2'); in TEST()
1743 entt::registry registry; in TEST() local
1744 const auto entity = registry.create(); in TEST()
1745 const auto value = registry.get_or_emplace<int>(entity, 3); in TEST()
1746 ASSERT_TRUE(registry.all_of<int>(entity)); in TEST()
1747 ASSERT_EQ(registry.get<int>(entity), value); in TEST()
1748 ASSERT_EQ(registry.get<int>(entity), 3); in TEST()
1752 entt::registry registry; in TEST() local
1754 static_assert((std::is_same_v<decltype(registry.emplace<int>({})), int &>)); in TEST()
1755 static_assert((std::is_same_v<decltype(registry.emplace<empty_type>({})), void>)); in TEST()
1757 static_assert((std::is_same_v<decltype(registry.get<int>({})), int &>)); in TEST()
1758 …static_assert((std::is_same_v<decltype(registry.get<int, const char>({})), std::tuple<int &, const… in TEST()
1760 static_assert((std::is_same_v<decltype(registry.try_get<int>({})), int *>)); in TEST()
1761 …static_assert((std::is_same_v<decltype(registry.try_get<int, const char>({})), std::tuple<int *, c… in TEST()
1763 static_assert((std::is_same_v<decltype(registry.ctx<int>()), int &>)); in TEST()
1764 static_assert((std::is_same_v<decltype(registry.ctx<const char>()), const char &>)); in TEST()
1766 static_assert((std::is_same_v<decltype(registry.try_ctx<int>()), int *>)); in TEST()
1767 static_assert((std::is_same_v<decltype(registry.try_ctx<const char>()), const char *>)); in TEST()
1769 static_assert((std::is_same_v<decltype(std::as_const(registry).get<int>({})), const int &>)); in TEST()
1770 …static_assert((std::is_same_v<decltype(std::as_const(registry).get<int, const char>({})), std::tup… in TEST()
1772 … static_assert((std::is_same_v<decltype(std::as_const(registry).try_get<int>({})), const int *>)); in TEST()
1773 …static_assert((std::is_same_v<decltype(std::as_const(registry).try_get<int, const char>({})), std:… in TEST()
1775 static_assert((std::is_same_v<decltype(std::as_const(registry).ctx<int>()), const int &>)); in TEST()
1776 …static_assert((std::is_same_v<decltype(std::as_const(registry).ctx<const char>()), const char &>)); in TEST()
1778 static_assert((std::is_same_v<decltype(std::as_const(registry).try_ctx<int>()), const int *>)); in TEST()
1779 …static_assert((std::is_same_v<decltype(std::as_const(registry).try_ctx<const char>()), const char … in TEST()
1783 entt::registry registry; in TEST() local
1785 registry.emplace<std::unique_ptr<int>>(registry.create()); in TEST()
1789 entt::registry registry; in TEST() local
1791 registry.emplace<non_default_constructible>(registry.create(), 42); in TEST()
1795 entt::registry registry; in TEST() local
1796 const auto entity = registry.create(); in TEST()
1799 constexpr auto emplace_or_replace = &entt::registry::emplace_or_replace<double>; in TEST()
1800 constexpr auto remove = &entt::registry::remove<double>; in TEST()
1802 registry.on_construct<int>().connect<emplace_or_replace>(); in TEST()
1803 registry.on_destroy<int>().connect<remove>(); in TEST()
1804 registry.emplace<double>(entity, .3); in TEST()
1806 ASSERT_FALSE(registry.all_of<int>(entity)); in TEST()
1807 ASSERT_EQ(registry.get<double>(entity), .3); in TEST()
1809 registry.emplace<int>(entity); in TEST()
1811 ASSERT_TRUE(registry.all_of<int>(entity)); in TEST()
1812 ASSERT_EQ(registry.get<double>(entity), .0); in TEST()
1814 registry.erase<int>(entity); in TEST()
1816 ASSERT_FALSE((registry.any_of<int, double>(entity))); in TEST()
1818 registry.on_construct<int>().disconnect<emplace_or_replace>(); in TEST()
1819 registry.on_destroy<int>().disconnect<remove>(); in TEST()
1820 registry.emplace<int>(entity); in TEST()
1822 ASSERT_TRUE((registry.any_of<int, double>(entity))); in TEST()
1823 ASSERT_FALSE(registry.all_of<double>(entity)); in TEST()
1827 entt::registry registry; in TEST() local
1828 registry.on_construct<int>().connect<&listener::sort<int>>(); in TEST()
1829 registry.emplace<int>(registry.create(), 0); in TEST()
1831 ASSERT_EQ(registry.emplace<int>(registry.create(), 1), 1); in TEST()
1835 entt::registry registry; in TEST() local
1837 registry.create(std::begin(entities), std::end(entities)); in TEST()
1838 registry.release(entities[1]); in TEST()
1839 registry.release(entities[2]); in TEST()
1841 entt::registry other; in TEST()
1842 const auto *data = registry.data(); in TEST()
1843 other.assign(data, data + registry.size(), registry.released()); in TEST()
1845 ASSERT_EQ(registry.size(), other.size()); in TEST()
1849 ASSERT_EQ(registry.create(), other.create()); in TEST()
1854 entt::registry registry; in TEST() local
1855 const auto entity = registry.create(); in TEST()
1856 const auto other = registry.create(); in TEST()
1858 registry.emplace<int>(entity); in TEST()
1859 registry.emplace<double>(other); in TEST()
1860 registry.emplace<char>(entity); in TEST()
1864 registry.visit([&hasType](auto info) { in TEST()
1874 registry.visit(entity, [&hasType](auto info) { in TEST()
1884 registry.visit(other, [&hasType](auto info) { in TEST()
1896 entt::registry registry; in TEST() local
1897 registry.on_destroy<int>().connect<&listener::sort<int>>(); in TEST()
1900 const auto entity = registry.create(); in TEST()
1901 registry.emplace<int>(entity, static_cast<int>(i)); in TEST()
1904 registry.destroy(registry.view<int>().back()); in TEST()
1907 registry.view<const int>().each([](const auto entity, const auto &value) { in TEST()