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