File indexing completed on 2025-10-28 07:55:40
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Utilities/RangeXD.hpp"
0012
0013 #include <limits>
0014 #include <utility>
0015 #include <vector>
0016
0017 namespace {
0018 std::vector<int> v = {-100, -90, -80, -70, -60, -50, -40, -30, -20, 10, 0,
0019 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
0020 }
0021
0022 using namespace Acts;
0023
0024 namespace ActsTests {
0025
0026 BOOST_AUTO_TEST_SUITE(UtilitiesSuite)
0027
0028 BOOST_AUTO_TEST_SUITE(Range1DSuite)
0029
0030 BOOST_AUTO_TEST_CASE(infinite_range_int) {
0031 Range1D<int> r;
0032
0033 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<int>::lowest());
0034 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<int>::max());
0035 }
0036
0037 BOOST_AUTO_TEST_CASE(infinite_range_double) {
0038 Range1D<double> r;
0039
0040 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<double>::lowest());
0041 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<double>::max());
0042 }
0043
0044 BOOST_AUTO_TEST_CASE(constructor_range_int) {
0045 Range1D<int> r(-11, 2);
0046
0047 BOOST_CHECK_EQUAL(r.min(), -11);
0048 BOOST_CHECK_EQUAL(r.max(), 2);
0049 }
0050
0051 BOOST_AUTO_TEST_CASE(constructor_range_double) {
0052 Range1D<double> r(-11.0, 2.0);
0053
0054 BOOST_CHECK_EQUAL(r.min(), -11.0);
0055 BOOST_CHECK_EQUAL(r.max(), 2.0);
0056 }
0057
0058 BOOST_AUTO_TEST_CASE(constructor_copy_double) {
0059 Range1D<double> q(-11.0, 2.0);
0060 Range1D<double> r(q);
0061
0062 BOOST_CHECK_EQUAL(r.min(), -11.0);
0063 BOOST_CHECK_EQUAL(r.max(), 2.0);
0064 }
0065
0066 BOOST_AUTO_TEST_CASE(constructor_tuple_double) {
0067 Range1D<double> r(std::pair<double, double>(-11.0, 2.0));
0068
0069 BOOST_CHECK_EQUAL(r.min(), -11.0);
0070 BOOST_CHECK_EQUAL(r.max(), 2.0);
0071 }
0072
0073 BOOST_AUTO_TEST_CASE(assign_double) {
0074 Range1D<double> q(-11.0, 2.0);
0075 Range1D<double> r = q;
0076
0077 BOOST_CHECK_EQUAL(r.min(), -11.0);
0078 BOOST_CHECK_EQUAL(r.max(), 2.0);
0079 }
0080
0081 BOOST_AUTO_TEST_CASE(shrinkMin_double) {
0082 Range1D<double> r;
0083
0084 r.shrinkMin(-11.0);
0085
0086 BOOST_CHECK_EQUAL(r.min(), -11.0);
0087 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<double>::max());
0088 }
0089
0090 BOOST_AUTO_TEST_CASE(shrinkMax_double) {
0091 Range1D<double> r;
0092
0093 r.shrinkMax(2.0);
0094
0095 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<double>::lowest());
0096 BOOST_CHECK_EQUAL(r.max(), 2.0);
0097 }
0098
0099 BOOST_AUTO_TEST_CASE(shrink_both_double) {
0100 Range1D<double> r;
0101
0102 r.shrinkMin(-11.0);
0103 r.shrinkMax(2.0);
0104
0105 BOOST_CHECK_EQUAL(r.min(), -11.0);
0106 BOOST_CHECK_EQUAL(r.max(), 2.0);
0107 }
0108
0109 BOOST_AUTO_TEST_CASE(shrink_double) {
0110 Range1D<double> r;
0111
0112 r.shrink(-11.0, 2.0);
0113
0114 BOOST_CHECK_EQUAL(r.min(), -11.0);
0115 BOOST_CHECK_EQUAL(r.max(), 2.0);
0116 }
0117
0118 BOOST_AUTO_TEST_CASE(shrink_twice_double) {
0119 Range1D<double> r;
0120
0121 r.shrink(-100.0, 20.0);
0122 r.shrink(-11.0, 2.0);
0123
0124 BOOST_CHECK_EQUAL(r.min(), -11.0);
0125 BOOST_CHECK_EQUAL(r.max(), 2.0);
0126 }
0127
0128 BOOST_AUTO_TEST_CASE(shrink_noop_double) {
0129 Range1D<double> r;
0130
0131 r.shrink(-11.0, 2.0);
0132 r.shrink(-100.0, 20.0);
0133
0134 BOOST_CHECK_EQUAL(r.min(), -11.0);
0135 BOOST_CHECK_EQUAL(r.max(), 2.0);
0136 }
0137
0138 BOOST_AUTO_TEST_CASE(shrink_noop_min_double) {
0139 Range1D<double> r;
0140
0141 r.shrink(-11.0, 2.0);
0142 r.shrink(-100.0, 1.0);
0143
0144 BOOST_CHECK_EQUAL(r.min(), -11.0);
0145 BOOST_CHECK_EQUAL(r.max(), 1.0);
0146 }
0147
0148 BOOST_AUTO_TEST_CASE(shrink_noop_max_double) {
0149 Range1D<double> r;
0150
0151 r.shrink(-11.0, 2.0);
0152 r.shrink(-10.0, 20.0);
0153
0154 BOOST_CHECK_EQUAL(r.min(), -10.0);
0155 BOOST_CHECK_EQUAL(r.max(), 2.0);
0156 }
0157
0158 BOOST_AUTO_TEST_CASE(shrinkMin_noop_double) {
0159 Range1D<double> r;
0160
0161 r.shrinkMin(-11.0);
0162 r.shrinkMin(-100.0);
0163
0164 BOOST_CHECK_EQUAL(r.min(), -11.0);
0165 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<double>::max());
0166 }
0167
0168 BOOST_AUTO_TEST_CASE(shrinkMax_noop_double) {
0169 Range1D<double> r;
0170
0171 r.shrinkMax(2.0);
0172 r.shrinkMax(4.0);
0173
0174 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<double>::lowest());
0175 BOOST_CHECK_EQUAL(r.max(), 2.0);
0176 }
0177
0178 BOOST_AUTO_TEST_CASE(setMin_double) {
0179 Range1D<double> r;
0180
0181 r.setMin(2.0);
0182
0183 BOOST_CHECK_EQUAL(r.min(), 2.0);
0184 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<double>::max());
0185 }
0186
0187 BOOST_AUTO_TEST_CASE(setMin_twice_double) {
0188 Range1D<double> r;
0189
0190 r.setMin(-2.0);
0191 r.setMin(-4.0);
0192
0193 BOOST_CHECK_EQUAL(r.min(), -4.0);
0194 BOOST_CHECK_EQUAL(r.max(), std::numeric_limits<double>::max());
0195 }
0196
0197 BOOST_AUTO_TEST_CASE(setMax_double) {
0198 Range1D<double> r;
0199
0200 r.setMax(2.0);
0201
0202 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<double>::lowest());
0203 BOOST_CHECK_EQUAL(r.max(), 2.0);
0204 }
0205
0206 BOOST_AUTO_TEST_CASE(setMax_twice_double) {
0207 Range1D<double> r;
0208
0209 r.setMax(2.0);
0210 r.setMax(4.0);
0211
0212 BOOST_CHECK_EQUAL(r.min(), std::numeric_limits<double>::lowest());
0213 BOOST_CHECK_EQUAL(r.max(), 4.0);
0214 }
0215
0216 BOOST_AUTO_TEST_CASE(expandMin_double) {
0217 Range1D<double> r(0.0, 0.0);
0218
0219 r.expandMin(-11.0);
0220
0221 BOOST_CHECK_EQUAL(r.min(), -11.0);
0222 BOOST_CHECK_EQUAL(r.max(), 0.0);
0223 }
0224
0225 BOOST_AUTO_TEST_CASE(expandMax_double) {
0226 Range1D<double> r(0.0, 0.0);
0227
0228 r.expandMax(2.0);
0229
0230 BOOST_CHECK_EQUAL(r.min(), 0.0);
0231 BOOST_CHECK_EQUAL(r.max(), 2.0);
0232 }
0233
0234 BOOST_AUTO_TEST_CASE(expand_both_double) {
0235 Range1D<double> r(0.0, 0.0);
0236
0237 r.expandMin(-11.0);
0238 r.expandMax(2.0);
0239
0240 BOOST_CHECK_EQUAL(r.min(), -11.0);
0241 BOOST_CHECK_EQUAL(r.max(), 2.0);
0242 }
0243
0244 BOOST_AUTO_TEST_CASE(expand_double) {
0245 Range1D<double> r(0.0, 0.0);
0246
0247 r.expand(-11.0, 2.0);
0248
0249 BOOST_CHECK_EQUAL(r.min(), -11.0);
0250 BOOST_CHECK_EQUAL(r.max(), 2.0);
0251 }
0252
0253 BOOST_AUTO_TEST_CASE(expand_twice_double) {
0254 Range1D<double> r(0.0, 0.0);
0255
0256 r.expand(-11.0, 2.0);
0257 r.expand(-100.0, 20.0);
0258
0259 BOOST_CHECK_EQUAL(r.min(), -100.0);
0260 BOOST_CHECK_EQUAL(r.max(), 20.0);
0261 }
0262
0263 BOOST_AUTO_TEST_CASE(expand_noop_double) {
0264 Range1D<double> r(0.0, 0.0);
0265
0266 r.expand(-100.0, 20.0);
0267 r.expand(-11.0, 2.0);
0268
0269 BOOST_CHECK_EQUAL(r.min(), -100.0);
0270 BOOST_CHECK_EQUAL(r.max(), 20.0);
0271 }
0272
0273 BOOST_AUTO_TEST_CASE(expand_noop_min_double) {
0274 Range1D<double> r(0.0, 0.0);
0275
0276 r.expand(-100.0, 1.0);
0277 r.expand(-11.0, 2.0);
0278
0279 BOOST_CHECK_EQUAL(r.min(), -100.0);
0280 BOOST_CHECK_EQUAL(r.max(), 2.0);
0281 }
0282
0283 BOOST_AUTO_TEST_CASE(expand_noop_max_double) {
0284 Range1D<double> r(0.0, 0.0);
0285
0286 r.expand(-10.0, 20.0);
0287 r.expand(-11.0, 2.0);
0288
0289 BOOST_CHECK_EQUAL(r.min(), -11.0);
0290 BOOST_CHECK_EQUAL(r.max(), 20.0);
0291 }
0292
0293 BOOST_AUTO_TEST_CASE(expandMin_noop_double) {
0294 Range1D<double> r(0.0, 0.0);
0295
0296 r.expandMin(-100.0);
0297 r.expandMin(-11.0);
0298
0299 BOOST_CHECK_EQUAL(r.min(), -100.0);
0300 BOOST_CHECK_EQUAL(r.max(), 0.0);
0301 }
0302
0303 BOOST_AUTO_TEST_CASE(expandMax_noop_double) {
0304 Range1D<double> r(0.0, 0.0);
0305
0306 r.expandMax(4.0);
0307 r.expandMax(2.0);
0308
0309 BOOST_CHECK_EQUAL(r.min(), 0.0);
0310 BOOST_CHECK_EQUAL(r.max(), 4.0);
0311 }
0312
0313 BOOST_AUTO_TEST_CASE(size_double) {
0314 Range1D<double> r(-10.0, 25.0);
0315
0316 BOOST_CHECK_EQUAL(r.size(), 35.0);
0317 }
0318
0319 BOOST_AUTO_TEST_CASE(size_zero_double) {
0320 Range1D<double> r(-10.0, -10.0);
0321
0322 BOOST_CHECK_EQUAL(r.size(), 0.0);
0323 }
0324
0325 BOOST_AUTO_TEST_CASE(size_zero2_double) {
0326 Range1D<double> r(-10.0, -50.0);
0327
0328 BOOST_CHECK_EQUAL(r.size(), 0.0);
0329 }
0330
0331 BOOST_AUTO_TEST_CASE(degenerate_false_double) {
0332 Range1D<double> r(-10.0, 25.0);
0333
0334 BOOST_CHECK(!r.degenerate());
0335 }
0336
0337 BOOST_AUTO_TEST_CASE(degenerate_true_double) {
0338 Range1D<double> r(-10.0, -25.0);
0339
0340 BOOST_CHECK(r.degenerate());
0341 }
0342
0343 BOOST_AUTO_TEST_CASE(contains_double) {
0344 Range1D<double> r(-10.0, 25.0);
0345
0346 BOOST_CHECK(!r.contains(-11.0));
0347 BOOST_CHECK(!r.contains(-30.0));
0348 BOOST_CHECK(r.contains(-5.0));
0349 BOOST_CHECK(r.contains(0.0));
0350 BOOST_CHECK(r.contains(10.0));
0351 }
0352
0353 BOOST_AUTO_TEST_CASE(contains_degenerate_double) {
0354 Range1D<double> r(-10.0, -25.0);
0355
0356 BOOST_CHECK(!r.contains(-11.0));
0357 BOOST_CHECK(!r.contains(-30.0));
0358 BOOST_CHECK(!r.contains(-5.0));
0359 BOOST_CHECK(!r.contains(0.0));
0360 BOOST_CHECK(!r.contains(10.0));
0361 }
0362
0363 BOOST_AUTO_TEST_CASE(intersect_true1_double) {
0364 Range1D<double> r(-10.0, 25.0);
0365 Range1D<double> q(5.0, 50.0);
0366
0367 BOOST_CHECK((r && q));
0368 }
0369
0370 BOOST_AUTO_TEST_CASE(intersect_true2_double) {
0371 Range1D<double> r(-10.0, 25.0);
0372 Range1D<double> q(-100.0, 50.0);
0373
0374 BOOST_CHECK((r && q));
0375 }
0376
0377 BOOST_AUTO_TEST_CASE(intersect_true3_double) {
0378 Range1D<double> r(-10.0, 25.0);
0379 Range1D<double> q(-5.0, 5.0);
0380
0381 BOOST_CHECK((r && q));
0382 }
0383
0384 BOOST_AUTO_TEST_CASE(intersect_false1_double) {
0385 Range1D<double> r(-10.0, 25.0);
0386 Range1D<double> q(-50.0, -15.0);
0387
0388 BOOST_CHECK(!(r && q));
0389 }
0390
0391 BOOST_AUTO_TEST_CASE(intersect_false2_double) {
0392 Range1D<double> r(-10.0, 25.0);
0393 Range1D<double> q(50.0, 55.0);
0394
0395 BOOST_CHECK(!(r && q));
0396 }
0397
0398 BOOST_AUTO_TEST_CASE(equals_true_int) {
0399 Range1D<int> r(-5, 5);
0400 Range1D<int> q(-5, 5);
0401
0402 BOOST_CHECK((r == q));
0403 }
0404
0405 BOOST_AUTO_TEST_CASE(equals_false_int) {
0406 Range1D<int> r(-5, 5);
0407 Range1D<int> q(-6, 4);
0408
0409 BOOST_CHECK(!(r == q));
0410 }
0411
0412 BOOST_AUTO_TEST_CASE(subset1_double) {
0413 Range1D<double> r(-10.0, 25.0);
0414 Range1D<double> q(5.0, 50.0);
0415
0416 BOOST_CHECK(!(r <= q));
0417 BOOST_CHECK(!(q <= r));
0418 }
0419
0420 BOOST_AUTO_TEST_CASE(subset2_double) {
0421 Range1D<double> r(-10.0, 25.0);
0422 Range1D<double> q(-100.0, 50.0);
0423
0424 BOOST_CHECK((r <= q));
0425 BOOST_CHECK(!(q <= r));
0426 }
0427
0428 BOOST_AUTO_TEST_CASE(subset3_double) {
0429 Range1D<double> r(-10.0, 25.0);
0430 Range1D<double> q(-5.0, 5.0);
0431
0432 BOOST_CHECK(!(r <= q));
0433 BOOST_CHECK((q <= r));
0434 }
0435
0436 BOOST_AUTO_TEST_CASE(subset4_double) {
0437 Range1D<double> r(-10.0, 25.0);
0438 Range1D<double> q(-50.0, -15.0);
0439
0440 BOOST_CHECK(!(r <= q));
0441 BOOST_CHECK(!(q <= r));
0442 }
0443
0444 BOOST_AUTO_TEST_CASE(subset5_double) {
0445 Range1D<double> r(-10.0, 25.0);
0446 Range1D<double> q(50.0, 55.0);
0447
0448 BOOST_CHECK(!(r <= q));
0449 BOOST_CHECK(!(q <= r));
0450 }
0451
0452 BOOST_AUTO_TEST_CASE(superset1_double) {
0453 Range1D<double> r(-10.0, 25.0);
0454 Range1D<double> q(5.0, 50.0);
0455
0456 BOOST_CHECK(!(r >= q));
0457 BOOST_CHECK(!(q >= r));
0458 }
0459
0460 BOOST_AUTO_TEST_CASE(superset2_double) {
0461 Range1D<double> r(-10.0, 25.0);
0462 Range1D<double> q(-100.0, 50.0);
0463
0464 BOOST_CHECK(!(r >= q));
0465 BOOST_CHECK((q >= r));
0466 }
0467
0468 BOOST_AUTO_TEST_CASE(superset3_double) {
0469 Range1D<double> r(-10.0, 25.0);
0470 Range1D<double> q(-5.0, 5.0);
0471
0472 BOOST_CHECK((r >= q));
0473 BOOST_CHECK(!(q >= r));
0474 }
0475
0476 BOOST_AUTO_TEST_CASE(superset4_double) {
0477 Range1D<double> r(-10.0, 25.0);
0478 Range1D<double> q(-50.0, -15.0);
0479
0480 BOOST_CHECK(!(r >= q));
0481 BOOST_CHECK(!(q >= r));
0482 }
0483
0484 BOOST_AUTO_TEST_CASE(superset5_double) {
0485 Range1D<double> r(-10.0, 25.0);
0486 Range1D<double> q(50.0, 55.0);
0487
0488 BOOST_CHECK(!(r >= q));
0489 BOOST_CHECK(!(q >= r));
0490 }
0491
0492 BOOST_AUTO_TEST_CASE(intersection1_double) {
0493 Range1D<double> r(-10.0, 25.0);
0494 Range1D<double> q(5.0, 50.0);
0495 Range1D<double> i = r & q;
0496
0497 BOOST_CHECK_EQUAL(i.min(), 5.0);
0498 BOOST_CHECK_EQUAL(i.max(), 25.0);
0499 }
0500
0501 BOOST_AUTO_TEST_CASE(intersection2_double) {
0502 Range1D<double> r(-10.0, 25.0);
0503 Range1D<double> q(-100.0, 50.0);
0504 Range1D<double> i = r & q;
0505
0506 BOOST_CHECK_EQUAL(i.min(), -10.0);
0507 BOOST_CHECK_EQUAL(i.max(), 25.0);
0508 }
0509
0510 BOOST_AUTO_TEST_CASE(intersection3_double) {
0511 Range1D<double> r(-10.0, 25.0);
0512 Range1D<double> q(-5.0, 5.0);
0513 Range1D<double> i = r & q;
0514
0515 BOOST_CHECK_EQUAL(i.min(), -5.0);
0516 BOOST_CHECK_EQUAL(i.max(), 5.0);
0517 }
0518
0519 BOOST_AUTO_TEST_CASE(intersection4_double) {
0520 Range1D<double> r(-10.0, 25.0);
0521 Range1D<double> q(-50.0, -15.0);
0522 Range1D<double> i = r & q;
0523
0524 BOOST_CHECK(i.degenerate());
0525 }
0526
0527 BOOST_AUTO_TEST_CASE(intersection5_double) {
0528 Range1D<double> r(-10.0, 25.0);
0529 Range1D<double> q(50.0, 55.0);
0530 Range1D<double> i = r & q;
0531
0532 BOOST_CHECK(i.degenerate());
0533 }
0534
0535 BOOST_AUTO_TEST_CASE(intersects_edge_int_positive) {
0536 Range1D<int> r(-10, 11);
0537 Range1D<int> q(10, 20);
0538
0539 BOOST_CHECK((r && q));
0540 }
0541
0542 BOOST_AUTO_TEST_CASE(intersects_edge_int_negative) {
0543 Range1D<int> r(-10, 10);
0544 Range1D<int> q(10, 20);
0545
0546 BOOST_CHECK(!(r && q));
0547 }
0548
0549 BOOST_AUTO_TEST_CASE(single_value_not_degenerate_int_positive) {
0550 Range1D<int> r(10, 10);
0551
0552 BOOST_CHECK(r.degenerate());
0553 }
0554
0555 BOOST_AUTO_TEST_CASE(single_value_not_degenerate_int_negative) {
0556 Range1D<int> r(10, 11);
0557
0558 BOOST_CHECK(!r.degenerate());
0559 }
0560
0561 BOOST_AUTO_TEST_CASE(intersects_implies_non_degenerate_intersection) {
0562 for (int i1 : v) {
0563 for (int i2 : v) {
0564 for (int j1 : v) {
0565 for (int j2 : v) {
0566 Range1D<int> r(i1, i2);
0567 Range1D<int> q(j1, j2);
0568
0569 if (r.degenerate() || q.degenerate()) {
0570 continue;
0571 }
0572
0573 if (r && q) {
0574 BOOST_CHECK(!((r & q).degenerate()));
0575 } else {
0576 BOOST_CHECK(((r & q).degenerate()));
0577 }
0578 }
0579 }
0580 }
0581 }
0582 }
0583
0584 BOOST_AUTO_TEST_CASE(degeneracy_implies_size_zero_intersection) {
0585 for (int i1 : v) {
0586 for (int i2 : v) {
0587 Range1D<int> r(i1, i2);
0588
0589 if (r.degenerate()) {
0590 BOOST_CHECK_EQUAL(r.size(), 0);
0591 } else {
0592 BOOST_CHECK_GE(r.size(), 0);
0593 }
0594 }
0595 }
0596 }
0597
0598 BOOST_AUTO_TEST_CASE(range_inclusive_left) {
0599 Range1D<int> r(10, 20);
0600
0601 BOOST_CHECK(!r.contains(9));
0602 BOOST_CHECK(r.contains(10));
0603 BOOST_CHECK(r.contains(11));
0604 }
0605
0606 BOOST_AUTO_TEST_CASE(range_exclusive_right) {
0607 Range1D<int> r(10, 20);
0608
0609 BOOST_CHECK(r.contains(19));
0610 BOOST_CHECK(!r.contains(20));
0611 BOOST_CHECK(!r.contains(21));
0612 }
0613
0614 BOOST_AUTO_TEST_SUITE_END()
0615
0616 BOOST_AUTO_TEST_SUITE_END()
0617
0618 }