#include #include #include #include #include #include struct Position { uint64_t x; uint64_t y; }; struct Velocity { uint64_t x; uint64_t y; }; struct Timer final { Timer(): start{std::chrono::system_clock::now()} {} void elapsed() { auto now = std::chrono::system_clock::now(); std::cout << std::chrono::duration(now - start).count() << " seconds" << std::endl; } private: std::chrono::time_point start; }; using registry_type = entt::DefaultRegistry; TEST(DefaultRegistry, Construct) { registry_type registry; std::cout << "Constructing 10000000 entities" << std::endl; Timer timer; for (uint64_t i = 0; i < 10000000L; i++) { registry.create(); } timer.elapsed(); registry.reset(); } TEST(DefaultRegistry, Destroy) { registry_type registry; std::vector entities{}; std::cout << "Destroying 10000000 entities" << std::endl; for (uint64_t i = 0; i < 10000000L; i++) { entities.push_back(registry.create()); } Timer timer; for (auto entity: entities) { registry.destroy(entity); } timer.elapsed(); } TEST(DefaultRegistry, IterateSingleComponent) { registry_type registry; std::cout << "Iterating over 10000000 entities, one component" << std::endl; for (uint64_t i = 0; i < 10000000L; i++) { registry.create(); } Timer timer; auto view = registry.view(); for(auto entity: view) { auto &position = registry.get(entity); (void)position; } timer.elapsed(); registry.reset(); } TEST(DefaultRegistry, IterateCreateDeleteSingleComponent) { registry_type registry; std::cout << "Looping 10000 times creating and deleting a random number of entities" << std::endl; Timer timer; for(int i = 0; i < 10000; i++) { for(int j = 0; j < 10000; j++) { registry.create(); } auto view = registry.view(); for(auto entity: view) { if(rand() % 2 == 0) { registry.destroy(entity); } } } timer.elapsed(); registry.reset(); } TEST(DefaultRegistry, IterateTwoComponents) { registry_type registry; std::cout << "Iterating over 10000000 entities, two components" << std::endl; for (uint64_t i = 0; i < 10000000L; i++) { registry.create(); } Timer timer; auto view = registry.view(); for(auto entity: view) { auto &position = registry.get(entity); auto &velocity = registry.get(entity); (void)position; (void)velocity; } timer.elapsed(); registry.reset(); }