File indexing completed on 2025-11-05 08:55:16
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Definitions/Units.hpp"
0012 #include "Acts/EventData/Charge.hpp"
0013 #include "ActsTests/CommonHelpers/FloatComparisons.hpp"
0014
0015 #include <limits>
0016 #include <type_traits>
0017
0018 using namespace Acts;
0019 using namespace Acts::UnitLiterals;
0020
0021 static auto eps = std::numeric_limits<double>::epsilon();
0022
0023 BOOST_TEST_DONT_PRINT_LOG_VALUE(Neutral)
0024 BOOST_TEST_DONT_PRINT_LOG_VALUE(SinglyCharged)
0025 BOOST_TEST_DONT_PRINT_LOG_VALUE(NonNeutralCharge)
0026 BOOST_TEST_DONT_PRINT_LOG_VALUE(AnyCharge)
0027
0028 namespace ActsTests {
0029
0030 BOOST_AUTO_TEST_SUITE(EventDataSuite)
0031
0032 BOOST_AUTO_TEST_CASE(Constructibility) {
0033 BOOST_CHECK(std::is_trivially_default_constructible_v<Neutral>);
0034 BOOST_CHECK(std::is_trivially_default_constructible_v<SinglyCharged>);
0035 BOOST_CHECK(std::is_nothrow_default_constructible_v<Neutral>);
0036 BOOST_CHECK(std::is_nothrow_default_constructible_v<SinglyCharged>);
0037 BOOST_CHECK(std::is_trivially_constructible_v<Neutral>);
0038 BOOST_CHECK(std::is_trivially_constructible_v<SinglyCharged>);
0039
0040
0041 BOOST_CHECK(std::is_nothrow_constructible_v<Neutral>);
0042 BOOST_CHECK(std::is_nothrow_constructible_v<SinglyCharged>);
0043
0044
0045 }
0046
0047 BOOST_AUTO_TEST_CASE(NeutralTest) {
0048 Neutral q;
0049
0050 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 0_e);
0051 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 0_e);
0052 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), 0_e);
0053 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), 0_e);
0054 CHECK_CLOSE_REL(q.extractMomentum(1 / 64_GeV), 64_GeV, eps);
0055 CHECK_CLOSE_REL(q.extractMomentum(1 / 128_MeV), 128_MeV, eps);
0056
0057
0058
0059
0060
0061
0062 BOOST_CHECK_EQUAL(q, Neutral());
0063 BOOST_CHECK_EQUAL(Neutral(), q);
0064 BOOST_CHECK_EQUAL(q, Neutral(0_e));
0065 BOOST_CHECK_EQUAL(Neutral(0_e), q);
0066 }
0067
0068 BOOST_AUTO_TEST_CASE(SinglyChargedTest) {
0069 SinglyCharged q;
0070
0071 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 1_e);
0072 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 1_e);
0073 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), -1_e);
0074 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), -1_e);
0075 CHECK_CLOSE_REL(q.extractMomentum(1_e / 64_GeV), 64_GeV, eps);
0076 CHECK_CLOSE_REL(q.extractMomentum(1_e / 128_MeV), 128_MeV, eps);
0077 CHECK_CLOSE_REL(q.extractMomentum(-1_e / 128_MeV), 128_MeV, eps);
0078
0079 BOOST_CHECK_EQUAL(q, SinglyCharged());
0080 BOOST_CHECK_EQUAL(SinglyCharged(), q);
0081 BOOST_CHECK_EQUAL(q, SinglyCharged(1_e));
0082 BOOST_CHECK_EQUAL(SinglyCharged(1_e), q);
0083 }
0084
0085 BOOST_AUTO_TEST_CASE(NonNeutralChargeSingle) {
0086 NonNeutralCharge q(1_e);
0087
0088 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 1_e);
0089 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 1_e);
0090 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), -1_e);
0091 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), -1_e);
0092 CHECK_CLOSE_REL(q.extractMomentum(1_e / 64_GeV), 64_GeV, eps);
0093 CHECK_CLOSE_REL(q.extractMomentum(1_e / 128_MeV), 128_MeV, eps);
0094 CHECK_CLOSE_REL(q.extractMomentum(-1_e / 128_MeV), 128_MeV, eps);
0095
0096 BOOST_CHECK_EQUAL(q, NonNeutralCharge(1_e));
0097 BOOST_CHECK_EQUAL(NonNeutralCharge(1_e), q);
0098 }
0099
0100 BOOST_AUTO_TEST_CASE(NonNeutralChargeMultiple) {
0101 NonNeutralCharge q(3_e);
0102
0103 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 3_e);
0104 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 3_e);
0105 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), -3_e);
0106 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), -3_e);
0107 CHECK_CLOSE_REL(q.extractMomentum(3_e / 64_GeV), 64_GeV, eps);
0108 CHECK_CLOSE_REL(q.extractMomentum(3_e / 128_MeV), 128_MeV, eps);
0109 CHECK_CLOSE_REL(q.extractMomentum(-3_e / 128_MeV), 128_MeV, eps);
0110
0111 BOOST_CHECK(!(q == NonNeutralCharge(1_e)));
0112 BOOST_CHECK(!(NonNeutralCharge(1_e) == q));
0113 BOOST_CHECK(!(q == NonNeutralCharge(2_e)));
0114 BOOST_CHECK(!(NonNeutralCharge(2_e) == q));
0115 BOOST_CHECK(q == NonNeutralCharge(3_e));
0116 BOOST_CHECK(NonNeutralCharge(3_e) == q);
0117 }
0118
0119 BOOST_AUTO_TEST_CASE(AnyChargeNeutral) {
0120 AnyCharge q(0_e);
0121
0122 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 0_e);
0123 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 0_e);
0124 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), 0_e);
0125 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), 0_e);
0126 CHECK_CLOSE_REL(q.extractMomentum(1 / 64_GeV), 64_GeV, eps);
0127 CHECK_CLOSE_REL(q.extractMomentum(1 / 128_MeV), 128_MeV, eps);
0128
0129
0130
0131 CHECK_CLOSE_REL(q.extractMomentum(-1 / 128_MeV), -128_MeV, eps);
0132
0133 BOOST_CHECK(q == AnyCharge(0_e));
0134 BOOST_CHECK(AnyCharge(0_e) == q);
0135 BOOST_CHECK(!(q == AnyCharge(1_e)));
0136 BOOST_CHECK(!(AnyCharge(1_e) == q));
0137 BOOST_CHECK(!(q == AnyCharge(2_e)));
0138 BOOST_CHECK(!(AnyCharge(2_e) == q));
0139 }
0140
0141 BOOST_AUTO_TEST_CASE(AnyChargeSingle) {
0142 AnyCharge q(1_e);
0143
0144 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 1_e);
0145 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 1_e);
0146 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), -1_e);
0147 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), -1_e);
0148 CHECK_CLOSE_REL(q.extractMomentum(1_e / 64_GeV), 64_GeV, eps);
0149 CHECK_CLOSE_REL(q.extractMomentum(1_e / 128_MeV), 128_MeV, eps);
0150 CHECK_CLOSE_REL(q.extractMomentum(-1_e / 128_MeV), 128_MeV, eps);
0151
0152 BOOST_CHECK(!(q == AnyCharge(0_e)));
0153 BOOST_CHECK(!(AnyCharge(0_e) == q));
0154 BOOST_CHECK(q == AnyCharge(1_e));
0155 BOOST_CHECK(AnyCharge(1_e) == q);
0156 BOOST_CHECK(!(q == AnyCharge(2_e)));
0157 BOOST_CHECK(!(AnyCharge(2_e) == q));
0158 }
0159
0160 BOOST_AUTO_TEST_CASE(AnyChargeMultiple) {
0161 AnyCharge q(3_e);
0162
0163 BOOST_CHECK_EQUAL(q.extractCharge(1.23), 3_e);
0164 BOOST_CHECK_EQUAL(q.extractCharge(2.54), 3_e);
0165 BOOST_CHECK_EQUAL(q.extractCharge(-1.98), -3_e);
0166 BOOST_CHECK_EQUAL(q.extractCharge(-2.23), -3_e);
0167 CHECK_CLOSE_REL(q.extractMomentum(3_e / 64_GeV), 64_GeV, eps);
0168 CHECK_CLOSE_REL(q.extractMomentum(3_e / 128_MeV), 128_MeV, eps);
0169 CHECK_CLOSE_REL(q.extractMomentum(-3_e / 128_MeV), 128_MeV, eps);
0170
0171 BOOST_CHECK(!(q == AnyCharge(0_e)));
0172 BOOST_CHECK(!(AnyCharge(0_e) == q));
0173 BOOST_CHECK(!(q == AnyCharge(1_e)));
0174 BOOST_CHECK(!(AnyCharge(1_e) == q));
0175 BOOST_CHECK(!(q == AnyCharge(2_e)));
0176 BOOST_CHECK(!(AnyCharge(2_e) == q));
0177 BOOST_CHECK(q == AnyCharge(3_e));
0178 BOOST_CHECK(AnyCharge(3_e) == q);
0179 }
0180
0181 BOOST_AUTO_TEST_SUITE_END()
0182
0183 }