Warning, file /acts/Tests/UnitTests/Core/Material/HomogeneousSurfaceMaterialTests.cpp was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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();
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
0084
0085 BOOST_CHECK_EQUAL(mat, mat2d);
0086
0087 Direction fDir = Direction::Forward();
0088 Direction bDir = Direction::Backward();
0089
0090 const MaterialUpdateMode none = MaterialUpdateMode::NoUpdate;
0091 const MaterialUpdateMode pre = MaterialUpdateMode::PreUpdate;
0092 const MaterialUpdateMode post = MaterialUpdateMode::PostUpdate;
0093 const MaterialUpdateMode full = MaterialUpdateMode::FullUpdate;
0094
0095
0096 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0097 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, pre), 0.);
0098 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, post), 1.);
0099 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, full), 1.);
0100
0101 BOOST_CHECK_EQUAL(hsmfwd.factor(fDir, none), 0.);
0102 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, pre), 1.);
0103 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, post), 0.);
0104 BOOST_CHECK_EQUAL(hsmfwd.factor(bDir, full), 1.);
0105
0106 auto matFwdPre = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, pre);
0107 auto matBwdPre = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, pre);
0108
0109 auto matFwdPost = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, post);
0110 auto matBwdPost = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, post);
0111
0112 auto matFwdFull = hsmfwd.materialSlab(Vector2{0., 0.}, fDir, full);
0113 auto matBwdFull = hsmfwd.materialSlab(Vector2{0., 0.}, bDir, full);
0114
0115 BOOST_CHECK_EQUAL(mat, matFwdFull);
0116 BOOST_CHECK_EQUAL(mat, matBwdFull);
0117
0118 BOOST_CHECK_EQUAL(mat, matFwdPost);
0119 BOOST_CHECK_EQUAL(vacuum, matBwdPost);
0120
0121 BOOST_CHECK_EQUAL(vacuum, matFwdPre);
0122 BOOST_CHECK_EQUAL(mat, matBwdPre);
0123
0124
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 BOOST_CHECK_EQUAL(hsmhalf.factor(fDir, full), 1.);
0128
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 BOOST_CHECK_EQUAL(hsmhalf.factor(bDir, full), 1.);
0132
0133 matFwdPre = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, pre);
0134 matBwdPre = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, pre);
0135
0136 matFwdPost = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, post);
0137 matBwdPost = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, post);
0138
0139 matFwdFull = hsmhalf.materialSlab(Vector2{0., 0.}, fDir, full);
0140 matBwdFull = hsmhalf.materialSlab(Vector2{0., 0.}, bDir, full);
0141
0142 BOOST_CHECK_EQUAL(matHalf, matFwdPre);
0143 BOOST_CHECK_EQUAL(matHalf, matBwdPre);
0144
0145 BOOST_CHECK_EQUAL(matHalf, matFwdPost);
0146 BOOST_CHECK_EQUAL(matHalf, matBwdPost);
0147
0148 BOOST_CHECK_EQUAL(mat, matFwdFull);
0149 BOOST_CHECK_EQUAL(mat, matBwdFull);
0150
0151
0152 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, pre), 1.);
0153 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, post), 0.);
0154 BOOST_CHECK_EQUAL(hsmbwd.factor(fDir, full), 1.);
0155
0156 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, pre), 0.);
0157 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, post), 1.);
0158 BOOST_CHECK_EQUAL(hsmbwd.factor(bDir, full), 1.);
0159
0160 matFwdPre = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, pre);
0161 matBwdPre = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, pre);
0162
0163 matFwdPost = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, post);
0164 matBwdPost = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, post);
0165
0166 matFwdFull = hsmbwd.materialSlab(Vector2{0., 0.}, fDir, full);
0167 matBwdFull = hsmbwd.materialSlab(Vector2{0., 0.}, bDir, full);
0168
0169 BOOST_CHECK_EQUAL(mat, matFwdPre);
0170 BOOST_CHECK_EQUAL(vacuum, matBwdPre);
0171
0172 BOOST_CHECK_EQUAL(vacuum, matFwdPost);
0173 BOOST_CHECK_EQUAL(mat, matBwdPost);
0174
0175 BOOST_CHECK_EQUAL(mat, matFwdFull);
0176 BOOST_CHECK_EQUAL(mat, matBwdFull);
0177 }
0178
0179 BOOST_AUTO_TEST_SUITE_END()
0180
0181 }