File indexing completed on 2026-11-14 09:33:54
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Utilities/Grid.hpp"
0013 #include "Acts/Utilities/GridAccessHelpers.hpp"
0014 #include "Acts/Utilities/GridAxisGenerators.hpp"
0015
0016 using namespace Acts;
0017
0018 namespace ActsTests {
0019
0020 BOOST_AUTO_TEST_SUITE(UtilitiesSuite)
0021
0022 BOOST_AUTO_TEST_CASE(Grid1DAccess) {
0023 GridAxisGenerators::EqBound eqBound{{0., 10.}, 10};
0024 using GridType = GridAxisGenerators::EqBound::grid_type<std::size_t>;
0025 using PointType = GridType::point_t;
0026 auto grid = GridType(eqBound());
0027
0028 for (std::size_t i = 0; i < 10; ++i) {
0029 grid.atPosition(PointType{i + 0.5}) = i;
0030 }
0031
0032
0033 std::vector<std::size_t> fAccessor = {0u};
0034 std::vector<std::size_t> sAccessor = {1u};
0035
0036 Vector2 lPosition{3.5, 6.5};
0037 auto flAccess =
0038 GridAccessHelpers::accessLocal<GridType>(lPosition, fAccessor);
0039 auto slAccess =
0040 GridAccessHelpers::accessLocal<GridType>(lPosition, sAccessor);
0041
0042
0043 BOOST_CHECK_EQUAL(grid.atPosition(flAccess), 3u);
0044 BOOST_CHECK_EQUAL(grid.atPosition(slAccess), 6u);
0045
0046
0047 Vector3 gPosition{0.5, 3.5, 6.5};
0048 std::vector<AxisDirection> fCast = {AxisDirection::AxisX};
0049 std::vector<AxisDirection> sCast = {AxisDirection::AxisY};
0050 std::vector<AxisDirection> tCast = {AxisDirection::AxisZ};
0051
0052 auto fgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, fCast);
0053 auto sgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, sCast);
0054 auto tgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, tCast);
0055 BOOST_CHECK_EQUAL(grid.atPosition(fgAccess), 0u);
0056 BOOST_CHECK_EQUAL(grid.atPosition(sgAccess), 3u);
0057 BOOST_CHECK_EQUAL(grid.atPosition(tgAccess), 6u);
0058 }
0059
0060 BOOST_AUTO_TEST_CASE(Grid2DAccess) {
0061 GridAxisGenerators::EqBoundEqBound eqeqBound{{0., 10.}, 10, {0., 10.}, 10};
0062 using GridType = GridAxisGenerators::EqBoundEqBound::grid_type<std::size_t>;
0063 using PointType = GridType::point_t;
0064 auto grid = GridType(eqeqBound());
0065 for (std::size_t j = 0; j < 10u; ++j) {
0066 for (std::size_t i = 0; i < 10u; ++i) {
0067 grid.atPosition(PointType{i + 0.5, j + 0.5}) = j * 100 + i;
0068 }
0069 }
0070
0071
0072 std::vector<std::size_t> fAccessor = {0u, 1u};
0073 Vector2 lPosition{3.5, 6.5};
0074 auto flAccess =
0075 GridAccessHelpers::accessLocal<GridType>(lPosition, fAccessor);
0076 BOOST_CHECK_EQUAL(grid.atPosition(flAccess), 603u);
0077
0078
0079 Vector3 gPosition{0.5, 3.5, 6.5};
0080 std::vector<AxisDirection> fCast = {AxisDirection::AxisX,
0081 AxisDirection::AxisY};
0082 auto fgAccess = GridAccessHelpers::castPosition<GridType>(gPosition, fCast);
0083 BOOST_CHECK_EQUAL(grid.atPosition(fgAccess), 300u);
0084 }
0085
0086 BOOST_AUTO_TEST_SUITE_END()
0087
0088 }