File indexing completed on 2025-08-06 08:11:28
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/tools/output_test_stream.hpp>
0011 #include <boost/test/unit_test.hpp>
0012
0013 #include "Acts/Definitions/Algebra.hpp"
0014 #include "Acts/Surfaces/BoundaryCheck.hpp"
0015 #include "Acts/Surfaces/DiscTrapezoidBounds.hpp"
0016 #include "Acts/Surfaces/SurfaceBounds.hpp"
0017 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0018
0019 #include <algorithm>
0020 #include <array>
0021 #include <stdexcept>
0022 #include <vector>
0023
0024 namespace Acts {
0025
0026 namespace Test {
0027 BOOST_AUTO_TEST_SUITE(Surfaces)
0028
0029
0030 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsConstruction) {
0031 double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0032 stereo(0.1);
0033
0034
0035 BOOST_CHECK_EQUAL(
0036 DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, averagePhi).type(),
0037 SurfaceBounds::eDiscTrapezoid);
0038
0039
0040 BOOST_CHECK_EQUAL(
0041 DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, averagePhi, stereo)
0042 .type(),
0043 SurfaceBounds::eDiscTrapezoid);
0044
0045
0046 DiscTrapezoidBounds original(minHalfX, maxHalfX, rMin, rMax, averagePhi);
0047 DiscTrapezoidBounds copied(original);
0048 BOOST_CHECK_EQUAL(copied.type(), SurfaceBounds::eDiscTrapezoid);
0049 }
0050
0051
0052 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsRecreation) {
0053 double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0054 stereo(0.1);
0055
0056 DiscTrapezoidBounds original(minHalfX, maxHalfX, rMin, rMax, averagePhi,
0057 stereo);
0058 auto valvector = original.values();
0059 std::array<double, DiscTrapezoidBounds::eSize> values{};
0060 std::copy_n(valvector.begin(), DiscTrapezoidBounds::eSize, values.begin());
0061 DiscTrapezoidBounds recreated(values);
0062 BOOST_CHECK_EQUAL(recreated, original);
0063 }
0064
0065
0066 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsExceptions) {
0067 double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0068 stereo(0.1);
0069
0070
0071 BOOST_CHECK_THROW(
0072 DiscTrapezoidBounds(-minHalfX, maxHalfX, rMin, rMax, averagePhi, stereo),
0073 std::logic_error);
0074
0075
0076 BOOST_CHECK_THROW(
0077 DiscTrapezoidBounds(minHalfX, -maxHalfX, rMin, rMax, averagePhi, stereo),
0078 std::logic_error);
0079
0080
0081 BOOST_CHECK_THROW(
0082 DiscTrapezoidBounds(-minHalfX, -maxHalfX, rMin, rMax, averagePhi, stereo),
0083 std::logic_error);
0084
0085
0086 BOOST_CHECK_THROW(
0087 DiscTrapezoidBounds(minHalfX, maxHalfX, -rMin, rMax, averagePhi, stereo),
0088 std::logic_error);
0089
0090
0091 BOOST_CHECK_THROW(
0092 DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, -rMax, averagePhi, stereo),
0093 std::logic_error);
0094
0095
0096 BOOST_CHECK_THROW(
0097 DiscTrapezoidBounds(minHalfX, maxHalfX, -rMin, -rMax, averagePhi, stereo),
0098 std::logic_error);
0099
0100
0101 BOOST_CHECK_THROW(
0102 DiscTrapezoidBounds(minHalfX, maxHalfX, rMin, rMax, 4., stereo),
0103 std::logic_error);
0104 }
0105
0106
0107 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsProperties) {
0108 double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0),
0109 averagePhi(0.0) ;
0110
0111 DiscTrapezoidBounds DiscTrapezoidBoundsObject(minHalfX, maxHalfX, rMin, rMax,
0112 averagePhi);
0113
0114
0115 BOOST_CHECK_EQUAL(DiscTrapezoidBoundsObject.type(),
0116 SurfaceBounds::eDiscTrapezoid);
0117
0118
0119 Vector2 origin(0., 0.);
0120 Vector2 outside(30., 0.);
0121 Vector2 inSurface(2.5, 0.0);
0122
0123
0124 boost::test_tools::output_test_stream dumpOuput;
0125 DiscTrapezoidBoundsObject.toStream(dumpOuput);
0126 BOOST_CHECK(dumpOuput.is_equal(
0127 "Acts::DiscTrapezoidBounds: (innerRadius, outerRadius, halfLengthXminR, "
0128 "halfLengthXmaxR, halfLengthY, halfPhiSector, averagePhi, rCenter, "
0129 "stereo) = "
0130 "(2.0000000, 6.0000000, 1.0000000, 5.0000000, 0.7922870, 0.9851108, "
0131 "0.0000000, 2.5243378, 0.0000000)"));
0132
0133
0134 BOOST_CHECK(DiscTrapezoidBoundsObject.inside(inSurface, BoundaryCheck(true)));
0135 BOOST_CHECK(!DiscTrapezoidBoundsObject.inside(outside, BoundaryCheck(true)));
0136
0137
0138 CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rMin(), rMin, 1e-6);
0139
0140
0141 CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rMax(), rMax, 1e-6);
0142
0143
0144 CHECK_SMALL(DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eAveragePhi),
0145 1e-9);
0146
0147
0148 CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.rCenter(), 2.524337798, 1e-6);
0149
0150
0151 CHECK_SMALL(DiscTrapezoidBoundsObject.stereo(), 1e-6);
0152
0153
0154 CHECK_CLOSE_REL(
0155 DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eHalfLengthXminR),
0156 minHalfX, 1e-6);
0157
0158
0159 CHECK_CLOSE_REL(
0160 DiscTrapezoidBoundsObject.get(DiscTrapezoidBounds::eHalfLengthXmaxR),
0161 maxHalfX, 1e-6);
0162
0163
0164 CHECK_CLOSE_REL(DiscTrapezoidBoundsObject.halfLengthY(), 0.792286991, 1e-6);
0165 }
0166
0167 BOOST_AUTO_TEST_CASE(DiscTrapezoidBoundsAssignment) {
0168 double minHalfX(1.0), maxHalfX(5.0), rMin(2.0), rMax(6.0), averagePhi(0.0),
0169 stereo(0.1);
0170 DiscTrapezoidBounds DiscTrapezoidBoundsObject(minHalfX, maxHalfX, rMin, rMax,
0171 averagePhi, stereo);
0172
0173
0174
0175 DiscTrapezoidBounds assignedDiscTrapezoidBoundsObject(2.1, 6.6, 3.4, 4.2, 0.3,
0176 0.);
0177 assignedDiscTrapezoidBoundsObject = DiscTrapezoidBoundsObject;
0178 BOOST_CHECK_EQUAL(assignedDiscTrapezoidBoundsObject,
0179 DiscTrapezoidBoundsObject);
0180 }
0181
0182 BOOST_AUTO_TEST_SUITE_END()
0183
0184 }
0185
0186 }