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