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/ConeBounds.hpp"
0015 #include "Acts/Surfaces/SurfaceBounds.hpp"
0016 #include "Acts/Tests/CommonHelpers/FloatComparisons.hpp"
0017
0018 #include <algorithm>
0019 #include <array>
0020 #include <cmath>
0021 #include <stdexcept>
0022 #include <vector>
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033 namespace Acts {
0034
0035 namespace Test {
0036
0037 BOOST_AUTO_TEST_SUITE(Surfaces)
0038
0039
0040 BOOST_AUTO_TEST_CASE(ConeBoundsConstruction) {
0041
0042
0043 double alpha(M_PI / 8.0), zMin(3.), zMax(6.), halfPhi(M_PI / 4.0),
0044 averagePhi(0.);
0045 const bool symmetric(false);
0046 BOOST_TEST_CHECKPOINT("Four parameter constructor (last two at default)");
0047 ConeBounds defaultConeBounds(alpha, symmetric);
0048 BOOST_CHECK_EQUAL(defaultConeBounds.type(), SurfaceBounds::eCone);
0049 BOOST_TEST_CHECKPOINT("Four parameter constructor");
0050 ConeBounds fourParameterConstructed(alpha, symmetric, halfPhi, averagePhi);
0051 BOOST_CHECK_EQUAL(fourParameterConstructed.type(), SurfaceBounds::eCone);
0052 BOOST_TEST_CHECKPOINT("Five parameter constructor (last two at default)");
0053 ConeBounds defaulted5ParamConeBounds(alpha, zMin, zMax);
0054 BOOST_CHECK_EQUAL(defaulted5ParamConeBounds.type(), SurfaceBounds::eCone);
0055 BOOST_TEST_CHECKPOINT("Five parameter constructor)");
0056 ConeBounds fiveParamConstructedConeBounds(alpha, zMin, zMax, halfPhi,
0057 averagePhi);
0058 BOOST_CHECK_EQUAL(fiveParamConstructedConeBounds.type(),
0059 SurfaceBounds::eCone);
0060 BOOST_TEST_CHECKPOINT("Copy constructor");
0061 ConeBounds copyConstructedConeBounds(fiveParamConstructedConeBounds);
0062 BOOST_CHECK_EQUAL(copyConstructedConeBounds, fiveParamConstructedConeBounds);
0063 }
0064
0065
0066 BOOST_AUTO_TEST_CASE(ConeBoundsRecreation) {
0067 double alpha(M_PI / 8.0), zMin(3.), zMax(6.), halfPhi(M_PI / 4.0),
0068 averagePhi(0.);
0069
0070 ConeBounds original(alpha, zMin, zMax, halfPhi, averagePhi);
0071 auto valvector = original.values();
0072 std::array<double, ConeBounds::eSize> values{};
0073 std::copy_n(valvector.begin(), ConeBounds::eSize, values.begin());
0074 ConeBounds recreated(values);
0075 BOOST_CHECK_EQUAL(recreated, original);
0076 }
0077
0078
0079 BOOST_AUTO_TEST_CASE(ConeBoundsExceptions) {
0080 double alpha(M_PI / 8.0), zMin(3.), zMax(6.), halfPhi(M_PI / 4.0),
0081 averagePhi(0.);
0082
0083
0084 BOOST_CHECK_THROW(ConeBounds(-alpha, zMin, zMax, halfPhi, averagePhi),
0085 std::logic_error);
0086
0087 BOOST_CHECK_THROW(ConeBounds(M_PI, zMin, zMax, halfPhi, averagePhi),
0088 std::logic_error);
0089
0090 BOOST_CHECK_THROW(ConeBounds(alpha, zMax, zMin, halfPhi, averagePhi),
0091 std::logic_error);
0092
0093 BOOST_CHECK_THROW(ConeBounds(alpha, zMin, zMax, -halfPhi, averagePhi),
0094 std::logic_error);
0095
0096 BOOST_CHECK_THROW(ConeBounds(alpha, zMin, zMax, halfPhi, 2 * M_PI),
0097 std::logic_error);
0098 }
0099
0100
0101 BOOST_AUTO_TEST_CASE(ConeBoundsProperties) {
0102 double alpha(M_PI / 8.0), zMin(3.), zMax(6.), halfPhi(M_PI / 4.0),
0103 averagePhi(0.);
0104
0105 const Vector2 origin(0, 0);
0106 const Vector2 somewhere(4., 4.);
0107 ConeBounds coneBoundsObject(alpha, zMin, zMax, halfPhi, averagePhi);
0108
0109
0110 BOOST_CHECK_EQUAL(coneBoundsObject.type(), SurfaceBounds::eCone);
0111
0112
0113 BOOST_CHECK(!coneBoundsObject.inside(origin));
0114
0115
0116 CHECK_CLOSE_REL(coneBoundsObject.r(zMin), zMin * std::tan(alpha), 1e-6);
0117
0118
0119 CHECK_CLOSE_REL(coneBoundsObject.tanAlpha(), std::tan(alpha), 1e-6);
0120
0121
0122 CHECK_CLOSE_REL(coneBoundsObject.get(ConeBounds::eAlpha), alpha, 1e-6);
0123
0124
0125 CHECK_CLOSE_REL(coneBoundsObject.get(ConeBounds::eMinZ), zMin, 1e-6);
0126
0127
0128 CHECK_CLOSE_REL(coneBoundsObject.get(ConeBounds::eMaxZ), zMax, 1e-6);
0129
0130
0131 CHECK_CLOSE_REL(coneBoundsObject.get(ConeBounds::eHalfPhiSector), halfPhi,
0132 1e-6);
0133
0134 boost::test_tools::output_test_stream dumpOuput;
0135 coneBoundsObject.toStream(dumpOuput);
0136 BOOST_CHECK(dumpOuput.is_equal(
0137 "Acts::ConeBounds: (tanAlpha, minZ, maxZ, halfPhiSector, averagePhi) = "
0138 "(0.4142136, 3.0000000, 6.0000000, 0.7853982, 0.0000000)"));
0139 }
0140
0141
0142 BOOST_AUTO_TEST_CASE(ConeBoundsAssignment) {
0143 double alpha(M_PI / 8.0), zMin(3.), zMax(6.), halfPhi(M_PI / 4.0),
0144 averagePhi(0.);
0145
0146 ConeBounds originalConeBounds(alpha, zMin, zMax, halfPhi, averagePhi);
0147 ConeBounds assignedConeBounds(0.1, 2.3, 4.5, 1.2, 2.1);
0148 assignedConeBounds = originalConeBounds;
0149 BOOST_CHECK_EQUAL(assignedConeBounds, originalConeBounds);
0150 }
0151
0152 BOOST_AUTO_TEST_SUITE_END()
0153
0154 }
0155
0156 }