File indexing completed on 2025-08-06 08:11:19
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/data/test_case.hpp>
0010 #include <boost/test/tools/context.hpp>
0011 #include <boost/test/unit_test.hpp>
0012
0013 #include "Acts/EventData/TrackStatePropMask.hpp"
0014 #include "Acts/Utilities/Helpers.hpp"
0015
0016 #include <array>
0017 #include <bitset>
0018 #include <cstddef>
0019 #include <type_traits>
0020
0021 using namespace Acts;
0022
0023 BOOST_AUTO_TEST_SUITE(TrackStatePropMaskTest)
0024
0025 BOOST_AUTO_TEST_CASE(BitmaskOperators) {
0026 using PM = TrackStatePropMask;
0027
0028 auto bs1 = PM::Predicted;
0029
0030 BOOST_CHECK(ACTS_CHECK_BIT(bs1, PM::Predicted));
0031 BOOST_CHECK(!ACTS_CHECK_BIT(bs1, PM::Calibrated));
0032
0033 auto bs2 = PM::Calibrated;
0034
0035 BOOST_CHECK(!ACTS_CHECK_BIT(bs2, PM::Predicted));
0036 BOOST_CHECK(ACTS_CHECK_BIT(bs2, PM::Calibrated));
0037
0038 auto bs3 = PM::Calibrated | PM::Predicted;
0039
0040 BOOST_CHECK(ACTS_CHECK_BIT(bs3, PM::Predicted));
0041 BOOST_CHECK(ACTS_CHECK_BIT(bs3, PM::Calibrated));
0042
0043 BOOST_CHECK(ACTS_CHECK_BIT(PM::All, PM::Predicted));
0044 BOOST_CHECK(ACTS_CHECK_BIT(PM::All, PM::Calibrated));
0045
0046 auto bs4 = PM::Predicted | PM::Jacobian | PM::Smoothed;
0047 BOOST_CHECK(ACTS_CHECK_BIT(bs4, PM::Predicted));
0048 BOOST_CHECK(ACTS_CHECK_BIT(bs4, PM::Jacobian));
0049 BOOST_CHECK(ACTS_CHECK_BIT(bs4, PM::Smoothed));
0050 BOOST_CHECK(!ACTS_CHECK_BIT(bs4, PM::Calibrated));
0051 BOOST_CHECK(!ACTS_CHECK_BIT(bs4, PM::Filtered));
0052
0053 auto cnv = [](auto a) -> std::bitset<8> {
0054 return static_cast<std::underlying_type<PM>::type>(a);
0055 };
0056
0057 BOOST_CHECK(cnv(PM::All).all());
0058 BOOST_CHECK(cnv(PM::None).none());
0059
0060
0061 std::array<PM, 5> values{PM::Predicted, PM::Filtered, PM::Smoothed,
0062 PM::Jacobian, PM::Calibrated};
0063 for (std::size_t i = 0; i < values.size(); i++) {
0064 for (std::size_t j = 0; j < values.size(); j++) {
0065 PM a = values[i];
0066 PM b = values[j];
0067
0068 if (i == j) {
0069 BOOST_CHECK_EQUAL(cnv(a & b).count(), 1);
0070 } else {
0071 BOOST_CHECK(cnv(a & b).none());
0072 }
0073 }
0074 }
0075
0076 BOOST_CHECK_EQUAL(cnv(PM::Predicted ^ PM::Filtered).count(), 2);
0077 BOOST_CHECK(cnv(PM::Predicted ^ PM::Predicted).none());
0078 BOOST_CHECK_EQUAL(~(PM::Predicted | PM::Calibrated),
0079 (PM::All ^ PM::Predicted ^ PM::Calibrated));
0080
0081 PM base = PM::None;
0082 BOOST_CHECK_EQUAL(cnv(base), 0);
0083
0084 base &= PM::Filtered;
0085 BOOST_CHECK_EQUAL(cnv(base), 0);
0086
0087 base |= PM::Filtered;
0088 BOOST_CHECK_EQUAL(base, PM::Filtered);
0089
0090 base |= PM::Calibrated;
0091 BOOST_CHECK_EQUAL(base, (PM::Filtered | PM::Calibrated));
0092
0093 base ^= PM::All;
0094 BOOST_CHECK_EQUAL(base, ~(PM::Filtered | PM::Calibrated));
0095 }
0096 BOOST_AUTO_TEST_SUITE_END()