File indexing completed on 2025-10-24 08:20:22
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Geometry/GeometryIdentifier.hpp"
0012
0013 using namespace Acts;
0014
0015 namespace ActsTests {
0016
0017 BOOST_AUTO_TEST_CASE(GeometryIdentifier_construct_default) {
0018 GeometryIdentifier id;
0019 BOOST_CHECK_EQUAL(id.volume(), 0u);
0020 BOOST_CHECK_EQUAL(id.boundary(), 0u);
0021 BOOST_CHECK_EQUAL(id.layer(), 0u);
0022 BOOST_CHECK_EQUAL(id.approach(), 0u);
0023 BOOST_CHECK_EQUAL(id.sensitive(), 0u);
0024 }
0025
0026 BOOST_AUTO_TEST_CASE(GeometryIdentifier_construct_encoded) {
0027
0028
0029 GeometryIdentifier id{0xa0b00c00d00affe0u};
0030 BOOST_CHECK_EQUAL(id.volume(), 0xa0u);
0031 BOOST_CHECK_EQUAL(id.boundary(), 0xb0u);
0032 BOOST_CHECK_EQUAL(id.layer(), 0x0c0u);
0033 BOOST_CHECK_EQUAL(id.approach(), 0x0du);
0034 BOOST_CHECK_EQUAL(id.sensitive(), 0x00affu);
0035 BOOST_CHECK_EQUAL(id.extra(), 0xe0u);
0036 }
0037
0038 BOOST_AUTO_TEST_CASE(GeometryIdentifier_max_values) {
0039
0040 constexpr GeometryIdentifier::Value volumeMax = (1u << 8) - 1;
0041 constexpr GeometryIdentifier::Value boundaryMax = (1u << 8) - 1;
0042 constexpr GeometryIdentifier::Value layerMax = (1u << 12) - 1;
0043 constexpr GeometryIdentifier::Value approachMax = (1u << 8) - 1;
0044 constexpr GeometryIdentifier::Value sensitiveMax = (1u << 20) - 1;
0045 constexpr GeometryIdentifier::Value extraMax = (1u << 8) - 1;
0046
0047 constexpr GeometryIdentifier ref{0xdeadaffe01234567};
0048
0049
0050 BOOST_CHECK_THROW(
0051 static_cast<void>(GeometryIdentifier(ref).withVolume(volumeMax + 1)),
0052 std::invalid_argument);
0053 BOOST_CHECK_THROW(
0054 static_cast<void>(GeometryIdentifier(ref).withBoundary(boundaryMax + 1)),
0055 std::invalid_argument);
0056 BOOST_CHECK_THROW(
0057 static_cast<void>(GeometryIdentifier(ref).withLayer(layerMax + 1)),
0058 std::invalid_argument);
0059 BOOST_CHECK_THROW(
0060 static_cast<void>(GeometryIdentifier(ref).withApproach(approachMax + 1)),
0061 std::invalid_argument);
0062 BOOST_CHECK_THROW(static_cast<void>(GeometryIdentifier(ref).withSensitive(
0063 sensitiveMax + 1)),
0064 std::invalid_argument);
0065 BOOST_CHECK_THROW(
0066 static_cast<void>(GeometryIdentifier(ref).withExtra(extraMax + 1)),
0067 std::invalid_argument);
0068
0069 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxVolume(), 255);
0070 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxBoundary(), 255);
0071 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxLayer(), 4095);
0072 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxApproach(), 255);
0073 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxSensitive(), 1048575);
0074 BOOST_CHECK_EQUAL(GeometryIdentifier::getMaxExtra(), 255);
0075 }
0076
0077 BOOST_AUTO_TEST_CASE(GeometryIdentifier_order) {
0078 auto vol1 = GeometryIdentifier()
0079 .withVolume(1u)
0080 .withLayer(14u)
0081 .withSensitive(5u)
0082 .withExtra(42u);
0083 auto vol2 = GeometryIdentifier()
0084 .withVolume(2u)
0085 .withLayer(13u)
0086 .withSensitive(3u)
0087 .withExtra(43u);
0088
0089
0090 BOOST_CHECK_LT(vol1, vol2);
0091 BOOST_CHECK_LT(vol1.withBoundary(64u), vol2);
0092 BOOST_CHECK_LT(vol1.withLayer(64u), vol2);
0093 BOOST_CHECK_LT(vol1.withApproach(64u), vol2);
0094 BOOST_CHECK_LT(vol1.withSensitive(64u), vol2);
0095 BOOST_CHECK_LT(vol1.withSensitive(64u), vol2);
0096 BOOST_CHECK_LT(vol2, GeometryIdentifier(vol1).withVolume(3u));
0097
0098 BOOST_CHECK_LT(vol1.withVolume(1u).withBoundary(2u),
0099 vol1.withVolume(2u).withBoundary(1u));
0100 BOOST_CHECK_LT(vol1.withBoundary(1u).withLayer(2u),
0101 vol1.withBoundary(2u).withLayer(1u));
0102 BOOST_CHECK_LT(vol1.withLayer(1u).withApproach(2u),
0103 vol1.withLayer(2u).withApproach(1u));
0104 BOOST_CHECK_LT(vol1.withApproach(1u).withSensitive(2u),
0105 vol1.withApproach(2u).withSensitive(1u));
0106 BOOST_CHECK_LT(vol1.withSensitive(1u).withExtra(2u),
0107 vol1.withSensitive(2u).withExtra(1u));
0108 }
0109
0110 }