diff --git a/Tests/UnitTests/Core/Other/MaterialTest.h b/Tests/UnitTests/Core/Other/MaterialTest.h index 1152b19c34c916f869addeebaf7c2d840917a133..133ff5d98f825821e6a3825552ede8afec0dd2f8 100644 --- a/Tests/UnitTests/Core/Other/MaterialTest.h +++ b/Tests/UnitTests/Core/Other/MaterialTest.h @@ -1,6 +1,7 @@ #include "MaterialFactoryFuncs.h" #include "MaterialBySLDImpl.h" #include "RefractiveMaterialImpl.h" +#include "SlicedParticle.h" #include "WavevectorInfo.h" #include "Rotations.h" #include "Units.h" @@ -152,6 +153,40 @@ TEST_F(MaterialTest, ComputationTest) EXPECT_FLOAT_EQ(subtrSLD.imag(), subtrSLDWlIndep.imag()); } +TEST_F(MaterialTest, AveragedMaterialTest) +{ + kvector_t magnetization = kvector_t {1.0, 0.0, 0.0}; + const Material material = HomogeneousMaterial("Material", 0.5, 0.5, magnetization); + const std::vector<HomogeneousRegion> regions = {HomogeneousRegion{0.25, material}, + HomogeneousRegion{0.25, material}}; + + const Material material_avr = createAveragedMaterial(material, regions); + EXPECT_EQ(material_avr.getName(), material.getName() + "_avg"); + EXPECT_EQ(material_avr.magnetization(), magnetization); + EXPECT_EQ(material_avr.materialData(), complex_t(0.5, 0.5)); + EXPECT_TRUE(material_avr.typeID() == MATERIAL_TYPES::RefractiveCoefMaterial); + + const Material material2 = MaterialBySLD(); + const Material material_avr2 = createAveragedMaterial(material2, regions); + const complex_t expected_res = std::conj(1.0 - std::sqrt(complex_t(0.5, 0.25))); + EXPECT_DOUBLE_EQ(material_avr2.materialData().real(), expected_res.real()); + EXPECT_DOUBLE_EQ(material_avr2.materialData().imag(), expected_res.imag()); + EXPECT_EQ(material_avr2.magnetization(), kvector_t(0.5, 0.0, 0.0)); + EXPECT_TRUE(material_avr2.typeID() == MATERIAL_TYPES::RefractiveCoefMaterial); + + const Material material3 = MaterialBySLD("Material3", 0.5, 0.5, magnetization); + EXPECT_THROW(createAveragedMaterial(material3, regions), std::runtime_error); + + const Material material4 = HomogeneousMaterial(); + const std::vector<HomogeneousRegion> regions2 + = {HomogeneousRegion{0.25, material3}, HomogeneousRegion{0.25, material3}}; + const Material material_avr3 = createAveragedMaterial(material4, regions2); + EXPECT_DOUBLE_EQ(material_avr3.materialData().real(), 0.25); + EXPECT_DOUBLE_EQ(material_avr3.materialData().imag(), 0.25); + EXPECT_EQ(material_avr3.magnetization(), kvector_t(0.5, 0.0, 0.0)); + EXPECT_TRUE(material_avr3.typeID() == MATERIAL_TYPES::WavelengthIndependentMaterial); +} + TEST_F(MaterialTest, TypeIdsTest) { Material material = MaterialBySLD("Material", 1.0, 1.0);