File indexing completed on 2025-11-04 09:23:51
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/Definitions/Common.hpp"
0013 #include "Acts/Definitions/Direction.hpp"
0014 #include "Acts/Material/HomogeneousSurfaceMaterial.hpp"
0015 #include "Acts/Material/Material.hpp"
0016 #include "Acts/Material/MaterialSlab.hpp"
0017 #include "ActsTests/CommonHelpers/FloatComparisons.hpp"
0018
0019 #include <utility>
0020
0021 using namespace Acts;
0022
0023 namespace ActsTests {
0024
0025 BOOST_AUTO_TEST_SUITE(MaterialSuite)
0026
0027
0028 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_construction_test) {
0029
0030 Material mat = Material::fromMolarDensity(1., 2., 3., 4., 5.);
0031 MaterialSlab mp(mat, 0.1);
0032
0033
0034 HomogeneousSurfaceMaterial hsm(mp, 1.);
0035
0036 HomogeneousSurfaceMaterial hsmCopy(hsm);
0037
0038 BOOST_CHECK_EQUAL(hsm, hsmCopy);
0039
0040 HomogeneousSurfaceMaterial hsmCopyMoved(std::move(hsmCopy));
0041
0042 BOOST_CHECK_EQUAL(hsm, hsmCopyMoved);
0043
0044 HomogeneousSurfaceMaterial hsmAssigned = hsm;
0045
0046 BOOST_CHECK_EQUAL(hsm, hsmAssigned);
0047
0048 HomogeneousSurfaceMaterial hsmAssignedMoved(std::move(hsmAssigned));
0049
0050 BOOST_CHECK_EQUAL(hsm, hsmAssignedMoved);
0051 }
0052
0053
0054 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_scaling_test) {
0055 MaterialSlab mat(Material::fromMolarDensity(1., 2., 3., 4., 5.), 0.1);
0056 MaterialSlab matHalf = mat;
0057 matHalf.scaleThickness(0.5);
0058
0059 HomogeneousSurfaceMaterial hsm(mat, 1.);
0060 hsm.scale(0.5);
0061
0062 auto matBin = hsm.materialSlab(Vector3(0., 0., 0.));
0063
0064 BOOST_CHECK_EQUAL(matBin, matHalf);
0065 BOOST_CHECK_NE(matBin, mat);
0066 }
0067
0068
0069 BOOST_AUTO_TEST_CASE(HomogeneousSurfaceMaterial_access_test) {
0070
0071 MaterialSlab mat(Material::fromMolarDensity(1., 2., 3., 4., 5.), 0.1);
0072 MaterialSlab matHalf = mat;
0073 matHalf.scaleThickness(0.5);
0074
0075 MaterialSlab vacuum = MaterialSlab::Nothing();
0076
0077
0078 HomogeneousSurfaceMaterial hsmfwd(mat, 1.);
0079 HomogeneousSurfaceMaterial hsmhalf(mat, 0.5);
0080 HomogeneousSurfaceMaterial hsmbwd(mat, 0.);
0081
0082 auto mat2d = hsmfwd.materialSlab(Vector2{0., 0.});
0083 auto mat3d = hsmfwd.materialSlab(Vector3{0., 0., 0.});
0084
0085
0086 BOOST_CHECK_EQUAL(mat, mat2d);
0087 BOOST_CHECK_EQUAL(mat, mat3d);
0088
0089 Direction fDir = Direction::Forward();
0090 Direction bDir = Direction::Backward();
0091
0092 MaterialUpdateStage pre = MaterialUpdateStage::PreUpdate;
0093 MaterialUpdateStage full = MaterialUpdateStage::FullUpdate;
0094 MaterialUpdateStage post = MaterialUpdateStage::PostUpdate;
0095
0096
0097 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, full), 1.);
0098 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, pre), 0.);
0099 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, post), 1.);
0100
0101 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, full), 1.);
0102 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, pre), 1.);
0103 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, post), 0.);
0104
0105 auto matFwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0106 auto matBwdFull = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0107
0108 auto matFwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0109 auto matBwdPost = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0110
0111 auto matFwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0112 auto matBwdPre = hsmfwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0113
0114 BOOST_CHECK_EQUAL(mat, matFwdFull);
0115 BOOST_CHECK_EQUAL(mat, matBwdFull);
0116
0117 BOOST_CHECK_EQUAL(mat, matFwdPost);
0118 BOOST_CHECK_EQUAL(vacuum, matBwdPost);
0119
0120 BOOST_CHECK_EQUAL(vacuum, matFwdPre);
0121 BOOST_CHECK_EQUAL(mat, matBwdPre);
0122
0123
0124 BOOST_CHECK_EQUAL(hsmhalf.factor(fDir, full), 1.);
0125 CHECK_CLOSE_REL(hsmhalf.factor(fDir, pre), 0.5, 1e-6);
0126 CHECK_CLOSE_REL(hsmhalf.factor(fDir, post), 0.5, 1e-6);
0127
0128 BOOST_CHECK_EQUAL(hsmhalf.factor(bDir, full), 1.);
0129 CHECK_CLOSE_REL(hsmhalf.factor(bDir, pre), 0.5, 1e-6);
0130 CHECK_CLOSE_REL(hsmhalf.factor(bDir, post), 0.5, 1e-6);
0131
0132 matFwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0133 matBwdFull = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0134
0135 matFwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0136 matBwdPost = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0137
0138 matFwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0139 matBwdPre = hsmhalf.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0140
0141 BOOST_CHECK_EQUAL(mat, matFwdFull);
0142 BOOST_CHECK_EQUAL(mat, matBwdFull);
0143
0144 BOOST_CHECK_EQUAL(matHalf, matFwdPost);
0145 BOOST_CHECK_EQUAL(matHalf, matBwdPost);
0146
0147 BOOST_CHECK_EQUAL(matHalf, matFwdPre);
0148 BOOST_CHECK_EQUAL(matHalf, matBwdPre);
0149
0150
0151 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, full), 1.);
0152 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, pre), 1.);
0153 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, post), 0.);
0154
0155 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, full), 1.);
0156 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, pre), 0.);
0157 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, post), 1.);
0158
0159 matFwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, full);
0160 matBwdFull = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, full);
0161
0162 matFwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, post);
0163 matBwdPost = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, post);
0164
0165 matFwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, fDir, pre);
0166 matBwdPre = hsmbwd.materialSlab(Vector3{0., 0., 0.}, bDir, pre);
0167
0168 BOOST_CHECK_EQUAL(mat, matFwdFull);
0169 BOOST_CHECK_EQUAL(mat, matBwdFull);
0170
0171 BOOST_CHECK_EQUAL(vacuum, matFwdPost);
0172 BOOST_CHECK_EQUAL(mat, matBwdPost);
0173
0174 BOOST_CHECK_EQUAL(mat, matFwdPre);
0175 BOOST_CHECK_EQUAL(vacuum, matBwdPre);
0176 }
0177
0178 BOOST_AUTO_TEST_SUITE_END()
0179
0180 }