Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Range1DTests.cpp
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Range1DTests.cpp
1 // This file is part of the Acts project.
2 //
3 // Copyright (C) 2021 CERN for the benefit of the Acts project
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9 #include <boost/test/unit_test.hpp>
10 
12 
13 #include <limits>
14 #include <utility>
15 #include <vector>
16 
17 namespace {
18 std::vector<int> v = {-100, -90, -80, -70, -60, -50, -40, -30, -20, 10, 0,
19  10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
20 }
21 
22 namespace Acts {
23 namespace Test {
24 BOOST_AUTO_TEST_SUITE(Utilities)
25 
26 BOOST_AUTO_TEST_SUITE(Range1D)
27 
28 BOOST_AUTO_TEST_CASE(infinite_range_int) {
30 
31  BOOST_CHECK(r.min() == std::numeric_limits<int>::lowest());
32  BOOST_CHECK(r.max() == std::numeric_limits<int>::max());
33 }
34 
35 BOOST_AUTO_TEST_CASE(infinite_range_double) {
37 
38  BOOST_CHECK(r.min() == std::numeric_limits<double>::lowest());
39  BOOST_CHECK(r.max() == std::numeric_limits<double>::max());
40 }
41 
42 BOOST_AUTO_TEST_CASE(constructor_range_int) {
43  Acts::Range1D<int> r(-11, 2);
44 
45  BOOST_CHECK(r.min() == -11);
46  BOOST_CHECK(r.max() == 2);
47 }
48 
49 BOOST_AUTO_TEST_CASE(constructor_range_double) {
50  Acts::Range1D<double> r(-11.0, 2.0);
51 
52  BOOST_CHECK(r.min() == -11.0);
53  BOOST_CHECK(r.max() == 2.0);
54 }
55 
56 BOOST_AUTO_TEST_CASE(constructor_copy_double) {
57  Acts::Range1D<double> q(-11.0, 2.0);
59 
60  BOOST_CHECK(r.min() == -11.0);
61  BOOST_CHECK(r.max() == 2.0);
62 }
63 
64 BOOST_AUTO_TEST_CASE(constructor_tuple_double) {
65  Acts::Range1D<double> r(std::pair<double, double>(-11.0, 2.0));
66 
67  BOOST_CHECK(r.min() == -11.0);
68  BOOST_CHECK(r.max() == 2.0);
69 }
70 
71 BOOST_AUTO_TEST_CASE(assign_double) {
72  Acts::Range1D<double> q(-11.0, 2.0);
74 
75  BOOST_CHECK(r.min() == -11.0);
76  BOOST_CHECK(r.max() == 2.0);
77 }
78 
79 BOOST_AUTO_TEST_CASE(shrinkMin_double) {
81 
82  r.shrinkMin(-11.0);
83 
84  BOOST_CHECK(r.min() == -11.0);
85  BOOST_CHECK(r.max() == std::numeric_limits<double>::max());
86 }
87 
88 BOOST_AUTO_TEST_CASE(shrinkMax_double) {
90 
91  r.shrinkMax(2.0);
92 
93  BOOST_CHECK(r.min() == std::numeric_limits<double>::lowest());
94  BOOST_CHECK(r.max() == 2.0);
95 }
96 
97 BOOST_AUTO_TEST_CASE(shrink_both_double) {
99 
100  r.shrinkMin(-11.0);
101  r.shrinkMax(2.0);
102 
103  BOOST_CHECK(r.min() == -11.0);
104  BOOST_CHECK(r.max() == 2.0);
105 }
106 
107 BOOST_AUTO_TEST_CASE(shrink_double) {
109 
110  r.shrink(-11.0, 2.0);
111 
112  BOOST_CHECK(r.min() == -11.0);
113  BOOST_CHECK(r.max() == 2.0);
114 }
115 
116 BOOST_AUTO_TEST_CASE(shrink_twice_double) {
118 
119  r.shrink(-100.0, 20.0);
120  r.shrink(-11.0, 2.0);
121 
122  BOOST_CHECK(r.min() == -11.0);
123  BOOST_CHECK(r.max() == 2.0);
124 }
125 
126 BOOST_AUTO_TEST_CASE(shrink_noop_double) {
128 
129  r.shrink(-11.0, 2.0);
130  r.shrink(-100.0, 20.0);
131 
132  BOOST_CHECK(r.min() == -11.0);
133  BOOST_CHECK(r.max() == 2.0);
134 }
135 
136 BOOST_AUTO_TEST_CASE(shrink_noop_min_double) {
138 
139  r.shrink(-11.0, 2.0);
140  r.shrink(-100.0, 1.0);
141 
142  BOOST_CHECK(r.min() == -11.0);
143  BOOST_CHECK(r.max() == 1.0);
144 }
145 
146 BOOST_AUTO_TEST_CASE(shrink_noop_max_double) {
148 
149  r.shrink(-11.0, 2.0);
150  r.shrink(-10.0, 20.0);
151 
152  BOOST_CHECK(r.min() == -10.0);
153  BOOST_CHECK(r.max() == 2.0);
154 }
155 
156 BOOST_AUTO_TEST_CASE(shrinkMin_noop_double) {
158 
159  r.shrinkMin(-11.0);
160  r.shrinkMin(-100.0);
161 
162  BOOST_CHECK(r.min() == -11.0);
163  BOOST_CHECK(r.max() == std::numeric_limits<double>::max());
164 }
165 
166 BOOST_AUTO_TEST_CASE(shrinkMax_noop_double) {
168 
169  r.shrinkMax(2.0);
170  r.shrinkMax(4.0);
171 
172  BOOST_CHECK(r.min() == std::numeric_limits<double>::lowest());
173  BOOST_CHECK(r.max() == 2.0);
174 }
175 
176 BOOST_AUTO_TEST_CASE(setMin_double) {
178 
179  r.setMin(2.0);
180 
181  BOOST_CHECK(r.min() == 2.0);
182  BOOST_CHECK(r.max() == std::numeric_limits<double>::max());
183 }
184 
185 BOOST_AUTO_TEST_CASE(setMin_twice_double) {
187 
188  r.setMin(-2.0);
189  r.setMin(-4.0);
190 
191  BOOST_CHECK(r.min() == -4.0);
192  BOOST_CHECK(r.max() == std::numeric_limits<double>::max());
193 }
194 
195 BOOST_AUTO_TEST_CASE(setMax_double) {
197 
198  r.setMax(2.0);
199 
200  BOOST_CHECK(r.min() == std::numeric_limits<double>::lowest());
201  BOOST_CHECK(r.max() == 2.0);
202 }
203 
204 BOOST_AUTO_TEST_CASE(setMax_twice_double) {
206 
207  r.setMax(2.0);
208  r.setMax(4.0);
209 
210  BOOST_CHECK(r.min() == std::numeric_limits<double>::lowest());
211  BOOST_CHECK(r.max() == 4.0);
212 }
213 
214 BOOST_AUTO_TEST_CASE(expandMin_double) {
215  Acts::Range1D<double> r(0.0, 0.0);
216 
217  r.expandMin(-11.0);
218 
219  BOOST_CHECK(r.min() == -11.0);
220  BOOST_CHECK(r.max() == 0.0);
221 }
222 
223 BOOST_AUTO_TEST_CASE(expandMax_double) {
224  Acts::Range1D<double> r(0.0, 0.0);
225 
226  r.expandMax(2.0);
227 
228  BOOST_CHECK(r.min() == 0.0);
229  BOOST_CHECK(r.max() == 2.0);
230 }
231 
232 BOOST_AUTO_TEST_CASE(expand_both_double) {
233  Acts::Range1D<double> r(0.0, 0.0);
234 
235  r.expandMin(-11.0);
236  r.expandMax(2.0);
237 
238  BOOST_CHECK(r.min() == -11.0);
239  BOOST_CHECK(r.max() == 2.0);
240 }
241 
242 BOOST_AUTO_TEST_CASE(expand_double) {
243  Acts::Range1D<double> r(0.0, 0.0);
244 
245  r.expand(-11.0, 2.0);
246 
247  BOOST_CHECK(r.min() == -11.0);
248  BOOST_CHECK(r.max() == 2.0);
249 }
250 
251 BOOST_AUTO_TEST_CASE(expand_twice_double) {
252  Acts::Range1D<double> r(0.0, 0.0);
253 
254  r.expand(-11.0, 2.0);
255  r.expand(-100.0, 20.0);
256 
257  BOOST_CHECK(r.min() == -100.0);
258  BOOST_CHECK(r.max() == 20.0);
259 }
260 
261 BOOST_AUTO_TEST_CASE(expand_noop_double) {
262  Acts::Range1D<double> r(0.0, 0.0);
263 
264  r.expand(-100.0, 20.0);
265  r.expand(-11.0, 2.0);
266 
267  BOOST_CHECK(r.min() == -100.0);
268  BOOST_CHECK(r.max() == 20.0);
269 }
270 
271 BOOST_AUTO_TEST_CASE(expand_noop_min_double) {
272  Acts::Range1D<double> r(0.0, 0.0);
273 
274  r.expand(-100.0, 1.0);
275  r.expand(-11.0, 2.0);
276 
277  BOOST_CHECK(r.min() == -100.0);
278  BOOST_CHECK(r.max() == 2.0);
279 }
280 
281 BOOST_AUTO_TEST_CASE(expand_noop_max_double) {
282  Acts::Range1D<double> r(0.0, 0.0);
283 
284  r.expand(-10.0, 20.0);
285  r.expand(-11.0, 2.0);
286 
287  BOOST_CHECK(r.min() == -11.0);
288  BOOST_CHECK(r.max() == 20.0);
289 }
290 
291 BOOST_AUTO_TEST_CASE(expandMin_noop_double) {
292  Acts::Range1D<double> r(0.0, 0.0);
293 
294  r.expandMin(-100.0);
295  r.expandMin(-11.0);
296 
297  BOOST_CHECK(r.min() == -100.0);
298  BOOST_CHECK(r.max() == 0.0);
299 }
300 
301 BOOST_AUTO_TEST_CASE(expandMax_noop_double) {
302  Acts::Range1D<double> r(0.0, 0.0);
303 
304  r.expandMax(4.0);
305  r.expandMax(2.0);
306 
307  BOOST_CHECK(r.min() == 0.0);
308  BOOST_CHECK(r.max() == 4.0);
309 }
310 
311 BOOST_AUTO_TEST_CASE(size_double) {
312  Acts::Range1D<double> r(-10.0, 25.0);
313 
314  BOOST_CHECK(r.size() == 35.0);
315 }
316 
317 BOOST_AUTO_TEST_CASE(size_zero_double) {
318  Acts::Range1D<double> r(-10.0, -10.0);
319 
320  BOOST_CHECK(r.size() == 0.0);
321 }
322 
323 BOOST_AUTO_TEST_CASE(size_zero2_double) {
324  Acts::Range1D<double> r(-10.0, -50.0);
325 
326  BOOST_CHECK(r.size() == 0.0);
327 }
328 
329 BOOST_AUTO_TEST_CASE(degenerate_false_double) {
330  Acts::Range1D<double> r(-10.0, 25.0);
331 
332  BOOST_CHECK(!r.degenerate());
333 }
334 
335 BOOST_AUTO_TEST_CASE(degenerate_true_double) {
336  Acts::Range1D<double> r(-10.0, -25.0);
337 
338  BOOST_CHECK(r.degenerate());
339 }
340 
341 BOOST_AUTO_TEST_CASE(contains_double) {
342  Acts::Range1D<double> r(-10.0, 25.0);
343 
344  BOOST_CHECK(!r.contains(-11.0));
345  BOOST_CHECK(!r.contains(-30.0));
346  BOOST_CHECK(r.contains(-5.0));
347  BOOST_CHECK(r.contains(0.0));
348  BOOST_CHECK(r.contains(10.0));
349 }
350 
351 BOOST_AUTO_TEST_CASE(contains_degenerate_double) {
352  Acts::Range1D<double> r(-10.0, -25.0);
353 
354  BOOST_CHECK(!r.contains(-11.0));
355  BOOST_CHECK(!r.contains(-30.0));
356  BOOST_CHECK(!r.contains(-5.0));
357  BOOST_CHECK(!r.contains(0.0));
358  BOOST_CHECK(!r.contains(10.0));
359 }
360 
361 BOOST_AUTO_TEST_CASE(intersect_true1_double) {
362  Acts::Range1D<double> r(-10.0, 25.0);
363  Acts::Range1D<double> q(5.0, 50.0);
364 
365  BOOST_CHECK((r && q));
366 }
367 
368 BOOST_AUTO_TEST_CASE(intersect_true2_double) {
369  Acts::Range1D<double> r(-10.0, 25.0);
370  Acts::Range1D<double> q(-100.0, 50.0);
371 
372  BOOST_CHECK((r && q));
373 }
374 
375 BOOST_AUTO_TEST_CASE(intersect_true3_double) {
376  Acts::Range1D<double> r(-10.0, 25.0);
377  Acts::Range1D<double> q(-5.0, 5.0);
378 
379  BOOST_CHECK((r && q));
380 }
381 
382 BOOST_AUTO_TEST_CASE(intersect_false1_double) {
383  Acts::Range1D<double> r(-10.0, 25.0);
384  Acts::Range1D<double> q(-50.0, -15.0);
385 
386  BOOST_CHECK(!(r && q));
387 }
388 
389 BOOST_AUTO_TEST_CASE(intersect_false2_double) {
390  Acts::Range1D<double> r(-10.0, 25.0);
391  Acts::Range1D<double> q(50.0, 55.0);
392 
393  BOOST_CHECK(!(r && q));
394 }
395 
396 BOOST_AUTO_TEST_CASE(equals_true_int) {
397  Acts::Range1D<int> r(-5, 5);
398  Acts::Range1D<int> q(-5, 5);
399 
400  BOOST_CHECK((r == q));
401 }
402 
403 BOOST_AUTO_TEST_CASE(equals_false_int) {
404  Acts::Range1D<int> r(-5, 5);
405  Acts::Range1D<int> q(-6, 4);
406 
407  BOOST_CHECK(!(r == q));
408 }
409 
410 BOOST_AUTO_TEST_CASE(subset1_double) {
411  Acts::Range1D<double> r(-10.0, 25.0);
412  Acts::Range1D<double> q(5.0, 50.0);
413 
414  BOOST_CHECK(!(r <= q));
415  BOOST_CHECK(!(q <= r));
416 }
417 
418 BOOST_AUTO_TEST_CASE(subset2_double) {
419  Acts::Range1D<double> r(-10.0, 25.0);
420  Acts::Range1D<double> q(-100.0, 50.0);
421 
422  BOOST_CHECK((r <= q));
423  BOOST_CHECK(!(q <= r));
424 }
425 
426 BOOST_AUTO_TEST_CASE(subset3_double) {
427  Acts::Range1D<double> r(-10.0, 25.0);
428  Acts::Range1D<double> q(-5.0, 5.0);
429 
430  BOOST_CHECK(!(r <= q));
431  BOOST_CHECK((q <= r));
432 }
433 
434 BOOST_AUTO_TEST_CASE(subset4_double) {
435  Acts::Range1D<double> r(-10.0, 25.0);
436  Acts::Range1D<double> q(-50.0, -15.0);
437 
438  BOOST_CHECK(!(r <= q));
439  BOOST_CHECK(!(q <= r));
440 }
441 
442 BOOST_AUTO_TEST_CASE(subset5_double) {
443  Acts::Range1D<double> r(-10.0, 25.0);
444  Acts::Range1D<double> q(50.0, 55.0);
445 
446  BOOST_CHECK(!(r <= q));
447  BOOST_CHECK(!(q <= r));
448 }
449 
450 BOOST_AUTO_TEST_CASE(superset1_double) {
451  Acts::Range1D<double> r(-10.0, 25.0);
452  Acts::Range1D<double> q(5.0, 50.0);
453 
454  BOOST_CHECK(!(r >= q));
455  BOOST_CHECK(!(q >= r));
456 }
457 
458 BOOST_AUTO_TEST_CASE(superset2_double) {
459  Acts::Range1D<double> r(-10.0, 25.0);
460  Acts::Range1D<double> q(-100.0, 50.0);
461 
462  BOOST_CHECK(!(r >= q));
463  BOOST_CHECK((q >= r));
464 }
465 
466 BOOST_AUTO_TEST_CASE(superset3_double) {
467  Acts::Range1D<double> r(-10.0, 25.0);
468  Acts::Range1D<double> q(-5.0, 5.0);
469 
470  BOOST_CHECK((r >= q));
471  BOOST_CHECK(!(q >= r));
472 }
473 
474 BOOST_AUTO_TEST_CASE(superset4_double) {
475  Acts::Range1D<double> r(-10.0, 25.0);
476  Acts::Range1D<double> q(-50.0, -15.0);
477 
478  BOOST_CHECK(!(r >= q));
479  BOOST_CHECK(!(q >= r));
480 }
481 
482 BOOST_AUTO_TEST_CASE(superset5_double) {
483  Acts::Range1D<double> r(-10.0, 25.0);
484  Acts::Range1D<double> q(50.0, 55.0);
485 
486  BOOST_CHECK(!(r >= q));
487  BOOST_CHECK(!(q >= r));
488 }
489 
490 BOOST_AUTO_TEST_CASE(intersection1_double) {
491  Acts::Range1D<double> r(-10.0, 25.0);
492  Acts::Range1D<double> q(5.0, 50.0);
493  Acts::Range1D<double> i = r & q;
494 
495  BOOST_CHECK(i.min() == 5.0);
496  BOOST_CHECK(i.max() == 25.0);
497 }
498 
499 BOOST_AUTO_TEST_CASE(intersection2_double) {
500  Acts::Range1D<double> r(-10.0, 25.0);
501  Acts::Range1D<double> q(-100.0, 50.0);
502  Acts::Range1D<double> i = r & q;
503 
504  BOOST_CHECK(i.min() == -10.0);
505  BOOST_CHECK(i.max() == 25.0);
506 }
507 
508 BOOST_AUTO_TEST_CASE(intersection3_double) {
509  Acts::Range1D<double> r(-10.0, 25.0);
510  Acts::Range1D<double> q(-5.0, 5.0);
511  Acts::Range1D<double> i = r & q;
512 
513  BOOST_CHECK(i.min() == -5.0);
514  BOOST_CHECK(i.max() == 5.0);
515 }
516 
517 BOOST_AUTO_TEST_CASE(intersection4_double) {
518  Acts::Range1D<double> r(-10.0, 25.0);
519  Acts::Range1D<double> q(-50.0, -15.0);
520  Acts::Range1D<double> i = r & q;
521 
522  BOOST_CHECK(i.degenerate());
523 }
524 
525 BOOST_AUTO_TEST_CASE(intersection5_double) {
526  Acts::Range1D<double> r(-10.0, 25.0);
527  Acts::Range1D<double> q(50.0, 55.0);
528  Acts::Range1D<double> i = r & q;
529 
530  BOOST_CHECK(i.degenerate());
531 }
532 
533 BOOST_AUTO_TEST_CASE(intersects_edge_int_positive) {
534  Acts::Range1D<int> r(-10, 11);
535  Acts::Range1D<int> q(10, 20);
536 
537  BOOST_CHECK((r && q));
538 }
539 
540 BOOST_AUTO_TEST_CASE(intersects_edge_int_negative) {
541  Acts::Range1D<int> r(-10, 10);
542  Acts::Range1D<int> q(10, 20);
543 
544  BOOST_CHECK(!(r && q));
545 }
546 
547 BOOST_AUTO_TEST_CASE(single_value_not_degenerate_int_positive) {
548  Acts::Range1D<int> r(10, 10);
549 
550  BOOST_CHECK(r.degenerate());
551 }
552 
553 BOOST_AUTO_TEST_CASE(single_value_not_degenerate_int_negative) {
554  Acts::Range1D<int> r(10, 11);
555 
556  BOOST_CHECK(!r.degenerate());
557 }
558 
559 BOOST_AUTO_TEST_CASE(intersects_implies_non_degenerate_intersection) {
560  for (int i1 : v) {
561  for (int i2 : v) {
562  for (int j1 : v) {
563  for (int j2 : v) {
564  Acts::Range1D<int> r(i1, i2);
565  Acts::Range1D<int> q(j1, j2);
566 
567  if (r.degenerate() || q.degenerate()) {
568  continue;
569  }
570 
571  if (r && q) {
572  BOOST_CHECK(!((r & q).degenerate()));
573  } else {
574  BOOST_CHECK(((r & q).degenerate()));
575  }
576  }
577  }
578  }
579  }
580 }
581 
582 BOOST_AUTO_TEST_CASE(degeneracy_implies_size_zero_intersection) {
583  for (int i1 : v) {
584  for (int i2 : v) {
585  Acts::Range1D<int> r(i1, i2);
586 
587  if (r.degenerate()) {
588  BOOST_CHECK(r.size() == 0);
589  } else {
590  BOOST_CHECK(r.size() >= 0);
591  }
592  }
593  }
594 }
595 
596 BOOST_AUTO_TEST_CASE(range_inclusive_left) {
597  Acts::Range1D<int> r(10, 20);
598 
599  BOOST_CHECK(!r.contains(9));
600  BOOST_CHECK(r.contains(10));
601  BOOST_CHECK(r.contains(11));
602 }
603 
604 BOOST_AUTO_TEST_CASE(range_exclusive_right) {
605  Acts::Range1D<int> r(10, 20);
606 
607  BOOST_CHECK(r.contains(19));
608  BOOST_CHECK(!r.contains(20));
609  BOOST_CHECK(!r.contains(21));
610 }
611 
612 BOOST_AUTO_TEST_SUITE_END()
613 
614 BOOST_AUTO_TEST_SUITE_END()
615 } // namespace Test
616 } // namespace Acts