comparison OrthancStone/UnitTestsSources/TestStrategy.cpp @ 1877:a2955abe4c2e

skeleton for the RenderingPlugin
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 Jan 2022 08:23:38 +0100
parents UnitTestsSources/TestStrategy.cpp@7053b8a0aaec
children 07964689cb0b
comparison
equal deleted inserted replaced
1876:b1f510e601d2 1877:a2955abe4c2e
1 /**
2 * Stone of Orthanc
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017-2022 Osimis S.A., Belgium
6 * Copyright (C) 2021-2022 Sebastien Jodogne, ICTEAM UCLouvain, Belgium
7 *
8 * This program is free software: you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation, either version 3 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this program. If not, see
20 * <http://www.gnu.org/licenses/>.
21 **/
22
23
24 #include <gtest/gtest.h>
25
26 #include "../Sources/Loaders/BasicFetchingStrategy.h"
27 #include "../Sources/Loaders/BasicFetchingItemsSorter.h"
28
29 #include <OrthancException.h>
30
31
32 namespace
33 {
34 class StrategyTester : public boost::noncopyable
35 {
36 private:
37 std::map<unsigned int, unsigned int> qualities_;
38
39 public:
40 bool IsValidCommand(unsigned int item,
41 unsigned int quality)
42 {
43 if (qualities_.find(item) != qualities_.end() &&
44 qualities_[item] >= quality)
45 {
46 return false;
47 }
48 else
49 {
50 qualities_[item] = quality;
51 return true;
52 }
53 }
54
55 bool HasFinished(OrthancStone::BasicFetchingStrategy& strategy)
56 {
57 for (unsigned int i = 0; i < strategy.GetItemsCount(); i++)
58 {
59 if (qualities_.find(i) == qualities_.end() ||
60 qualities_[i] != strategy.GetMaxQuality())
61 {
62 return false;
63 }
64 }
65
66 return true;
67 }
68 };
69 }
70
71
72 TEST(BasicFetchingStrategy, Test1)
73 {
74 ASSERT_THROW(OrthancStone::BasicFetchingStrategy(NULL, 0), Orthanc::OrthancException);
75 ASSERT_THROW(OrthancStone::BasicFetchingStrategy(new OrthancStone::BasicFetchingItemsSorter(0), 0), Orthanc::OrthancException);
76
77 {
78 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(1), 0);
79 unsigned int i, q;
80 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(0u, q);
81 ASSERT_FALSE(s.GetNext(i, q));
82 }
83
84 {
85 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(1), 5);
86 unsigned int i, q;
87 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(5u, q);
88 ASSERT_FALSE(s.GetNext(i, q));
89 }
90
91 {
92 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(2), 2);
93 unsigned int i, q;
94 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(2u, q);
95 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(1u, q);
96 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(2u, q);
97 ASSERT_FALSE(s.GetNext(i, q));
98 }
99
100 {
101 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(3), 2);
102 unsigned int i, q;
103 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(2u, q);
104 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(1u, q);
105 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(1u, q);
106 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(2u, q);
107 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(2u, q);
108 ASSERT_FALSE(s.GetNext(i, q));
109 }
110
111 {
112 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(3), 2);
113 s.SetBlockSize(1);
114 s.SetCurrent(0);
115 unsigned int i, q;
116 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(2u, q);
117 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(1u, q);
118 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(2u, q);
119 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(0u, q);
120 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(1u, q);
121 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(2u, q);
122 ASSERT_FALSE(s.GetNext(i, q));
123 }
124
125 {
126 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(5), 0);
127 ASSERT_THROW(s.SetCurrent(5), Orthanc::OrthancException);
128 s.SetCurrent(2);
129
130 unsigned int i, q;
131 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(0u, q);
132 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(3u, i); ASSERT_EQ(0u, q);
133 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(0u, q);
134 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(4u, i); ASSERT_EQ(0u, q);
135 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(0u, q);
136 ASSERT_FALSE(s.GetNext(i, q));
137 }
138
139 {
140 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(5), 0);
141 s.SetCurrent(4);
142
143 unsigned int i, q;
144 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(4u, i); ASSERT_EQ(0u, q);
145 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(3u, i); ASSERT_EQ(0u, q);
146 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(2u, i); ASSERT_EQ(0u, q);
147 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(1u, i); ASSERT_EQ(0u, q);
148 ASSERT_TRUE(s.GetNext(i, q)); ASSERT_EQ(0u, i); ASSERT_EQ(0u, q);
149 ASSERT_FALSE(s.GetNext(i, q));
150 }
151 }
152
153
154 TEST(BasicFetchingStrategy, Test2)
155 {
156 OrthancStone::BasicFetchingStrategy s(new OrthancStone::BasicFetchingItemsSorter(20), 2);
157 ASSERT_EQ(20u, s.GetItemsCount());
158 ASSERT_EQ(2u, s.GetMaxQuality());
159
160 StrategyTester t;
161
162 s.SetCurrent(10);
163
164 unsigned int i, q;
165 while (s.GetNext(i, q))
166 {
167 ASSERT_TRUE(t.IsValidCommand(i, q));
168 }
169
170 ASSERT_TRUE(t.HasFinished(s));
171 }
172
173
174
175
176 TEST(BasicFetchingItemsSorter, Small)
177 {
178 ASSERT_THROW(OrthancStone::BasicFetchingItemsSorter(0), Orthanc::OrthancException);
179 std::vector<unsigned int> v;
180
181 {
182 OrthancStone::BasicFetchingItemsSorter s(1);
183 s.Sort(v, 0);
184 ASSERT_EQ(1u, v.size());
185 ASSERT_EQ(0u, v[0]);
186
187 ASSERT_THROW(s.Sort(v, 1), Orthanc::OrthancException);
188 }
189
190 {
191 OrthancStone::BasicFetchingItemsSorter s(2);
192 s.Sort(v, 0);
193 ASSERT_EQ(2u, v.size());
194 ASSERT_EQ(0u, v[0]);
195 ASSERT_EQ(1u, v[1]);
196
197 s.Sort(v, 1);
198 ASSERT_EQ(2u, v.size());
199 ASSERT_EQ(1u, v[0]);
200 ASSERT_EQ(0u, v[1]);
201
202 ASSERT_THROW(s.Sort(v, 2), Orthanc::OrthancException);
203 }
204
205 {
206 OrthancStone::BasicFetchingItemsSorter s(3);
207 s.Sort(v, 0);
208 ASSERT_EQ(3u, v.size());
209 ASSERT_EQ(0u, v[0]);
210 ASSERT_EQ(1u, v[1]);
211 ASSERT_EQ(2u, v[2]);
212
213 s.Sort(v, 1);
214 ASSERT_EQ(3u, v.size());
215 ASSERT_EQ(1u, v[0]);
216 ASSERT_EQ(2u, v[1]);
217 ASSERT_EQ(0u, v[2]);
218
219 s.Sort(v, 2);
220 ASSERT_EQ(3u, v.size());
221 ASSERT_EQ(2u, v[0]);
222 ASSERT_EQ(1u, v[1]);
223 ASSERT_EQ(0u, v[2]);
224
225 ASSERT_THROW(s.Sort(v, 3), Orthanc::OrthancException);
226 }
227 }
228
229
230 TEST(BasicFetchingItemsSorter, Odd)
231 {
232 OrthancStone::BasicFetchingItemsSorter s(7);
233 std::vector<unsigned int> v;
234
235 ASSERT_THROW(s.Sort(v, 7), Orthanc::OrthancException);
236
237 {
238 s.Sort(v, 0);
239 ASSERT_EQ(7u, v.size());
240 ASSERT_EQ(0u, v[0]);
241 ASSERT_EQ(1u, v[1]);
242 ASSERT_EQ(2u, v[2]);
243 ASSERT_EQ(3u, v[3]);
244 ASSERT_EQ(4u, v[4]);
245 ASSERT_EQ(5u, v[5]);
246 ASSERT_EQ(6u, v[6]);
247 }
248
249 {
250 s.Sort(v, 1);
251 ASSERT_EQ(7u, v.size());
252 ASSERT_EQ(1u, v[0]);
253 ASSERT_EQ(2u, v[1]);
254 ASSERT_EQ(0u, v[2]);
255 ASSERT_EQ(3u, v[3]);
256 ASSERT_EQ(4u, v[4]);
257 ASSERT_EQ(5u, v[5]);
258 ASSERT_EQ(6u, v[6]);
259 }
260
261 {
262 s.Sort(v, 2);
263 ASSERT_EQ(7u, v.size());
264 ASSERT_EQ(2u, v[0]);
265 ASSERT_EQ(3u, v[1]);
266 ASSERT_EQ(1u, v[2]);
267 ASSERT_EQ(4u, v[3]);
268 ASSERT_EQ(0u, v[4]);
269 ASSERT_EQ(5u, v[5]);
270 ASSERT_EQ(6u, v[6]);
271 }
272
273 {
274 s.Sort(v, 3);
275 ASSERT_EQ(7u, v.size());
276 ASSERT_EQ(3u, v[0]);
277 ASSERT_EQ(4u, v[1]);
278 ASSERT_EQ(2u, v[2]);
279 ASSERT_EQ(5u, v[3]);
280 ASSERT_EQ(1u, v[4]);
281 ASSERT_EQ(6u, v[5]);
282 ASSERT_EQ(0u, v[6]);
283 }
284
285 {
286 s.Sort(v, 4);
287 ASSERT_EQ(7u, v.size());
288 ASSERT_EQ(4u, v[0]);
289 ASSERT_EQ(5u, v[1]);
290 ASSERT_EQ(3u, v[2]);
291 ASSERT_EQ(6u, v[3]);
292 ASSERT_EQ(2u, v[4]);
293 ASSERT_EQ(1u, v[5]);
294 ASSERT_EQ(0u, v[6]);
295 }
296
297 {
298 s.Sort(v, 5);
299 ASSERT_EQ(7u, v.size());
300 ASSERT_EQ(5u, v[0]);
301 ASSERT_EQ(6u, v[1]);
302 ASSERT_EQ(4u, v[2]);
303 ASSERT_EQ(3u, v[3]);
304 ASSERT_EQ(2u, v[4]);
305 ASSERT_EQ(1u, v[5]);
306 ASSERT_EQ(0u, v[6]);
307 }
308
309 {
310 s.Sort(v, 6);
311 ASSERT_EQ(7u, v.size());
312 ASSERT_EQ(6u, v[0]);
313 ASSERT_EQ(5u, v[1]);
314 ASSERT_EQ(4u, v[2]);
315 ASSERT_EQ(3u, v[3]);
316 ASSERT_EQ(2u, v[4]);
317 ASSERT_EQ(1u, v[5]);
318 ASSERT_EQ(0u, v[6]);
319 }
320 }
321
322
323 TEST(BasicFetchingItemsSorter, Even)
324 {
325 OrthancStone::BasicFetchingItemsSorter s(6);
326 std::vector<unsigned int> v;
327
328 {
329 s.Sort(v, 0);
330 ASSERT_EQ(6u, v.size());
331 ASSERT_EQ(0u, v[0]);
332 ASSERT_EQ(1u, v[1]);
333 ASSERT_EQ(2u, v[2]);
334 ASSERT_EQ(3u, v[3]);
335 ASSERT_EQ(4u, v[4]);
336 ASSERT_EQ(5u, v[5]);
337 }
338
339 {
340 s.Sort(v, 1);
341 ASSERT_EQ(6u, v.size());
342 ASSERT_EQ(1u, v[0]);
343 ASSERT_EQ(2u, v[1]);
344 ASSERT_EQ(0u, v[2]);
345 ASSERT_EQ(3u, v[3]);
346 ASSERT_EQ(4u, v[4]);
347 ASSERT_EQ(5u, v[5]);
348 }
349
350 {
351 s.Sort(v, 2);
352 ASSERT_EQ(6u, v.size());
353 ASSERT_EQ(2u, v[0]);
354 ASSERT_EQ(3u, v[1]);
355 ASSERT_EQ(1u, v[2]);
356 ASSERT_EQ(4u, v[3]);
357 ASSERT_EQ(0u, v[4]);
358 ASSERT_EQ(5u, v[5]);
359 }
360
361 {
362 s.Sort(v, 3);
363 ASSERT_EQ(6u, v.size());
364 ASSERT_EQ(3u, v[0]);
365 ASSERT_EQ(4u, v[1]);
366 ASSERT_EQ(2u, v[2]);
367 ASSERT_EQ(5u, v[3]);
368 ASSERT_EQ(1u, v[4]);
369 ASSERT_EQ(0u, v[5]);
370 }
371
372 {
373 s.Sort(v, 4);
374 ASSERT_EQ(6u, v.size());
375 ASSERT_EQ(4u, v[0]);
376 ASSERT_EQ(5u, v[1]);
377 ASSERT_EQ(3u, v[2]);
378 ASSERT_EQ(2u, v[3]);
379 ASSERT_EQ(1u, v[4]);
380 ASSERT_EQ(0u, v[5]);
381 }
382
383 {
384 s.Sort(v, 5);
385 ASSERT_EQ(6u, v.size());
386 ASSERT_EQ(5u, v[0]);
387 ASSERT_EQ(4u, v[1]);
388 ASSERT_EQ(3u, v[2]);
389 ASSERT_EQ(2u, v[3]);
390 ASSERT_EQ(1u, v[4]);
391 ASSERT_EQ(0u, v[5]);
392 }
393 }