|
28 | 28 |
|
29 | 29 | using namespace gz::sim;
|
30 | 30 |
|
| 31 | +constexpr System::PriorityType kPriority = 64; |
| 32 | + |
31 | 33 | /////////////////////////////////////////////////
|
32 | 34 | class SystemWithConfigure:
|
33 | 35 | public System,
|
@@ -69,6 +71,16 @@ class SystemWithUpdates:
|
69 | 71 | const EntityComponentManager &) override {};
|
70 | 72 | };
|
71 | 73 |
|
| 74 | +///////////////////////////////////////////////// |
| 75 | +class SystemWithPrioritizedUpdates: |
| 76 | + public SystemWithUpdates, |
| 77 | + public ISystemConfigurePriority |
| 78 | +{ |
| 79 | + // Documentation inherited |
| 80 | + public: System::PriorityType ConfigurePriority() override |
| 81 | + { return kPriority; } |
| 82 | +}; |
| 83 | + |
72 | 84 | /////////////////////////////////////////////////
|
73 | 85 | TEST(SystemManager, Constructor)
|
74 | 86 | {
|
@@ -127,32 +139,40 @@ TEST(SystemManager, AddSystemNoEcm)
|
127 | 139 | EXPECT_EQ(1u, systemMgr.TotalByEntity(configEntity).size());
|
128 | 140 |
|
129 | 141 | auto updateSystem = std::make_shared<SystemWithUpdates>();
|
| 142 | + auto prioritizedSystem = |
| 143 | + std::make_shared<SystemWithPrioritizedUpdates>(); |
130 | 144 | Entity updateEntity{456u};
|
131 | 145 | systemMgr.AddSystem(updateSystem, updateEntity, nullptr);
|
| 146 | + systemMgr.AddSystem(prioritizedSystem, updateEntity, nullptr); |
132 | 147 | EXPECT_EQ(1u, systemMgr.ActiveCount());
|
133 |
| - EXPECT_EQ(1u, systemMgr.PendingCount()); |
134 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 148 | + EXPECT_EQ(2u, systemMgr.PendingCount()); |
| 149 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
135 | 150 | EXPECT_EQ(1u, systemMgr.SystemsConfigure().size());
|
136 | 151 | EXPECT_EQ(0u, systemMgr.SystemsPreUpdate().size());
|
137 | 152 | EXPECT_EQ(0u, systemMgr.SystemsUpdate().size());
|
138 | 153 | EXPECT_EQ(0u, systemMgr.SystemsPostUpdate().size());
|
139 |
| - EXPECT_EQ(1u, systemMgr.TotalByEntity(updateEntity).size()); |
| 154 | + EXPECT_EQ(2u, systemMgr.TotalByEntity(updateEntity).size()); |
140 | 155 |
|
141 | 156 | systemMgr.ActivatePendingSystems();
|
142 |
| - EXPECT_EQ(2u, systemMgr.ActiveCount()); |
| 157 | + EXPECT_EQ(3u, systemMgr.ActiveCount()); |
143 | 158 | EXPECT_EQ(0u, systemMgr.PendingCount());
|
144 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 159 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
145 | 160 | EXPECT_EQ(1u, systemMgr.SystemsConfigure().size());
|
146 |
| - // Expect PreUpdate and Update to contain one map entry with Priority 0 and |
147 |
| - // a vector of length 1. |
148 |
| - EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().size()); |
| 161 | + // Expect PreUpdate and Update to contain two map entries: |
| 162 | + // 1. Priority {0} and a vector of length 1. |
| 163 | + // 2. Priority {kPriority} and a vector of length 1. |
| 164 | + EXPECT_EQ(2u, systemMgr.SystemsPreUpdate().size()); |
149 | 165 | EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(0));
|
| 166 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(kPriority)); |
150 | 167 | EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(0).size());
|
151 |
| - EXPECT_EQ(1u, systemMgr.SystemsUpdate().size()); |
| 168 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(kPriority).size()); |
| 169 | + EXPECT_EQ(2u, systemMgr.SystemsUpdate().size()); |
152 | 170 | EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(0));
|
| 171 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(kPriority)); |
153 | 172 | EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(0).size());
|
154 |
| - EXPECT_EQ(1u, systemMgr.SystemsPostUpdate().size()); |
155 |
| - EXPECT_EQ(1u, systemMgr.TotalByEntity(updateEntity).size()); |
| 173 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(kPriority).size()); |
| 174 | + EXPECT_EQ(2u, systemMgr.SystemsPostUpdate().size()); |
| 175 | + EXPECT_EQ(2u, systemMgr.TotalByEntity(updateEntity).size()); |
156 | 176 | }
|
157 | 177 |
|
158 | 178 | /////////////////////////////////////////////////
|
@@ -201,23 +221,37 @@ TEST(SystemManager, AddSystemEcm)
|
201 | 221 | EXPECT_EQ(0u, systemMgr.SystemsPostUpdate().size());
|
202 | 222 |
|
203 | 223 | auto updateSystem = std::make_shared<SystemWithUpdates>();
|
| 224 | + auto prioritizedSystem = |
| 225 | + std::make_shared<SystemWithPrioritizedUpdates>(); |
204 | 226 | systemMgr.AddSystem(updateSystem, kNullEntity, nullptr);
|
| 227 | + systemMgr.AddSystem(prioritizedSystem, kNullEntity, nullptr); |
205 | 228 | EXPECT_EQ(1u, systemMgr.ActiveCount());
|
206 |
| - EXPECT_EQ(1u, systemMgr.PendingCount()); |
207 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 229 | + EXPECT_EQ(2u, systemMgr.PendingCount()); |
| 230 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
208 | 231 | EXPECT_EQ(1u, systemMgr.SystemsConfigure().size());
|
209 | 232 | EXPECT_EQ(0u, systemMgr.SystemsPreUpdate().size());
|
210 | 233 | EXPECT_EQ(0u, systemMgr.SystemsUpdate().size());
|
211 | 234 | EXPECT_EQ(0u, systemMgr.SystemsPostUpdate().size());
|
212 | 235 |
|
213 | 236 | systemMgr.ActivatePendingSystems();
|
214 |
| - EXPECT_EQ(2u, systemMgr.ActiveCount()); |
| 237 | + EXPECT_EQ(3u, systemMgr.ActiveCount()); |
215 | 238 | EXPECT_EQ(0u, systemMgr.PendingCount());
|
216 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 239 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
217 | 240 | EXPECT_EQ(1u, systemMgr.SystemsConfigure().size());
|
218 |
| - EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().size()); |
219 |
| - EXPECT_EQ(1u, systemMgr.SystemsUpdate().size()); |
220 |
| - EXPECT_EQ(1u, systemMgr.SystemsPostUpdate().size()); |
| 241 | + // Expect PreUpdate and Update to contain two map entries: |
| 242 | + // 1. Priority {0} and a vector of length 1. |
| 243 | + // 2. Priority {kPriority} and a vector of length 1. |
| 244 | + EXPECT_EQ(2u, systemMgr.SystemsPreUpdate().size()); |
| 245 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(0)); |
| 246 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(kPriority)); |
| 247 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(0).size()); |
| 248 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(kPriority).size()); |
| 249 | + EXPECT_EQ(2u, systemMgr.SystemsUpdate().size()); |
| 250 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(0)); |
| 251 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(kPriority)); |
| 252 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(0).size()); |
| 253 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(kPriority).size()); |
| 254 | + EXPECT_EQ(2u, systemMgr.SystemsPostUpdate().size()); |
221 | 255 | }
|
222 | 256 |
|
223 | 257 | /////////////////////////////////////////////////
|
@@ -247,28 +281,42 @@ TEST(SystemManager, AddAndRemoveSystemEcm)
|
247 | 281 | auto entity = ecm.CreateEntity();
|
248 | 282 |
|
249 | 283 | auto updateSystemWithChild = std::make_shared<SystemWithUpdates>();
|
| 284 | + auto prioritizedSystemWithChild = |
| 285 | + std::make_shared<SystemWithPrioritizedUpdates>(); |
250 | 286 | systemMgr.AddSystem(updateSystemWithChild, entity, nullptr);
|
| 287 | + systemMgr.AddSystem(prioritizedSystemWithChild, entity, nullptr); |
251 | 288 |
|
252 | 289 | // Configure called during AddSystem
|
253 | 290 | EXPECT_EQ(1, configSystem->configured);
|
254 | 291 | EXPECT_EQ(1, configSystem->configuredParameters);
|
255 | 292 |
|
256 | 293 | EXPECT_EQ(0u, systemMgr.ActiveCount());
|
257 |
| - EXPECT_EQ(2u, systemMgr.PendingCount()); |
258 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 294 | + EXPECT_EQ(3u, systemMgr.PendingCount()); |
| 295 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
259 | 296 | EXPECT_EQ(0u, systemMgr.SystemsConfigure().size());
|
260 | 297 | EXPECT_EQ(0u, systemMgr.SystemsPreUpdate().size());
|
261 | 298 | EXPECT_EQ(0u, systemMgr.SystemsUpdate().size());
|
262 | 299 | EXPECT_EQ(0u, systemMgr.SystemsPostUpdate().size());
|
263 | 300 |
|
264 | 301 | systemMgr.ActivatePendingSystems();
|
265 |
| - EXPECT_EQ(2u, systemMgr.ActiveCount()); |
| 302 | + EXPECT_EQ(3u, systemMgr.ActiveCount()); |
266 | 303 | EXPECT_EQ(0u, systemMgr.PendingCount());
|
267 |
| - EXPECT_EQ(2u, systemMgr.TotalCount()); |
| 304 | + EXPECT_EQ(3u, systemMgr.TotalCount()); |
268 | 305 | EXPECT_EQ(1u, systemMgr.SystemsConfigure().size());
|
269 |
| - EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().size()); |
270 |
| - EXPECT_EQ(1u, systemMgr.SystemsUpdate().size()); |
271 |
| - EXPECT_EQ(1u, systemMgr.SystemsPostUpdate().size()); |
| 306 | + // Expect PreUpdate and Update to contain two map entries: |
| 307 | + // 1. Priority {0} and a vector of length 1. |
| 308 | + // 2. Priority {kPriority} and a vector of length 1. |
| 309 | + EXPECT_EQ(2u, systemMgr.SystemsPreUpdate().size()); |
| 310 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(0)); |
| 311 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().count(kPriority)); |
| 312 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(0).size()); |
| 313 | + EXPECT_EQ(1u, systemMgr.SystemsPreUpdate().at(kPriority).size()); |
| 314 | + EXPECT_EQ(2u, systemMgr.SystemsUpdate().size()); |
| 315 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(0)); |
| 316 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().count(kPriority)); |
| 317 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(0).size()); |
| 318 | + EXPECT_EQ(1u, systemMgr.SystemsUpdate().at(kPriority).size()); |
| 319 | + EXPECT_EQ(2u, systemMgr.SystemsPostUpdate().size()); |
272 | 320 |
|
273 | 321 | // Remove the entity
|
274 | 322 | ecm.RequestRemoveEntity(entity);
|
|
0 commit comments