Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:11:31

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2017-2018 CERN for the benefit of the Acts project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
0008 
0009 #include <boost/test/unit_test.hpp>
0010 
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Utilities/detail/Axis.hpp"
0013 #include "Acts/Utilities/detail/AxisFwd.hpp"
0014 
0015 #include <cstddef>
0016 #include <vector>
0017 
0018 namespace Acts {
0019 
0020 using namespace detail;
0021 
0022 namespace Test {
0023 
0024 BOOST_AUTO_TEST_CASE(equidistant_axis) {
0025   EquidistantAxis a(0.0, 10.0, 10u);
0026 
0027   // general binning properties
0028   BOOST_CHECK_EQUAL(a.getNBins(), 10u);
0029   BOOST_CHECK_EQUAL(a.getMax(), 10.);
0030   BOOST_CHECK_EQUAL(a.getMin(), 0.);
0031   BOOST_CHECK_EQUAL(a.getBinWidth(), 1.);
0032 
0033   // bin index calculation
0034   BOOST_CHECK_EQUAL(a.getBin(-0.3), 0u);
0035   BOOST_CHECK_EQUAL(a.getBin(-0.), 1u);
0036   BOOST_CHECK_EQUAL(a.getBin(0.), 1u);
0037   BOOST_CHECK_EQUAL(a.getBin(0.7), 1u);
0038   BOOST_CHECK_EQUAL(a.getBin(1), 2u);
0039   BOOST_CHECK_EQUAL(a.getBin(1.2), 2u);
0040   BOOST_CHECK_EQUAL(a.getBin(2.), 3u);
0041   BOOST_CHECK_EQUAL(a.getBin(2.7), 3u);
0042   BOOST_CHECK_EQUAL(a.getBin(3.), 4u);
0043   BOOST_CHECK_EQUAL(a.getBin(3.6), 4u);
0044   BOOST_CHECK_EQUAL(a.getBin(4.), 5u);
0045   BOOST_CHECK_EQUAL(a.getBin(4.98), 5u);
0046   BOOST_CHECK_EQUAL(a.getBin(5.), 6u);
0047   BOOST_CHECK_EQUAL(a.getBin(5.12), 6u);
0048   BOOST_CHECK_EQUAL(a.getBin(6.), 7u);
0049   BOOST_CHECK_EQUAL(a.getBin(6.00001), 7u);
0050   BOOST_CHECK_EQUAL(a.getBin(7.), 8u);
0051   BOOST_CHECK_EQUAL(a.getBin(7.5), 8u);
0052   BOOST_CHECK_EQUAL(a.getBin(8.), 9u);
0053   BOOST_CHECK_EQUAL(a.getBin(8.1), 9u);
0054   BOOST_CHECK_EQUAL(a.getBin(9.), 10u);
0055   BOOST_CHECK_EQUAL(a.getBin(9.999), 10u);
0056   BOOST_CHECK_EQUAL(a.getBin(10.), 11u);
0057   BOOST_CHECK_EQUAL(a.getBin(100.3), 11u);
0058 
0059   // lower bin boundaries
0060   BOOST_CHECK_EQUAL(a.getBinLowerBound(1), 0.);
0061   BOOST_CHECK_EQUAL(a.getBinLowerBound(2), 1.);
0062   BOOST_CHECK_EQUAL(a.getBinLowerBound(3), 2.);
0063   BOOST_CHECK_EQUAL(a.getBinLowerBound(4), 3.);
0064   BOOST_CHECK_EQUAL(a.getBinLowerBound(5), 4.);
0065   BOOST_CHECK_EQUAL(a.getBinLowerBound(6), 5.);
0066   BOOST_CHECK_EQUAL(a.getBinLowerBound(7), 6.);
0067   BOOST_CHECK_EQUAL(a.getBinLowerBound(8), 7.);
0068   BOOST_CHECK_EQUAL(a.getBinLowerBound(9), 8.);
0069   BOOST_CHECK_EQUAL(a.getBinLowerBound(10), 9.);
0070 
0071   // upper bin boundaries
0072   BOOST_CHECK_EQUAL(a.getBinUpperBound(1), 1.);
0073   BOOST_CHECK_EQUAL(a.getBinUpperBound(2), 2.);
0074   BOOST_CHECK_EQUAL(a.getBinUpperBound(3), 3.);
0075   BOOST_CHECK_EQUAL(a.getBinUpperBound(4), 4.);
0076   BOOST_CHECK_EQUAL(a.getBinUpperBound(5), 5.);
0077   BOOST_CHECK_EQUAL(a.getBinUpperBound(6), 6.);
0078   BOOST_CHECK_EQUAL(a.getBinUpperBound(7), 7.);
0079   BOOST_CHECK_EQUAL(a.getBinUpperBound(8), 8.);
0080   BOOST_CHECK_EQUAL(a.getBinUpperBound(9), 9.);
0081   BOOST_CHECK_EQUAL(a.getBinUpperBound(10), 10.);
0082 
0083   // bin centers
0084   BOOST_CHECK_EQUAL(a.getBinCenter(1), 0.5);
0085   BOOST_CHECK_EQUAL(a.getBinCenter(2), 1.5);
0086   BOOST_CHECK_EQUAL(a.getBinCenter(3), 2.5);
0087   BOOST_CHECK_EQUAL(a.getBinCenter(4), 3.5);
0088   BOOST_CHECK_EQUAL(a.getBinCenter(5), 4.5);
0089   BOOST_CHECK_EQUAL(a.getBinCenter(6), 5.5);
0090   BOOST_CHECK_EQUAL(a.getBinCenter(7), 6.5);
0091   BOOST_CHECK_EQUAL(a.getBinCenter(8), 7.5);
0092   BOOST_CHECK_EQUAL(a.getBinCenter(9), 8.5);
0093   BOOST_CHECK_EQUAL(a.getBinCenter(10), 9.5);
0094 
0095   // inside check
0096   BOOST_CHECK(!a.isInside(-0.2));
0097   BOOST_CHECK(a.isInside(0.));
0098   BOOST_CHECK(a.isInside(3.));
0099   BOOST_CHECK(!a.isInside(10.));
0100   BOOST_CHECK(!a.isInside(12.));
0101 }
0102 
0103 BOOST_AUTO_TEST_CASE(variable_axis) {
0104   VariableAxis a({0, 0.5, 3, 4.5, 6});
0105 
0106   // general binning properties
0107   BOOST_CHECK_EQUAL(a.getNBins(), 4u);
0108   BOOST_CHECK_EQUAL(a.getMax(), 6.);
0109   BOOST_CHECK_EQUAL(a.getMin(), 0.);
0110 
0111   // bin index calculation
0112   BOOST_CHECK_EQUAL(a.getBin(-0.3), 0u);
0113   BOOST_CHECK_EQUAL(a.getBin(-0.), 1u);
0114   BOOST_CHECK_EQUAL(a.getBin(0.), 1u);
0115   BOOST_CHECK_EQUAL(a.getBin(0.3), 1u);
0116   BOOST_CHECK_EQUAL(a.getBin(0.5), 2u);
0117   BOOST_CHECK_EQUAL(a.getBin(1.2), 2u);
0118   BOOST_CHECK_EQUAL(a.getBin(2.7), 2u);
0119   BOOST_CHECK_EQUAL(a.getBin(3.), 3u);
0120   BOOST_CHECK_EQUAL(a.getBin(4.49999), 3u);
0121   BOOST_CHECK_EQUAL(a.getBin(4.5), 4u);
0122   BOOST_CHECK_EQUAL(a.getBin(5.12), 4u);
0123   BOOST_CHECK_EQUAL(a.getBin(6.), 5u);
0124   BOOST_CHECK_EQUAL(a.getBin(6.00001), 5u);
0125   BOOST_CHECK_EQUAL(a.getBin(7.5), 5u);
0126 
0127   // lower bin boundaries
0128   BOOST_CHECK_EQUAL(a.getBinLowerBound(1), 0.);
0129   BOOST_CHECK_EQUAL(a.getBinLowerBound(2), 0.5);
0130   BOOST_CHECK_EQUAL(a.getBinLowerBound(3), 3.);
0131   BOOST_CHECK_EQUAL(a.getBinLowerBound(4), 4.5);
0132 
0133   // upper bin boundaries
0134   BOOST_CHECK_EQUAL(a.getBinUpperBound(1), 0.5);
0135   BOOST_CHECK_EQUAL(a.getBinUpperBound(2), 3.);
0136   BOOST_CHECK_EQUAL(a.getBinUpperBound(3), 4.5);
0137   BOOST_CHECK_EQUAL(a.getBinUpperBound(4), 6.);
0138 
0139   // bin centers
0140   BOOST_CHECK_EQUAL(a.getBinCenter(1), 0.25);
0141   BOOST_CHECK_EQUAL(a.getBinCenter(2), 1.75);
0142   BOOST_CHECK_EQUAL(a.getBinCenter(3), 3.75);
0143   BOOST_CHECK_EQUAL(a.getBinCenter(4), 5.25);
0144 
0145   // inside check
0146   BOOST_CHECK(!a.isInside(-0.2));
0147   BOOST_CHECK(a.isInside(0.));
0148   BOOST_CHECK(a.isInside(3.));
0149   BOOST_CHECK(!a.isInside(6.));
0150   BOOST_CHECK(!a.isInside(12.));
0151 }
0152 
0153 BOOST_AUTO_TEST_CASE(open_axis) {
0154   Axis<AxisType::Equidistant, AxisBoundaryType::Bound> a(0, 10, 10);
0155 
0156   // normal inside
0157   BOOST_CHECK_EQUAL(a.getBin(0.5), 1u);
0158   BOOST_CHECK_EQUAL(a.getBin(9.5), 10u);
0159 
0160   // out of bounds, but is open
0161   // -> should clamp
0162   BOOST_CHECK_EQUAL(a.getBin(-0.5), 1u);
0163   BOOST_CHECK_EQUAL(a.getBin(10.5), 10u);
0164 
0165   Axis<AxisType::Variable, AxisBoundaryType::Bound> b(
0166       {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
0167 
0168   // normal inside
0169   BOOST_CHECK_EQUAL(b.getBin(0.5), 1u);
0170   BOOST_CHECK_EQUAL(b.getBin(9.5), 10u);
0171 
0172   // out of bounds, but is open
0173   // -> should clamp
0174   BOOST_CHECK_EQUAL(b.getBin(-0.5), 1u);
0175   BOOST_CHECK_EQUAL(b.getBin(10.5), 10u);
0176 }
0177 
0178 BOOST_AUTO_TEST_CASE(closed_axis) {
0179   Axis<AxisType::Equidistant, AxisBoundaryType::Closed> a(0, 10, 10);
0180 
0181   // normal inside
0182   BOOST_CHECK_EQUAL(a.getBin(0.5), 1u);
0183   BOOST_CHECK_EQUAL(a.getBin(9.5), 10u);
0184 
0185   // out of bounds, but is closed
0186   // -> should wrap to opposite side bin
0187   BOOST_CHECK_EQUAL(a.getBin(-0.5), 10u);
0188   BOOST_CHECK_EQUAL(a.getBin(10.5), 1u);
0189 
0190   Axis<AxisType::Variable, AxisBoundaryType::Closed> b(
0191       {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10});
0192 
0193   // normal inside
0194   BOOST_CHECK_EQUAL(b.getBin(0.5), 1u);
0195   BOOST_CHECK_EQUAL(b.getBin(9.5), 10u);
0196 
0197   // out of bounds, but is closed
0198   // -> should wrap to opposite side bin
0199   BOOST_CHECK_EQUAL(b.getBin(-0.5), 10u);
0200   BOOST_CHECK_EQUAL(b.getBin(10.5), 1u);
0201 }
0202 
0203 BOOST_AUTO_TEST_CASE(neighborhood) {
0204   using bins_t = std::vector<std::size_t>;
0205   Axis<AxisType::Equidistant, AxisBoundaryType::Open> a1(0.0, 1.0, 10u);
0206 
0207   BOOST_CHECK(a1.neighborHoodIndices(0, 1).collect() == bins_t({0, 1}));
0208   BOOST_CHECK(a1.neighborHoodIndices(1, 1).collect() == bins_t({0, 1, 2}));
0209   BOOST_CHECK(a1.neighborHoodIndices(11, 1).collect() == bins_t({10, 11}));
0210   BOOST_CHECK(a1.neighborHoodIndices(10, 1).collect() == bins_t({9, 10, 11}));
0211   BOOST_CHECK(a1.neighborHoodIndices(5, 1).collect() == bins_t({4, 5, 6}));
0212   BOOST_CHECK(a1.neighborHoodIndices(5, {-1, 0}).collect() == bins_t({4, 5}));
0213   BOOST_CHECK(a1.neighborHoodIndices(5, {0, 1}).collect() == bins_t({5, 6}));
0214 
0215   BOOST_CHECK(a1.neighborHoodIndices(0, 2).collect() == bins_t({0, 1, 2}));
0216   BOOST_CHECK(a1.neighborHoodIndices(1, 2).collect() == bins_t({0, 1, 2, 3}));
0217   BOOST_CHECK(a1.neighborHoodIndices(11, 2).collect() == bins_t({9, 10, 11}));
0218   BOOST_CHECK(a1.neighborHoodIndices(10, 2).collect() ==
0219               bins_t({8, 9, 10, 11}));
0220   BOOST_CHECK(a1.neighborHoodIndices(5, 2).collect() ==
0221               bins_t({3, 4, 5, 6, 7}));
0222 
0223   Axis<AxisType::Variable, AxisBoundaryType::Open> a2(
0224       {0.0, 2.0, 4.0, 9.0, 10.0});
0225   BOOST_CHECK(a2.neighborHoodIndices(0, 1).collect() == bins_t({0, 1}));
0226   BOOST_CHECK(a2.neighborHoodIndices(1, 1).collect() == bins_t({0, 1, 2}));
0227   BOOST_CHECK(a2.neighborHoodIndices(5, 1).collect() == bins_t({4, 5}));
0228   BOOST_CHECK(a2.neighborHoodIndices(4, 1).collect() == bins_t({3, 4, 5}));
0229   BOOST_CHECK(a2.neighborHoodIndices(4, {-1, 0}).collect() == bins_t({3, 4}));
0230   BOOST_CHECK(a2.neighborHoodIndices(2, 1).collect() == bins_t({1, 2, 3}));
0231   BOOST_CHECK(a2.neighborHoodIndices(2, {0, 1}).collect() == bins_t({2, 3}));
0232 
0233   BOOST_CHECK(a2.neighborHoodIndices(0, 2).collect() == bins_t({0, 1, 2}));
0234   BOOST_CHECK(a2.neighborHoodIndices(1, 2).collect() == bins_t({0, 1, 2, 3}));
0235   BOOST_CHECK(a2.neighborHoodIndices(5, 2).collect() == bins_t({3, 4, 5}));
0236   BOOST_CHECK(a2.neighborHoodIndices(4, 2).collect() == bins_t({2, 3, 4, 5}));
0237   BOOST_CHECK(a2.neighborHoodIndices(3, 2).collect() ==
0238               bins_t({1, 2, 3, 4, 5}));
0239 
0240   Axis<AxisType::Equidistant, AxisBoundaryType::Bound> a3(0.0, 1.0, 10u);
0241 
0242   BOOST_CHECK(a3.neighborHoodIndices(0, 1).collect() == bins_t({}));
0243   BOOST_CHECK(a3.neighborHoodIndices(1, 1).collect() == bins_t({1, 2}));
0244   BOOST_CHECK(a3.neighborHoodIndices(11, 1).collect() == bins_t({}));
0245   BOOST_CHECK(a3.neighborHoodIndices(10, 1).collect() == bins_t({9, 10}));
0246   BOOST_CHECK(a3.neighborHoodIndices(10, {0, 1}).collect() == bins_t({10}));
0247   BOOST_CHECK(a3.neighborHoodIndices(5, 1).collect() == bins_t({4, 5, 6}));
0248   BOOST_CHECK(a3.neighborHoodIndices(5, {-1, 0}).collect() == bins_t({4, 5}));
0249   BOOST_CHECK(a3.neighborHoodIndices(5, {0, 1}).collect() == bins_t({5, 6}));
0250 
0251   BOOST_CHECK(a3.neighborHoodIndices(0, 2).collect() == bins_t({}));
0252   BOOST_CHECK(a3.neighborHoodIndices(1, 2).collect() == bins_t({1, 2, 3}));
0253   BOOST_CHECK(a3.neighborHoodIndices(11, 2).collect() == bins_t({}));
0254   BOOST_CHECK(a3.neighborHoodIndices(10, 2).collect() == bins_t({8, 9, 10}));
0255   BOOST_CHECK(a3.neighborHoodIndices(5, 2).collect() ==
0256               bins_t({3, 4, 5, 6, 7}));
0257 
0258   Axis<AxisType::Equidistant, AxisBoundaryType::Closed> a4(0.0, 1.0, 10u);
0259 
0260   BOOST_CHECK(a4.neighborHoodIndices(0, 1).collect() == bins_t({}));
0261   BOOST_CHECK(a4.neighborHoodIndices(1, 1).collect() == bins_t({10, 1, 2}));
0262   BOOST_CHECK(a4.neighborHoodIndices(11, 1).collect() == bins_t({}));
0263   BOOST_CHECK(a4.neighborHoodIndices(10, 1).collect() == bins_t({9, 10, 1}));
0264   BOOST_CHECK(a4.neighborHoodIndices(10, {0, 1}).collect() == bins_t({10, 1}));
0265   BOOST_CHECK(a4.neighborHoodIndices(5, 1).collect() == bins_t({4, 5, 6}));
0266   BOOST_CHECK(a4.neighborHoodIndices(5, {-1, 0}).collect() == bins_t({4, 5}));
0267   BOOST_CHECK(a4.neighborHoodIndices(5, {0, 1}).collect() == bins_t({5, 6}));
0268 
0269   BOOST_CHECK(a4.neighborHoodIndices(0, 2).collect() == bins_t({}));
0270   BOOST_CHECK(a4.neighborHoodIndices(1, 2).collect() ==
0271               bins_t({9, 10, 1, 2, 3}));
0272   BOOST_CHECK(a4.neighborHoodIndices(11, 2).collect() == bins_t({}));
0273   BOOST_CHECK(a4.neighborHoodIndices(10, 2).collect() ==
0274               bins_t({8, 9, 10, 1, 2}));
0275   BOOST_CHECK(a4.neighborHoodIndices(5, 2).collect() ==
0276               bins_t({3, 4, 5, 6, 7}));
0277 
0278   Axis<AxisType::Variable, AxisBoundaryType::Bound> a5(
0279       {0.0, 2.0, 4.0, 9.0, 9.5, 10.0});
0280   BOOST_CHECK(a5.neighborHoodIndices(0, 1).collect() == bins_t({}));
0281   BOOST_CHECK(a5.neighborHoodIndices(1, 1).collect() == bins_t({1, 2}));
0282   BOOST_CHECK(a5.neighborHoodIndices(6, 1).collect() == bins_t({}));
0283   BOOST_CHECK(a5.neighborHoodIndices(5, 1).collect() == bins_t({4, 5}));
0284   BOOST_CHECK(a5.neighborHoodIndices(5, {0, 1}).collect() == bins_t({5}));
0285   BOOST_CHECK(a5.neighborHoodIndices(2, 1).collect() == bins_t({1, 2, 3}));
0286   BOOST_CHECK(a5.neighborHoodIndices(2, {-1, 0}).collect() == bins_t({1, 2}));
0287   BOOST_CHECK(a5.neighborHoodIndices(2, {0, 1}).collect() == bins_t({2, 3}));
0288 
0289   BOOST_CHECK(a5.neighborHoodIndices(0, 2).collect() == bins_t({}));
0290   BOOST_CHECK(a5.neighborHoodIndices(1, 2).collect() == bins_t({1, 2, 3}));
0291   BOOST_CHECK(a5.neighborHoodIndices(6, 2).collect() == bins_t({}));
0292   BOOST_CHECK(a5.neighborHoodIndices(5, 2).collect() == bins_t({3, 4, 5}));
0293   BOOST_CHECK(a5.neighborHoodIndices(3, 2).collect() ==
0294               bins_t({1, 2, 3, 4, 5}));
0295 
0296   Axis<AxisType::Variable, AxisBoundaryType::Closed> a6(
0297       {0.0, 2.0, 4.0, 9.0, 9.5, 10.0});
0298   BOOST_CHECK(a6.neighborHoodIndices(0, 1).collect() == bins_t({}));
0299   BOOST_CHECK(a6.neighborHoodIndices(1, 1).collect() == bins_t({5, 1, 2}));
0300   BOOST_CHECK(a6.neighborHoodIndices(6, 1).collect() == bins_t({}));
0301   BOOST_CHECK(a6.neighborHoodIndices(5, 1).collect() == bins_t({4, 5, 1}));
0302   BOOST_CHECK(a6.neighborHoodIndices(5, {0, 1}).collect() == bins_t({5, 1}));
0303   BOOST_CHECK(a6.neighborHoodIndices(2, 1).collect() == bins_t({1, 2, 3}));
0304   BOOST_CHECK(a6.neighborHoodIndices(2, {-1, 0}).collect() == bins_t({1, 2}));
0305   BOOST_CHECK(a6.neighborHoodIndices(2, {0, 1}).collect() == bins_t({2, 3}));
0306 
0307   BOOST_CHECK(a6.neighborHoodIndices(0, 2).collect() == bins_t({}));
0308   BOOST_CHECK(a6.neighborHoodIndices(1, 2).collect() ==
0309               bins_t({4, 5, 1, 2, 3}));
0310   BOOST_CHECK(a6.neighborHoodIndices(6, 2).collect() == bins_t({}));
0311   BOOST_CHECK(a6.neighborHoodIndices(5, 2).collect() ==
0312               bins_t({3, 4, 5, 1, 2}));
0313   BOOST_CHECK(a6.neighborHoodIndices(3, 2).collect() ==
0314               bins_t({1, 2, 3, 4, 5}));
0315   BOOST_CHECK(a6.neighborHoodIndices(3, {0, 2}).collect() == bins_t({3, 4, 5}));
0316 
0317   BOOST_CHECK(a6.neighborHoodIndices(1, 3).collect() ==
0318               bins_t({1, 2, 3, 4, 5}));
0319   BOOST_CHECK(a6.neighborHoodIndices(5, 3).collect() ==
0320               bins_t({1, 2, 3, 4, 5}));
0321 }
0322 
0323 BOOST_AUTO_TEST_CASE(wrapBin) {
0324   Axis<AxisType::Equidistant, AxisBoundaryType::Open> a1(0.0, 1.0, 10u);
0325   BOOST_CHECK_EQUAL(a1.wrapBin(0), 0u);
0326   BOOST_CHECK_EQUAL(a1.wrapBin(1), 1u);
0327   BOOST_CHECK_EQUAL(a1.wrapBin(-1), 0u);
0328   BOOST_CHECK_EQUAL(a1.wrapBin(10), 10u);
0329   BOOST_CHECK_EQUAL(a1.wrapBin(11), 11u);
0330   BOOST_CHECK_EQUAL(a1.wrapBin(12), 11u);
0331 
0332   Axis<AxisType::Equidistant, AxisBoundaryType::Bound> a2(0.0, 1.0, 10u);
0333   BOOST_CHECK_EQUAL(a2.wrapBin(0), 1u);
0334   BOOST_CHECK_EQUAL(a2.wrapBin(1), 1u);
0335   BOOST_CHECK_EQUAL(a2.wrapBin(-1), 1u);
0336   BOOST_CHECK_EQUAL(a2.wrapBin(10), 10u);
0337   BOOST_CHECK_EQUAL(a2.wrapBin(11), 10u);
0338   BOOST_CHECK_EQUAL(a2.wrapBin(12), 10u);
0339 
0340   Axis<AxisType::Equidistant, AxisBoundaryType::Closed> a3(0.0, 1.0, 10u);
0341   BOOST_CHECK_EQUAL(a3.wrapBin(0), 10u);
0342   BOOST_CHECK_EQUAL(a3.wrapBin(1), 1u);
0343   BOOST_CHECK_EQUAL(a3.wrapBin(-1), 9u);
0344   BOOST_CHECK_EQUAL(a3.wrapBin(10), 10u);
0345   BOOST_CHECK_EQUAL(a3.wrapBin(11), 1u);
0346   BOOST_CHECK_EQUAL(a3.wrapBin(12), 2u);
0347 
0348   Axis<AxisType::Variable, AxisBoundaryType::Open> a4(
0349       {0.0, 2.0, 4.0, 9.0, 10.0});
0350   BOOST_CHECK_EQUAL(a4.wrapBin(0), 0u);
0351   BOOST_CHECK_EQUAL(a4.wrapBin(1), 1u);
0352   BOOST_CHECK_EQUAL(a4.wrapBin(-1), 0u);
0353   BOOST_CHECK_EQUAL(a4.wrapBin(4), 4u);
0354   BOOST_CHECK_EQUAL(a4.wrapBin(5), 5u);
0355   BOOST_CHECK_EQUAL(a4.wrapBin(6), 5u);
0356 
0357   Axis<AxisType::Variable, AxisBoundaryType::Bound> a5(
0358       {0.0, 2.0, 4.0, 9.0, 9.5, 10.0});
0359   BOOST_CHECK_EQUAL(a5.wrapBin(0), 1u);
0360   BOOST_CHECK_EQUAL(a5.wrapBin(1), 1u);
0361   BOOST_CHECK_EQUAL(a5.wrapBin(-1), 1u);
0362   BOOST_CHECK_EQUAL(a5.wrapBin(4), 4u);
0363   BOOST_CHECK_EQUAL(a5.wrapBin(5), 5u);
0364   BOOST_CHECK_EQUAL(a5.wrapBin(6), 5u);
0365 
0366   Axis<AxisType::Variable, AxisBoundaryType::Closed> a6(
0367       {0.0, 2.0, 4.0, 9.0, 9.5, 10.0});
0368   BOOST_CHECK_EQUAL(a6.wrapBin(0), 5u);
0369   BOOST_CHECK_EQUAL(a6.wrapBin(1), 1u);
0370   BOOST_CHECK_EQUAL(a6.wrapBin(-1), 4u);
0371   BOOST_CHECK_EQUAL(a6.wrapBin(4), 4u);
0372   BOOST_CHECK_EQUAL(a6.wrapBin(5), 5u);
0373   BOOST_CHECK_EQUAL(a6.wrapBin(6), 1u);
0374   BOOST_CHECK_EQUAL(a6.wrapBin(7), 2u);
0375 }
0376 
0377 }  // namespace Test
0378 
0379 }  // namespace Acts