1818#include " antara/gaming/ecs/system.hpp"
1919#include " antara/gaming/ecs/system.manager.hpp"
2020
21- class logic_concrete_system final : public antara::gaming::ecs::logic_update_system<logic_concrete_system>
22- {
21+ class logic_concrete_system final : public antara::gaming::ecs::logic_update_system<logic_concrete_system> {
2322public:
24- logic_concrete_system (entt::registry ®istry) : system(registry)
25- {
23+ logic_concrete_system (entt::registry ®istry) : system(registry) {
2624
2725 }
2826
2927 logic_concrete_system () = default ;
3028
31- void update () noexcept final
32- {
29+ void update () noexcept final {
3330
3431 }
3532
3633 ~logic_concrete_system () noexcept final = default ;
3734};
3835
39- class pre_concrete_system final : public antara::gaming::ecs::pre_update_system<pre_concrete_system>
40- {
36+ class pre_concrete_system final : public antara::gaming::ecs::pre_update_system<pre_concrete_system> {
4137public:
42- pre_concrete_system (entt::registry ®istry) noexcept : system(registry)
43- {
38+ pre_concrete_system (entt::registry ®istry) noexcept : system(registry) {
4439
4540 }
4641
4742
48- void update () noexcept final
49- {
43+ void update () noexcept final {
5044
5145 }
5246
@@ -56,99 +50,91 @@ class pre_concrete_system final : public antara::gaming::ecs::pre_update_system<
5650REFL_AUTO (type(logic_concrete_system))
5751REFL_AUTO(type(pre_concrete_system))
5852
59- namespace antara::gaming::ecs::tests
60- {
61- TEST_SUITE (" system manager test suite" )
62- {
53+ namespace antara::gaming::ecs::tests {
54+ TEST_CASE (" add system" ) {
6355 entt::registry registry;
64- entt::dispatcher& dispatcher{registry.set <entt::dispatcher>()};
56+ entt::dispatcher & dispatcher{registry.set <entt::dispatcher>()};
6557 system_manager manager{registry};
6658 const system_manager &c_mgr = manager;
67-
68- TEST_CASE (" add system" )
69- {
70- manager.start ();
71- CHECK_EQ (manager.nb_systems (), 0u );
72- manager.create_system <logic_concrete_system>();
73- CHECK (manager.has_system <logic_concrete_system>());
74- CHECK_EQ (manager.nb_systems (), 1u );
75- CHECK_EQ (manager.nb_systems (logic_concrete_system::get_system_type ()), 1u );
76- manager.create_system <logic_concrete_system>();
77- CHECK_EQ (manager.nb_systems (), 1u );
78- CHECK_EQ (manager.nb_systems (logic_concrete_system::get_system_type ()), 1u );
79-
80- // ! evt
81- ecs::event::add_base_system evt (std::make_unique<pre_concrete_system>(registry));
82- manager.receive_add_base_system (evt);
83- manager.update ();
84- CHECK_EQ (manager.nb_systems (), 2u );
85- CHECK (manager.mark_system <pre_concrete_system>());
86- manager.update ();
87- CHECK_EQ (manager.nb_systems (), 1u );
88- }
89-
90- TEST_CASE (" remove system" )
91- {
92- CHECK_EQ (manager.nb_systems (), 1u );
93- CHECK (manager.mark_system <logic_concrete_system>());
94- manager.update ();
95- CHECK_FALSE (manager.has_system <logic_concrete_system>());
96- CHECK_EQ (manager.nb_systems (), 0u );
97- CHECK_FALSE (manager.mark_system <logic_concrete_system>());
98- }
99-
100- TEST_CASE (" add multiple systems" )
101- {
102- manager.load_systems <logic_concrete_system, pre_concrete_system>();
103- CHECK_EQ (manager.nb_systems (), 2u );
104- CHECK (manager.has_systems <logic_concrete_system, pre_concrete_system>());
105- }
106-
107- TEST_CASE (" update/enable/disable systems from specific type" )
108- {
109- CHECK_EQ (manager.update_systems (pre_update), 1ull );
110- CHECK (manager.disable_system <pre_concrete_system>());
111- CHECK_EQ (manager.update_systems (pre_update), 0ull );
112- CHECK (manager.enable_system <pre_concrete_system>());
113-
114- CHECK (manager.disable_systems <logic_concrete_system, pre_concrete_system>());
115- CHECK_EQ (manager.update (), 0ull );
116- CHECK (manager.enable_systems <logic_concrete_system, pre_concrete_system>());
117- CHECK_GE (manager.update (), 1ull );
118- }
119-
120- TEST_CASE (" get single system" )
121- {
122- auto &logic_system = manager.get_system <logic_concrete_system>();
123-
124- const auto & c_logic_system = c_mgr.get_system <logic_concrete_system>();
125- CHECK_EQ (logic_system.get_name (), " logic_concrete_system" );
126- CHECK_EQ (c_logic_system.get_name (), " logic_concrete_system" );
127- }
128-
129- TEST_CASE (" get multiple systems" )
130- {
131- auto && [lgc_sys, pre_sys] = manager.get_systems <logic_concrete_system, pre_concrete_system>();
132- CHECK_EQ (lgc_sys.get_name (), " logic_concrete_system" );
133- CHECK_EQ (pre_sys.get_name (), " pre_concrete_system" );
134-
135- auto && [c_lgc_sys, c_pre_sys] = c_mgr.get_systems <logic_concrete_system, pre_concrete_system>();
136- CHECK_EQ (c_lgc_sys.get_name (), " logic_concrete_system" );
137- CHECK_EQ (c_pre_sys.get_name (), " pre_concrete_system" );
138- }
139-
140- TEST_CASE (" marked multiple systems" )
141- {
142- CHECK (manager.has_systems <logic_concrete_system, pre_concrete_system>());
143- CHECK (manager.mark_systems <logic_concrete_system, pre_concrete_system>());
144- manager.update ();
145- CHECK_FALSE (manager.has_systems <logic_concrete_system, pre_concrete_system>());
146- CHECK_FALSE (manager.enable_systems <logic_concrete_system, pre_concrete_system>());
147- CHECK_FALSE (manager.disable_systems <logic_concrete_system, pre_concrete_system>());
148- CHECK_EQ (0ull , manager.update ());
149- CHECK_EQ (0ull , manager.nb_systems ());
150- // manager.get_systems<logic_concrete_system, pre_concrete_system>(); //UBSAN
151- // c_mgr.get_systems<logic_concrete_system, pre_concrete_system>(); // UBSAN
152- }
59+ manager.start ();
60+
61+ // ! add
62+ CHECK_EQ (manager.nb_systems (), 0u );
63+ manager.create_system <logic_concrete_system>();
64+ CHECK (manager.has_system <logic_concrete_system>());
65+ CHECK_EQ (manager.nb_systems (), 1u );
66+ CHECK_EQ (manager.nb_systems (logic_concrete_system::get_system_type ()), 1u );
67+ manager.create_system <logic_concrete_system>();
68+ CHECK_EQ (manager.nb_systems (), 1u );
69+ CHECK_EQ (manager.nb_systems (logic_concrete_system::get_system_type ()), 1u );
70+
71+ // ! evt
72+ ecs::event::add_base_system evt (std::make_unique<pre_concrete_system>(registry));
73+ manager.receive_add_base_system (evt);
74+ manager.update ();
75+ CHECK_EQ (manager.nb_systems (), 2u );
76+ CHECK (manager.mark_system <pre_concrete_system>());
77+ manager.update ();
78+ CHECK_EQ (manager.nb_systems (), 1u );
79+
80+ manager.create_system_rt <pre_concrete_system>();
81+ CHECK_EQ (manager.nb_systems (), 1u );
82+ manager.update ();
83+ CHECK_EQ (manager.nb_systems (), 2u );
84+ CHECK (manager.mark_system <pre_concrete_system>());
85+ manager.update ();
86+ CHECK_EQ (manager.nb_systems (), 1u );
87+
88+
89+ // ! remove
90+ CHECK_EQ (manager.nb_systems (), 1u );
91+ CHECK (manager.mark_system <logic_concrete_system>());
92+ manager.update ();
93+ CHECK_FALSE (manager.has_system <logic_concrete_system>());
94+ CHECK_EQ (manager.nb_systems (), 0u );
95+ CHECK_FALSE (manager.mark_system <logic_concrete_system>());
96+
97+
98+ // ! add multiple
99+ manager.load_systems <logic_concrete_system, pre_concrete_system>();
100+ CHECK_EQ (manager.nb_systems (), 2u );
101+ CHECK (manager.has_systems <logic_concrete_system, pre_concrete_system>());
102+
103+ // ! update/enable/disable systems from specific type
104+ CHECK_EQ (manager.update_systems (pre_update), 1ull );
105+ CHECK (manager.disable_system <pre_concrete_system>());
106+ CHECK_EQ (manager.update_systems (pre_update), 0ull );
107+ CHECK (manager.enable_system <pre_concrete_system>());
108+
109+ CHECK (manager.disable_systems <logic_concrete_system, pre_concrete_system>());
110+ CHECK_EQ (manager.update (), 0ull );
111+ CHECK (manager.enable_systems <logic_concrete_system, pre_concrete_system>());
112+ CHECK_GE (manager.update (), 1ull );
113+
114+ // ! get single
115+ auto &logic_system = manager.get_system <logic_concrete_system>();
116+
117+ const auto &c_logic_system = c_mgr.get_system <logic_concrete_system>();
118+ CHECK_EQ (logic_system.get_name (), " logic_concrete_system" );
119+ CHECK_EQ (c_logic_system.get_name (), " logic_concrete_system" );
120+
121+ // ! get multiple
122+ auto &&[lgc_sys, pre_sys] = manager.get_systems <logic_concrete_system, pre_concrete_system>();
123+ CHECK_EQ (lgc_sys.get_name (), " logic_concrete_system" );
124+ CHECK_EQ (pre_sys.get_name (), " pre_concrete_system" );
125+
126+ auto &&[c_lgc_sys, c_pre_sys] = c_mgr.get_systems <logic_concrete_system, pre_concrete_system>();
127+ CHECK_EQ (c_lgc_sys.get_name (), " logic_concrete_system" );
128+ CHECK_EQ (c_pre_sys.get_name (), " pre_concrete_system" );
129+
130+ // ! marked multiple
131+ CHECK (manager.has_systems <logic_concrete_system, pre_concrete_system>());
132+ CHECK (manager.mark_systems <logic_concrete_system, pre_concrete_system>());
133+ manager.update ();
134+ CHECK_FALSE (manager.has_systems <logic_concrete_system, pre_concrete_system>());
135+ CHECK_FALSE (manager.enable_systems <logic_concrete_system, pre_concrete_system>());
136+ CHECK_FALSE (manager.disable_systems <logic_concrete_system, pre_concrete_system>());
137+ CHECK_EQ (0ull , manager.update ());
138+ CHECK_EQ (0ull , manager.nb_systems ());
153139 }
154140}
0 commit comments