diff --git a/CMakeLists.txt b/CMakeLists.txt index f328552d5f0c936002c8d0203b18481741435349..668be0606ffee0eb3ad000017eddd6ff2c519835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ include(BornAgainMacros) include(SearchInstalledSoftware) include(CheckCompiler) include(BornAgainConfiguration) +include(UnitTests) #--- Recurse into the given subdirectories --- if(BORNAGAIN_USERMANUAL) diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index 73ef2c0d34f72c2e083795292c8e212314875557..618f620039cf752de0964019dc2d60f6e48d69a1 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -18,7 +18,7 @@ set(include_dirs ${CMAKE_CURRENT_SOURCE_DIR}/InputOutput ) - set(bornagain_swig_dir ${CMAKE_CURRENT_SOURCE_DIR}/../dev-tools/swig) +set(bornagain_swig_dir ${CMAKE_CURRENT_SOURCE_DIR}/../dev-tools/swig) include_directories(${include_dirs}) @@ -60,7 +60,7 @@ if(BORNAGAIN_PYTHON) set(SWIG_FLAGS "") list(APPEND SWIG_FLAGS "-c++") list(APPEND SWIG_FLAGS "-python") - + foreach(dir ${include_dirs}) list(APPEND SWIG_FLAGS "-I${dir}") endforeach(dir) @@ -74,11 +74,11 @@ if(BORNAGAIN_PYTHON) ${bornagain_swig_dir}/shared_pointers.i ${bornagain_swig_dir}/warnings.i ) - + add_custom_command ( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore.py ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore_wrap.h ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore_wrap.cxx COMMAND ${SWIG_EXECUTABLE} ${SWIG_FLAGS} ${bornagain_swig_dir}/libBornAgainCore.i - COMMAND ${PYTHON_EXECUTABLE} ${bornagain_swig_dir}/tweaks.py ${bornagain_swig_dir}/libBornAgainCore.py ${bornagain_swig_dir}/libBornAgainCore.py + COMMAND ${PYTHON_EXECUTABLE} ${bornagain_swig_dir}/tweaks.py ${bornagain_swig_dir}/libBornAgainCore.py ${bornagain_swig_dir}/libBornAgainCore.py COMMAND ${CMAKE_COMMAND} -E copy ${bornagain_swig_dir}/libBornAgainCore.py ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore.py COMMAND ${CMAKE_COMMAND} -E copy ${bornagain_swig_dir}/libBornAgainCore_wrap.cxx ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore_wrap.cxx COMMAND ${CMAKE_COMMAND} -E copy ${bornagain_swig_dir}/libBornAgainCore_wrap.h ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore_wrap.h @@ -91,16 +91,16 @@ if(BORNAGAIN_PYTHON) # autogenerate doxygen.i from doxygen comments if(BORNAGAIN_GENERATE_PYTHON_DOCS) configure_file(${CMAKE_SOURCE_DIR}/Doc/Doxygen/DoxyfileSwig.in ${CMAKE_CURRENT_BINARY_DIR}/PythonAPI/Doxyfile @ONLY) - + add_custom_command( OUTPUT ${bornagain_swig_dir}/doxygen_core.i COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/PythonAPI/Doxyfile COMMAND ${PYTHON_EXECUTABLE} ${bornagain_swig_dir}/doxy2swig.py ${CMAKE_CURRENT_BINARY_DIR}/Doc/xml/index.xml ${bornagain_swig_dir}/doxygen_core.i DEPENDS ${include_files} ) - + endif(BORNAGAIN_GENERATE_PYTHON_DOCS) - + endif(BORNAGAIN_GENERATE_BINDINGS) add_custom_target ( @@ -112,14 +112,14 @@ if(BORNAGAIN_PYTHON) # manually add: if does not exist, will be created by swig list(APPEND source_files "PythonAPI/libBornAgainCore_wrap.cxx") #list(APPEND include_files "PythonAPI/libBornAgainCore_wrap.h") - + # add_custom_target( # ${library_name}_python # COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/PythonAPI/libBornAgainCore.py ${CMAKE_BINARY_DIR}/lib/libBornAgainCore.py # ) configure_file(../dev-tools/python-setup/bornagain/plot_utils.py ${CMAKE_BINARY_DIR}/lib/plot_utils/__init__.py COPYONLY) - + endif() @@ -211,7 +211,7 @@ if(WIN32) ${CMAKE_BINARY_DIR}/bin/${libprefix}${library_name}${libsuffix} ${CMAKE_BINARY_DIR}/lib/${libprefix}${library_name}${libsuffix} ) - + endif() # system libraries @@ -278,4 +278,3 @@ else() install (DIRECTORY ${CMAKE_SOURCE_DIR}/dev-tools/python-setup/bornagain DESTINATION ${destination_libexec} COMPONENT Libraries) install (FILES "${destination_runtime_configs}/__init__.py" DESTINATION ${destination_libexec}/bornagain COMPONENT Libraries) endif() - diff --git a/Doc/Doxygen/Doxyfile.long b/Doc/Doxygen/Doxyfile.long index a27e26ed844b11ee531466fbb4aa057bf81131f2..105aa2225482a359d327897ea75ccf3de7282305 100644 --- a/Doc/Doxygen/Doxyfile.long +++ b/Doc/Doxygen/Doxyfile.long @@ -123,7 +123,7 @@ ALWAYS_DETAILED_SEC = NO # operators of the base classes will not be shown. # The default value is: NO. -INLINE_INHERITED_MEMB = NO +INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the diff --git a/Tests/UnitTests/Core/CVectorTest.h b/Tests/UnitTests/Core/0/CVectorTest.h similarity index 90% rename from Tests/UnitTests/Core/CVectorTest.h rename to Tests/UnitTests/Core/0/CVectorTest.h index f73bf67befde94857d87edb0ad2de6b3c27df91d..c430ea76f2ed035902e6b8e33ee4c49b728cd5cf 100644 --- a/Tests/UnitTests/Core/CVectorTest.h +++ b/Tests/UnitTests/Core/0/CVectorTest.h @@ -1,29 +1,16 @@ #ifndef CVECTORTEST_H #define CVECTORTEST_H - -#include "Types.h" -#include <cmath> - +#include "Vectors3D.h" #include "EigenCore.h" - class CVectorTest : public ::testing::Test { protected: - CVectorTest(); - virtual ~CVectorTest(); + CVectorTest() {} + virtual ~CVectorTest() {} }; - -CVectorTest::CVectorTest() -{ -} - -CVectorTest::~CVectorTest() -{ -} - TEST_F(CVectorTest, TrivialOperations) { kvector_t vec_k(1.,2.,3.); @@ -58,5 +45,4 @@ TEST_F(CVectorTest, BasicArithmetics) cvector_t(complex_t(1.,5.), complex_t(2.,6), complex_t(3,7)) ); } - #endif // CVECTORTEST_H diff --git a/Tests/UnitTests/Core/ConstKBinAxisTest.h b/Tests/UnitTests/Core/0/ConstKBinAxisTest.h similarity index 99% rename from Tests/UnitTests/Core/ConstKBinAxisTest.h rename to Tests/UnitTests/Core/0/ConstKBinAxisTest.h index 32b288fb1bed1d2e734f5e43484aa0eae5f4fa92..85d9cf2ab77d73fbb66106673d74d1b838cd235f 100644 --- a/Tests/UnitTests/Core/ConstKBinAxisTest.h +++ b/Tests/UnitTests/Core/0/ConstKBinAxisTest.h @@ -4,7 +4,6 @@ #include "ConstKBinAxis.h" #include "OutputDataIOHelper.h" #include "Units.h" -#include "gtest/gtest.h" #include <vector> class ConstKBinAxisTest: public ::testing::Test diff --git a/Tests/UnitTests/Core/CustomBinAxisTest.h b/Tests/UnitTests/Core/0/CustomBinAxisTest.h similarity index 96% rename from Tests/UnitTests/Core/CustomBinAxisTest.h rename to Tests/UnitTests/Core/0/CustomBinAxisTest.h index 3be891535b33abb27cbf66eb357281821dc78c24..d71b808b0511b996a4ed9c928f8831114c98669a 100644 --- a/Tests/UnitTests/Core/CustomBinAxisTest.h +++ b/Tests/UnitTests/Core/0/CustomBinAxisTest.h @@ -4,7 +4,6 @@ #include "CustomBinAxis.h" #include "OutputDataIOHelper.h" #include "Units.h" -#include "gtest/gtest.h" #include <vector> class CusomBinAxisTest: public ::testing::Test diff --git a/Tests/UnitTests/Core/FixedBinAxisTest.h b/Tests/UnitTests/Core/0/FixedBinAxisTest.h similarity index 99% rename from Tests/UnitTests/Core/FixedBinAxisTest.h rename to Tests/UnitTests/Core/0/FixedBinAxisTest.h index 1a017bdf63ba66bd6ab68b84e46e173e5eb46aa3..10dad02525d3bc3bfa3381f208978d0956cba13f 100644 --- a/Tests/UnitTests/Core/FixedBinAxisTest.h +++ b/Tests/UnitTests/Core/0/FixedBinAxisTest.h @@ -3,7 +3,6 @@ #include "FixedBinAxis.h" #include "OutputDataIOHelper.h" -#include "gtest/gtest.h" #include <iostream> class FixedBinAxisTest: public ::testing::Test diff --git a/Tests/UnitTests/Core/Histogram1DTest.h b/Tests/UnitTests/Core/0/Histogram1DTest.h similarity index 99% rename from Tests/UnitTests/Core/Histogram1DTest.h rename to Tests/UnitTests/Core/0/Histogram1DTest.h index 5f45a531799168b88b0c22c38229628303d4c4d1..ad8f1062051a63166d7d3950f46718d6c14d2c0e 100644 --- a/Tests/UnitTests/Core/Histogram1DTest.h +++ b/Tests/UnitTests/Core/0/Histogram1DTest.h @@ -4,7 +4,6 @@ #include "Histogram1D.h" #include "Exceptions.h" #include <memory> -#include "gtest/gtest.h" class Histogram1DTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/Histogram2DTest.h b/Tests/UnitTests/Core/0/Histogram2DTest.h similarity index 99% rename from Tests/UnitTests/Core/Histogram2DTest.h rename to Tests/UnitTests/Core/0/Histogram2DTest.h index bf489cdea6084c56a744e286cd30dfb327f52e2d..8a5b64c6632d041027622865174cce90737dd2e0 100644 --- a/Tests/UnitTests/Core/Histogram2DTest.h +++ b/Tests/UnitTests/Core/0/Histogram2DTest.h @@ -3,7 +3,6 @@ #include "Histogram2D.h" #include <memory> -#include "gtest/gtest.h" class Histogram2DTest : public ::testing::Test { @@ -98,7 +97,6 @@ TEST_F(Histogram2DTest, VariableHist) EXPECT_EQ(hist->findGlobalBin(-0.75, 0.5), size_t(0)); EXPECT_EQ(hist->findGlobalBin(0.0, 1.5), size_t(4)); EXPECT_EQ(hist->findGlobalBin(1.5, 3.0), size_t(11)); - } // y @@ -142,7 +140,6 @@ TEST_F(Histogram2DTest, VariableHistFill) EXPECT_EQ(1.0, hist->getBinNumberOfEntries(binx, biny)); } } - } // y @@ -223,8 +220,6 @@ TEST_F(Histogram2DTest, projectionX) EXPECT_EQ(3.0, h1->getBinContent(binx)); EXPECT_DOUBLE_EQ(std::sqrt(0.25), h1->getBinError(binx)); } - - } // y @@ -272,8 +267,8 @@ TEST_F(Histogram2DTest, projectionY) EXPECT_EQ(4, h1->getBinNumberOfEntries(binx)); EXPECT_DOUBLE_EQ(0.0, h1->getBinError(binx)); } - EXPECT_EQ(4.0, h1->getBinContent(0)); - EXPECT_EQ(8.0, h1->getBinContent(1)); + EXPECT_EQ( 4.0, h1->getBinContent(0)); + EXPECT_EQ( 8.0, h1->getBinContent(1)); EXPECT_EQ(12.0, h1->getBinContent(2)); // b) create projection along Y axis at given x(slice) @@ -423,7 +418,6 @@ TEST_F(Histogram2DTest, CreateOutputData) for(size_t i=0; i<data->getAllocatedSize(); ++i) { EXPECT_EQ(1.0, (*data)[i]); } - } @@ -441,9 +435,6 @@ TEST_F(Histogram2DTest, GetMaximumGetMinimum) EXPECT_EQ(size_t(0), hist.getMinimumBinIndex()); EXPECT_EQ(59.0, hist.getMaximum()); EXPECT_EQ(size_t(49), hist.getMaximumBinIndex()); - } - - #endif diff --git a/Tests/UnitTests/Core/KVectorTest.h b/Tests/UnitTests/Core/0/KVectorTest.h similarity index 99% rename from Tests/UnitTests/Core/KVectorTest.h rename to Tests/UnitTests/Core/0/KVectorTest.h index 12260100d2741261ede0563fd599970db091d436..f99ec25cee92671186a919264a45aeeb70627f95 100644 --- a/Tests/UnitTests/Core/KVectorTest.h +++ b/Tests/UnitTests/Core/0/KVectorTest.h @@ -1,8 +1,8 @@ #ifndef KVECTORTEST_H #define KVECTORTEST_H -#include "Units.h" -#include "Types.h" +#include "Vectors3D.h" +#include "Transform3D.h" class KVectorTest : public ::testing::Test { @@ -129,4 +129,3 @@ TEST_F(KVectorTest, BasicTransformation) } #endif // KVECTORTEST_H - diff --git a/Tests/UnitTests/Core/UtilsTest.h b/Tests/UnitTests/Core/0/UtilsTest.h similarity index 99% rename from Tests/UnitTests/Core/UtilsTest.h rename to Tests/UnitTests/Core/0/UtilsTest.h index 7a4106b28c11b69ef860b624eeaf824f09b94088..a64b25d683a6065fddacb679e03661c6470659c1 100644 --- a/Tests/UnitTests/Core/UtilsTest.h +++ b/Tests/UnitTests/Core/0/UtilsTest.h @@ -3,7 +3,6 @@ #include "Utils.h" #include "INamed.h" -#include "gtest/gtest.h" #include <map> #include <iostream> #include <memory> diff --git a/Tests/UnitTests/Core/VariableBinAxisTest.h b/Tests/UnitTests/Core/0/VariableBinAxisTest.h similarity index 99% rename from Tests/UnitTests/Core/VariableBinAxisTest.h rename to Tests/UnitTests/Core/0/VariableBinAxisTest.h index 1a1e4b94ea10e7a7d83925fe947d091e217cb5f7..ea58848efdecf26640b5a44906922e5ab67a8525 100644 --- a/Tests/UnitTests/Core/VariableBinAxisTest.h +++ b/Tests/UnitTests/Core/0/VariableBinAxisTest.h @@ -3,7 +3,6 @@ #include "VariableBinAxis.h" #include "OutputDataIOHelper.h" -#include "gtest/gtest.h" class VariableBinAxisTest: public ::testing::Test { diff --git a/Tests/UnitTests/Core/FormFactorTest.h b/Tests/UnitTests/Core/1/FormFactorTest.h similarity index 59% rename from Tests/UnitTests/Core/FormFactorTest.h rename to Tests/UnitTests/Core/1/FormFactorTest.h index 26ec89def32e2c0ba50686fa55927a1435daffe9..75b54559a6688aaa22894e5633f5c47581b9c5a7 100644 --- a/Tests/UnitTests/Core/FormFactorTest.h +++ b/Tests/UnitTests/Core/1/FormFactorTest.h @@ -7,7 +7,7 @@ //! //! @homepage http://bornagainproject.org //! @license GNU General Public License v3 or higher (see COPYING) -//! @copyright Forschungszentrum Jülich GmbH 2015 +//! @copyright Forschungszentrum Jülich GmbH 2015-16 //! @authors Scientific Computing Group at MLZ Garching //! @authors C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke // @@ -18,13 +18,21 @@ #include "Units.h" #include "BornAgainNamespace.h" -#include "FormFactors.h" -#include "gtest/gtest.h" +#include "IFormFactorBorn.h" +#include "ParticleShapes.h" class FormFactorTest : public ::testing::Test { protected: - FormFactorTest(){} + FormFactorTest() {} + void clone_test( const IFormFactorBorn* ff ) + { + IFormFactorBorn* clone = ff->clone(); + EXPECT_EQ(clone->getName(), ff->getName()); + EXPECT_EQ(clone->getVolume(), ff->getVolume()); + cvector_t q(.1, .2, complex_t(.3, .004)); + EXPECT_EQ(clone->evaluate_for_q(q), ff->evaluate_for_q(q)); + } }; TEST_F(FormFactorTest, AnisoPyramid) @@ -34,9 +42,8 @@ TEST_F(FormFactorTest, AnisoPyramid) double width = 14.; double alpha = 0.8; double tga = std::tan(alpha); - double volume = height*(length*width - - (length + width)*height/tga - + 4.0/3.0*height*height/(tga*tga)); + double volume = height* + (length*width - (length + width)*height/tga + 4.0/3.0*height*height/(tga*tga)); FormFactorAnisoPyramid anisopyramid(length, width, height, alpha); @@ -47,13 +54,7 @@ TEST_F(FormFactorTest, AnisoPyramid) EXPECT_EQ(5., anisopyramid.getHeight()); EXPECT_EQ(0.8, anisopyramid.getAlpha()); - FormFactorAnisoPyramid *anisopyramidclone = anisopyramid.clone(); - EXPECT_EQ(BornAgain::FFAnisoPyramidType, anisopyramidclone->getName()); - EXPECT_DOUBLE_EQ(volume, anisopyramidclone->getVolume()); - EXPECT_EQ(12., anisopyramidclone->getLength()); - EXPECT_EQ(14., anisopyramidclone->getWidth()); - EXPECT_EQ(5., anisopyramidclone->getHeight()); - EXPECT_EQ(0.8, anisopyramidclone->getAlpha()); + clone_test( &anisopyramid ); } TEST_F(FormFactorTest, HemiEllipsoid) @@ -72,12 +73,7 @@ TEST_F(FormFactorTest, HemiEllipsoid) EXPECT_EQ(5., hemiellipsoid.getHeight()); EXPECT_DOUBLE_EQ(volume, hemiellipsoid.getVolume()); - FormFactorHemiEllipsoid *hemiellipsoidclone = hemiellipsoid.clone(); - EXPECT_EQ(BornAgain::FFHemiEllipsoidType, hemiellipsoidclone->getName()); - EXPECT_EQ(6., hemiellipsoidclone->getRadiusX()); - EXPECT_EQ(7., hemiellipsoidclone->getRadiusY()); - EXPECT_EQ(5., hemiellipsoidclone->getHeight()); - EXPECT_DOUBLE_EQ(volume, hemiellipsoidclone->getVolume()); + clone_test( &hemiellipsoid ); } TEST_F(FormFactorTest, Box) @@ -95,12 +91,7 @@ TEST_F(FormFactorTest, Box) EXPECT_EQ(3., box.getRadius()); EXPECT_DOUBLE_EQ(volume, box.getVolume()); - FormFactorBox *boxclone = box.clone(); - EXPECT_EQ(BornAgain::FFBoxType, boxclone->getName()); - EXPECT_EQ(7., boxclone->getWidth()); - EXPECT_EQ(5., boxclone->getHeight()); - EXPECT_EQ(3., boxclone->getRadius()); - EXPECT_DOUBLE_EQ(volume, boxclone->getVolume()); + clone_test( &box ); } TEST_F(FormFactorTest, Cone) @@ -121,12 +112,7 @@ TEST_F(FormFactorTest, Cone) EXPECT_EQ(0.8, cone.getAlpha()); EXPECT_DOUBLE_EQ(volume, cone.getVolume()); - FormFactorCone *coneclone = cone.clone(); - EXPECT_EQ(BornAgain::FFConeType, coneclone->getName()); - EXPECT_EQ(6., coneclone->getRadius()); - EXPECT_EQ(5., coneclone->getHeight()); - EXPECT_EQ(0.8, coneclone->getAlpha()); - EXPECT_DOUBLE_EQ(volume, coneclone->getVolume()); + clone_test( &cone ); } TEST_F(FormFactorTest, Cone6) @@ -147,12 +133,7 @@ TEST_F(FormFactorTest, Cone6) EXPECT_EQ(0.8, cone6.getAlpha()); EXPECT_DOUBLE_EQ(volume, cone6.getVolume()); - FormFactorCone6 *cone6clone = cone6.clone(); - EXPECT_EQ(BornAgain::FFCone6Type, cone6clone->getName()); - EXPECT_EQ(6., cone6clone->getBaseEdge()); - EXPECT_EQ(5., cone6clone->getHeight()); - EXPECT_EQ(0.8, cone6clone->getAlpha()); - EXPECT_DOUBLE_EQ(volume, cone6clone->getVolume()); + clone_test( &cone6 ); } TEST_F(FormFactorTest, Cuboctahedron) @@ -166,11 +147,9 @@ TEST_F(FormFactorTest, Cuboctahedron) double H2divLtga = height*2./length/tga; double ratioH2divLtga = height_ratio*height*2./length/tga; double volume = 1./6.*tga*length*length*length*( 2. - - (1. - H2divLtga)*(1. - H2divLtga)*(1. - H2divLtga) - - (1. - ratioH2divLtga)*(1. - ratioH2divLtga)*(1. - ratioH2divLtga)); + - (1. - H2divLtga)*(1. - H2divLtga)*(1. - H2divLtga) - (1. - ratioH2divLtga)*(1. - ratioH2divLtga)*(1. - ratioH2divLtga)); - FormFactorCuboctahedron cuboctahedron(length, height, - height_ratio, alpha); + FormFactorCuboctahedron cuboctahedron(length, height, height_ratio, alpha); EXPECT_EQ(BornAgain::FFCuboctahedronType, cuboctahedron.getName()); EXPECT_EQ(4., cuboctahedron.getHeight()); @@ -179,13 +158,7 @@ TEST_F(FormFactorTest, Cuboctahedron) EXPECT_EQ(0.8, cuboctahedron.getAlpha()); EXPECT_DOUBLE_EQ(volume, cuboctahedron.getVolume()); - FormFactorCuboctahedron *cuboctahedronclone = cuboctahedron.clone(); - EXPECT_EQ(BornAgain::FFCuboctahedronType, cuboctahedronclone->getName()); - EXPECT_EQ(4., cuboctahedronclone->getHeight()); - EXPECT_EQ(10., cuboctahedronclone->getLength()); - EXPECT_EQ(1., cuboctahedronclone->getHeightRatio()); - EXPECT_EQ(0.8, cuboctahedronclone->getAlpha()); - EXPECT_DOUBLE_EQ(volume, cuboctahedron.getVolume()); + clone_test( &cuboctahedron ); } TEST_F(FormFactorTest, Cylinder) @@ -195,16 +168,13 @@ TEST_F(FormFactorTest, Cylinder) double volume = Units::PI*radius*radius*height; FormFactorCylinder cylinder(radius,height); + EXPECT_EQ(BornAgain::FFCylinderType, cylinder.getName()); EXPECT_EQ(5., cylinder.getHeight()); EXPECT_EQ(3., cylinder.getRadius()); EXPECT_DOUBLE_EQ(volume, cylinder.getVolume()); - FormFactorCylinder *cylinderclone = cylinder.clone(); - EXPECT_EQ(BornAgain::FFCylinderType, cylinderclone->getName()); - EXPECT_EQ(5., cylinderclone->getHeight()); - EXPECT_EQ(3., cylinderclone-> getRadius()); - EXPECT_DOUBLE_EQ(volume, cylinderclone-> getVolume()); + clone_test( &cylinder ); } TEST_F(FormFactorTest, Dodecahedron) @@ -217,10 +187,7 @@ TEST_F(FormFactorTest, Dodecahedron) EXPECT_EQ(edge, dodecahedron.getEdge()); EXPECT_DOUBLE_EQ(volume, dodecahedron.getVolume()); - FormFactorDodecahedron *dodecahedronclone = dodecahedron.clone(); - EXPECT_EQ(BornAgain::FFDodecahedronType, dodecahedronclone->getName()); - EXPECT_EQ(edge, dodecahedronclone->getEdge()); - EXPECT_DOUBLE_EQ(volume, dodecahedronclone-> getVolume()); + clone_test( &dodecahedron ); } TEST_F(FormFactorTest, EllipsoidalCylinder) @@ -238,12 +205,7 @@ TEST_F(FormFactorTest, EllipsoidalCylinder) EXPECT_EQ(5., ellipscyl.getRadiusY()); EXPECT_DOUBLE_EQ(volume, ellipscyl.getVolume()); - FormFactorEllipsoidalCylinder *ellipscylclone = ellipscyl.clone(); - EXPECT_EQ(BornAgain::FFEllipsoidalCylinderType, ellipscylclone->getName()); - EXPECT_EQ(4., ellipscylclone->getHeight()); - EXPECT_EQ(3., ellipscylclone->getRadiusX()); - EXPECT_EQ(5., ellipscylclone->getRadiusY()); - EXPECT_DOUBLE_EQ(volume, ellipscylclone->getVolume()); + clone_test( &ellipscyl ); } TEST_F(FormFactorTest, FullSphere) @@ -252,15 +214,11 @@ TEST_F(FormFactorTest, FullSphere) double volume = 4./3.*Units::PI*radius*radius*radius; FormFactorFullSphere fullsphere(radius); - EXPECT_EQ(BornAgain::FFFullSphereType, fullsphere.getName()); EXPECT_EQ(5., fullsphere.getRadius()); EXPECT_DOUBLE_EQ(volume, fullsphere.getVolume()); - FormFactorFullSphere *fullsphereclone = fullsphere.clone(); - EXPECT_EQ(BornAgain::FFFullSphereType, fullsphereclone->getName()); - EXPECT_EQ(5., fullsphereclone->getRadius()); - EXPECT_DOUBLE_EQ(volume, fullsphereclone->getVolume()); + clone_test( &fullsphere ); } TEST_F(FormFactorTest, FullSpheroid) @@ -276,11 +234,7 @@ TEST_F(FormFactorTest, FullSpheroid) EXPECT_EQ(5., fullspheroid.getHeight()); EXPECT_DOUBLE_EQ(volume, fullspheroid.getVolume()); - FormFactorFullSpheroid *fullspheroidclone = fullspheroid.clone(); - EXPECT_EQ(BornAgain::FFFullSpheroidType, fullspheroidclone->getName()); - EXPECT_EQ(3., fullspheroidclone->getRadius()); - EXPECT_EQ(5, fullspheroidclone->getHeight()); - EXPECT_DOUBLE_EQ(volume, fullspheroidclone->getVolume()); + clone_test( &fullspheroid ); } TEST_F(FormFactorTest, Icosahedron) @@ -289,14 +243,12 @@ TEST_F(FormFactorTest, Icosahedron) double volume = 5*(3+sqrt(5))/12*pow(edge,3); FormFactorIcosahedron icosahedron(edge); + EXPECT_EQ(BornAgain::FFIcosahedronType, icosahedron.getName()); EXPECT_EQ(edge, icosahedron.getEdge()); EXPECT_DOUBLE_EQ(volume, icosahedron.getVolume()); - FormFactorIcosahedron *icosahedronclone = icosahedron.clone(); - EXPECT_EQ(BornAgain::FFIcosahedronType, icosahedronclone->getName()); - EXPECT_EQ(edge, icosahedronclone->getEdge()); - EXPECT_DOUBLE_EQ(volume, icosahedronclone-> getVolume()); + clone_test( &icosahedron ); } TEST_F(FormFactorTest, Prism3) @@ -312,12 +264,7 @@ TEST_F(FormFactorTest, Prism3) EXPECT_EQ(6., prism3.getBaseEdge()); EXPECT_DOUBLE_EQ(volume, prism3.getVolume()); - FormFactorPrism3 *prism3clone = prism3.clone(); - - EXPECT_EQ(BornAgain::FFPrism3Type, prism3clone->getName()); - EXPECT_EQ(4., prism3clone->getHeight()); - EXPECT_EQ(6., prism3clone->getBaseEdge()); - EXPECT_DOUBLE_EQ(volume, prism3clone->getVolume()); + clone_test( &prism3 ); } TEST_F(FormFactorTest, Prism6) @@ -333,12 +280,7 @@ TEST_F(FormFactorTest, Prism6) EXPECT_EQ(3., prism6.getBaseEdge()); EXPECT_DOUBLE_EQ(volume, prism6.getVolume()); - FormFactorPrism6 *prism6clone = prism6.clone(); - - EXPECT_EQ(BornAgain::FFPrism6Type, prism6clone->getName()); - EXPECT_EQ(4., prism6clone->getHeight()); - EXPECT_EQ(3., prism6clone->getBaseEdge()); - EXPECT_DOUBLE_EQ(volume, prism6clone->getVolume()); + clone_test( &prism6 ); } TEST_F(FormFactorTest, Pyramid) @@ -348,8 +290,8 @@ TEST_F(FormFactorTest, Pyramid) double alpha = 0.8; double tga = std::tan(alpha); double H2divLtga = height*2./length/tga; - double volume = 1./6.*tga*length* length*length*( 1. - - (1. - H2divLtga)*(1. - H2divLtga)*(1. - H2divLtga)); + double volume = 1./6.*tga*length* length*length* + ( 1. - (1. - H2divLtga)*(1. - H2divLtga)*(1. - H2divLtga)); FormFactorPyramid pyramid(length, height, alpha); @@ -359,12 +301,7 @@ TEST_F(FormFactorTest, Pyramid) EXPECT_EQ(0.8, pyramid.getAlpha()); EXPECT_DOUBLE_EQ(volume, pyramid.getVolume()); - FormFactorPyramid *pyramidclone = pyramid.clone(); - EXPECT_EQ(BornAgain::FFPyramidType, pyramidclone->getName()); - EXPECT_EQ(4., pyramidclone->getHeight()); - EXPECT_EQ(10., pyramidclone->getBaseEdge()); - EXPECT_EQ(0.8, pyramidclone->getAlpha()); - EXPECT_DOUBLE_EQ(volume, pyramidclone->getVolume()); + clone_test( &pyramid ); } TEST_F(FormFactorTest, TruncatedSphere) @@ -372,8 +309,8 @@ TEST_F(FormFactorTest, TruncatedSphere) double radius = 5.; double height = 3.; double HdivR = height/radius; - double volume = Units::PI/3.*radius*radius*radius - *(3.*HdivR -1. - (HdivR - 1.)*(HdivR - 1.)*(HdivR - 1.)); + double volume = Units::PI/3.*radius*radius*radius* + (3.*HdivR -1. - (HdivR - 1.)*(HdivR - 1.)*(HdivR - 1.)); FormFactorTruncatedSphere trsphere(radius, height); @@ -381,9 +318,7 @@ TEST_F(FormFactorTest, TruncatedSphere) EXPECT_EQ(3., trsphere.getHeight()); EXPECT_DOUBLE_EQ(volume, trsphere.getVolume()); - FormFactorTruncatedSphere *trsphereclone = trsphere.clone(); - EXPECT_EQ(BornAgain::FFTruncatedSphereType, trsphereclone->getName()); - EXPECT_DOUBLE_EQ(3., trsphereclone->getHeight()); + clone_test( &trsphere ); } TEST_F(FormFactorTest, TruncatedSpheroid) @@ -391,8 +326,8 @@ TEST_F(FormFactorTest, TruncatedSpheroid) double height = 5.; double radius = 3.; double flattening = 1.5; - double volume = Units::PI*radius*height*height/flattening - *(1.-height/(3.*flattening*radius)); + double volume = Units::PI*radius*height*height/flattening* + (1.-height/(3.*flattening*radius)); FormFactorTruncatedSpheroid trspheroid(radius, height,flattening); @@ -401,11 +336,7 @@ TEST_F(FormFactorTest, TruncatedSpheroid) EXPECT_EQ(3., trspheroid.getRadius()); EXPECT_DOUBLE_EQ(volume, trspheroid.getVolume()); - FormFactorTruncatedSpheroid *trspheroidclone = trspheroid.clone(); - EXPECT_EQ(BornAgain::FFTruncatedSpheroidType, trspheroidclone->getName()); - EXPECT_EQ(5., trspheroidclone->getHeight()); - EXPECT_EQ(3., trspheroidclone->getRadius()); - EXPECT_DOUBLE_EQ(volume, trspheroidclone->getVolume()); + clone_test( &trspheroid ); } TEST_F(FormFactorTest, Tetrahedron) @@ -426,12 +357,7 @@ TEST_F(FormFactorTest, Tetrahedron) EXPECT_EQ(0.8, tetrahedron.getAlpha()); EXPECT_DOUBLE_EQ(volume, tetrahedron.getVolume()); - FormFactorTetrahedron *tetrahedronclone = tetrahedron.clone(); - EXPECT_EQ(BornAgain::FFTetrahedronType, tetrahedronclone->getName()); - EXPECT_EQ(4., tetrahedronclone->getHeight()); - EXPECT_EQ(16., tetrahedronclone->getBaseEdge()); - EXPECT_EQ(0.8, tetrahedronclone->getAlpha()); - EXPECT_DOUBLE_EQ(volume, tetrahedronclone->getVolume()); + clone_test( &tetrahedron ); } TEST_F(FormFactorTest, Ripple1) @@ -449,12 +375,7 @@ TEST_F(FormFactorTest, Ripple1) EXPECT_EQ(100., ripple1.getLength()); EXPECT_DOUBLE_EQ(volume, ripple1.getVolume()); - FormFactorRipple1 *ripple1clone = ripple1.clone(); - EXPECT_EQ(BornAgain::FFRipple1Type, ripple1clone->getName()); - EXPECT_DOUBLE_EQ(4., ripple1clone->getHeight()); - EXPECT_EQ(20., ripple1clone->getWidth()); - EXPECT_EQ(100., ripple1clone->getLength()); - EXPECT_DOUBLE_EQ(volume, ripple1clone->getVolume()); + clone_test( &ripple1 ); } TEST_F(FormFactorTest, Ripple2) @@ -471,9 +392,7 @@ TEST_F(FormFactorTest, Ripple2) EXPECT_EQ(4., ripple2.getHeight()); EXPECT_DOUBLE_EQ(volume, ripple2.getVolume()); - FormFactorRipple2 *ripple2clone = ripple2.clone(); - EXPECT_EQ(BornAgain::FFRipple2Type, ripple2clone->getName()); - EXPECT_DOUBLE_EQ(4., ripple2clone->getHeight()); + clone_test( &ripple2 ); } TEST_F(FormFactorTest, TruncatedCube) @@ -487,14 +406,9 @@ TEST_F(FormFactorTest, TruncatedCube) EXPECT_EQ(BornAgain::FFTruncatedCubeType,trcube.getName()); EXPECT_EQ(length, trcube.getLength()); EXPECT_DOUBLE_EQ(t, trcube.getRemovedLength()); - // length or length -2t EXPECT_DOUBLE_EQ(trcube.getVolume(), volume); - FormFactorTruncatedCube *trcubeclone = trcube.clone(); - EXPECT_EQ(BornAgain::FFTruncatedCubeType, trcubeclone->getName()); - EXPECT_EQ(length, trcubeclone->getLength()); - EXPECT_EQ(t, trcubeclone->getRemovedLength()); - EXPECT_EQ(trcubeclone->getVolume(), volume); + clone_test( &trcube ); } #endif // FORMFACTORTEST_H diff --git a/Tests/UnitTests/Core/LayerRoughnessTest.h b/Tests/UnitTests/Core/1/LayerRoughnessTest.h similarity index 100% rename from Tests/UnitTests/Core/LayerRoughnessTest.h rename to Tests/UnitTests/Core/1/LayerRoughnessTest.h diff --git a/Tests/UnitTests/Core/LayerTest.h b/Tests/UnitTests/Core/1/LayerTest.h similarity index 100% rename from Tests/UnitTests/Core/LayerTest.h rename to Tests/UnitTests/Core/1/LayerTest.h diff --git a/Tests/UnitTests/Core/1/MultiLayerTest.h b/Tests/UnitTests/Core/1/MultiLayerTest.h new file mode 100644 index 0000000000000000000000000000000000000000..059f0812aa3ac29977555873237e3da9cf1ceb8c --- /dev/null +++ b/Tests/UnitTests/Core/1/MultiLayerTest.h @@ -0,0 +1,576 @@ +#ifndef MLAYERTEST_H +#define MLAYERTEST_H + +#include "MultiLayer.h" +#include "BornAgainNamespace.h" +#include "Layer.h" +#include "HomogeneousMaterial.h" +#include "Materials.h" +#include "Units.h" +#include "ParticleLayout.h" + +class MultiLayerTest : public ::testing::Test +{ +protected: + MultiLayerTest() + : air("air", 0, 1.0) + , iron("iron", 0, 1.51) + , chromium("chromium", 0, 3.68) + , stone("stone", 0, 1.6) + , topLayer(air, 0*Units::nanometer) + , layer1(iron, 20*Units::nanometer) + , layer2(chromium, 40*Units::nanometer) + , substrate(stone, 0*Units::nanometer) {} + void set_four() { + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + mLayer.addLayer(substrate); + } + + MultiLayer mLayer; + const HomogeneousMaterial air, iron, chromium, stone; + Layer topLayer, layer1, layer2, substrate; +}; + +TEST_F(MultiLayerTest, BasicProperty) +{ + //check default properties + EXPECT_EQ(BornAgain::MultiLayerType, mLayer.getName()); + EXPECT_EQ(0.0, mLayer.getCrossCorrLength()); + EXPECT_EQ(size_t(0), mLayer.getNumberOfLayers()); + EXPECT_EQ(size_t(0), mLayer.getNumberOfInterfaces()); + + //set parameter + mLayer.setParameterValue(BornAgain::CrossCorrelationLength, -2.54); + EXPECT_EQ(-2.54,mLayer.getCrossCorrLength()); + + // adding layers + mLayer.addLayer(topLayer); + EXPECT_EQ(size_t(1), mLayer.getNumberOfLayers()); + EXPECT_EQ(size_t(0), mLayer.getNumberOfInterfaces()); + + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + mLayer.addLayer(substrate); + EXPECT_EQ(size_t(4), mLayer.getNumberOfLayers()); + EXPECT_EQ(size_t(3), mLayer.getNumberOfInterfaces()); +} + +TEST_F(MultiLayerTest, LayerThicknesses) +{ + set_four(); + + //check layer thickness + EXPECT_EQ( 0.0, mLayer.getLayerThickness(0)); + EXPECT_EQ(20.0, mLayer.getLayerThickness(1)); + EXPECT_EQ(40.0, mLayer.getLayerThickness(2)); + EXPECT_EQ( 0.0, mLayer.getLayerThickness(3)); + + //check bottomZ value + EXPECT_EQ( 0.0, mLayer.getLayerBottomZ(0)); + EXPECT_EQ(-20.0, mLayer.getLayerBottomZ(1)); + EXPECT_EQ(-60.0, mLayer.getLayerBottomZ(2)); + EXPECT_EQ(-60.0, mLayer.getLayerBottomZ(3)); + + //set layer thickness + mLayer.setLayerThickness(1, 45.0); + EXPECT_EQ(45.0, mLayer.getLayerThickness(1)); + + EXPECT_EQ( 0.0, mLayer.getLayerBottomZ(0)); + EXPECT_EQ(-45.0, mLayer.getLayerBottomZ(1)); + EXPECT_EQ(-85.0, mLayer.getLayerBottomZ(2)); + EXPECT_EQ(-85.0, mLayer.getLayerBottomZ(3)); +} + +TEST_F(MultiLayerTest, CheckAllLayers) +{ + set_four(); + + //check individual layer + const Layer* got0 = mLayer.getLayer(0); + EXPECT_EQ(BornAgain::LayerType, got0->getName()); + EXPECT_EQ(0, got0->getThickness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), got0->getMaterial()->getName()); + + const Layer* got1 = mLayer.getLayer(1); + EXPECT_EQ(BornAgain::LayerType, got1->getName()); + EXPECT_EQ(20, got1->getThickness()); + EXPECT_EQ(layer1.getMaterial()->getName(), got1->getMaterial()->getName()); + + const Layer* got2 = mLayer.getLayer(2); + EXPECT_EQ(BornAgain::LayerType, got2->getName()); + EXPECT_EQ(40, got2->getThickness()); + EXPECT_EQ(layer2.getMaterial()->getName(), got2->getMaterial()->getName()); + + const Layer* got3 = mLayer.getLayer(3); + EXPECT_EQ(BornAgain::LayerType, got3->getName()); + EXPECT_EQ(0, got3->getThickness()); + EXPECT_EQ(substrate.getMaterial()->getName(), got3->getMaterial()->getName()); +} + +TEST_F(MultiLayerTest, LayerInterfaces) +{ + set_four(); + + //check interfaces + const LayerInterface* interface0 = mLayer.getLayerInterface(0); + EXPECT_TRUE(nullptr!=interface0); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); + EXPECT_EQ(nullptr, interface0->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), + interface0->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), + interface0->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface1 = mLayer.getLayerInterface(1); + EXPECT_TRUE(nullptr!=interface1); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); + EXPECT_EQ(nullptr, interface1->getRoughness()); + EXPECT_EQ(layer1.getMaterial()->getName(), + interface1->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer2.getMaterial()->getName(), + interface1->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface2 = mLayer.getLayerInterface(2); + EXPECT_TRUE(nullptr!=interface2); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); + EXPECT_EQ(nullptr, interface2->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), + interface2->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), + interface2->getLayerBottom()->getMaterial()->getName()); + + //bottom interface + const LayerInterface* interfaceBottom = mLayer.getLayerBottomInterface(0); + EXPECT_TRUE(nullptr!=interfaceBottom); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); + EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), + interfaceBottom->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), + interfaceBottom->getLayerBottom()->getMaterial()->getName()); + + //top interface + const LayerInterface* interfaceTop = mLayer.getLayerTopInterface(3); + EXPECT_TRUE(nullptr!=interfaceTop); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); + EXPECT_EQ(nullptr, interfaceTop->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), + interfaceTop->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), + interfaceTop->getLayerBottom()->getMaterial()->getName()); + + //null interface + const LayerInterface* interfaceTopNull = mLayer.getLayerTopInterface(0); + EXPECT_TRUE(nullptr==interfaceTopNull); + + const LayerInterface* interfaceBottomNull = mLayer.getLayerBottomInterface(3); + EXPECT_TRUE(nullptr==interfaceBottomNull); +} + +TEST_F(MultiLayerTest, Clone) +{ + set_four(); + + MultiLayer* mLayerClone = mLayer.clone(); + + //check properties + EXPECT_EQ(BornAgain::MultiLayerType, mLayerClone->getName()); + EXPECT_EQ(0.0,mLayerClone->getCrossCorrLength()); + EXPECT_EQ(size_t(4), mLayerClone->getNumberOfLayers()); + EXPECT_EQ(size_t(3), mLayerClone->getNumberOfInterfaces()); + + //check layer thickness + EXPECT_EQ(topLayer.getThickness(), mLayerClone->getLayerThickness(0)); + EXPECT_EQ(layer1.getThickness(), mLayerClone->getLayerThickness(1)); + EXPECT_EQ(layer2.getThickness(), mLayerClone->getLayerThickness(2)); + EXPECT_EQ(substrate.getThickness(), mLayerClone->getLayerThickness(3)); + + //check bottomZ value + EXPECT_EQ(mLayer.getLayerBottomZ(0), mLayerClone->getLayerBottomZ(0)); + EXPECT_EQ(mLayer.getLayerBottomZ(1), mLayerClone->getLayerBottomZ(1)); + EXPECT_EQ(mLayer.getLayerBottomZ(2), mLayerClone->getLayerBottomZ(2)); + EXPECT_EQ(mLayer.getLayerBottomZ(3), mLayerClone->getLayerBottomZ(3)); + + //check individual layer + const Layer* layerCopy0 = mLayerClone->getLayer(0); + EXPECT_EQ(topLayer.getName(), layerCopy0->getName()); + EXPECT_EQ(topLayer.getThickness(), layerCopy0->getThickness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), layerCopy0->getMaterial()->getName()); + + const Layer* layerCopy1 = mLayerClone->getLayer(1); + EXPECT_EQ(layer1.getName(), layerCopy1->getName()); + EXPECT_EQ(layer1.getThickness(), layerCopy1->getThickness()); + EXPECT_EQ(layer1.getMaterial()->getName(), layerCopy1->getMaterial()->getName()); + + const Layer* layerCopy2 = mLayerClone->getLayer(2); + EXPECT_EQ(layer2.getName(), layerCopy2->getName()); + EXPECT_EQ(layer2.getThickness(), layerCopy2->getThickness()); + EXPECT_EQ(layer2.getMaterial()->getName(), layerCopy2->getMaterial()->getName()); + + const Layer* layerCopy3 = mLayerClone->getLayer(3); + EXPECT_EQ(substrate.getName(), layerCopy3->getName()); + EXPECT_EQ(substrate.getThickness(), layerCopy3->getThickness()); + EXPECT_EQ(substrate.getMaterial()->getName(), layerCopy3->getMaterial()->getName()); + + //check interfaces + const LayerInterface* interface0 = mLayerClone->getLayerInterface(0); + EXPECT_TRUE(nullptr!=interface0); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); + EXPECT_EQ(nullptr, interface0->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), interface0->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), interface0->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface1 = mLayerClone->getLayerInterface(1); + EXPECT_TRUE(nullptr!=interface1); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); + EXPECT_EQ(nullptr, interface1->getRoughness()); + EXPECT_EQ(layer1.getMaterial()->getName(), interface1->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer2.getMaterial()->getName(), interface1->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface2 = mLayerClone->getLayerInterface(2); + EXPECT_TRUE(nullptr!=interface2); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); + EXPECT_EQ(nullptr, interface2->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), interface2->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), interface2->getLayerBottom()->getMaterial()->getName()); + + //top interface + const LayerInterface* interfaceBottom = mLayerClone->getLayerTopInterface(1); + EXPECT_TRUE(nullptr!=interfaceBottom); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); + EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), interfaceBottom->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), interfaceBottom->getLayerBottom()->getMaterial()->getName()); + + //Bottom interface + const LayerInterface* interfaceTop = mLayerClone->getLayerBottomInterface(2); + EXPECT_TRUE(nullptr!=interfaceTop); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); + EXPECT_EQ(nullptr, interfaceTop->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), interfaceTop->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), interfaceTop->getLayerBottom()->getMaterial()->getName()); + + //null interface + const LayerInterface* interfaceTopNull = mLayerClone->getLayerTopInterface(0); + EXPECT_TRUE(nullptr==interfaceTopNull); + + const LayerInterface* interfaceBottomNull = mLayerClone->getLayerBottomInterface(3); + EXPECT_TRUE(nullptr==interfaceBottomNull); + + delete mLayerClone; +} + +TEST_F(MultiLayerTest, CloneInvertB) +{ + set_four(); + + MultiLayer* mLayerClone = mLayer.cloneInvertB(); + + //check properties + EXPECT_EQ(BornAgain::MultiLayerType, mLayerClone->getName()); + EXPECT_EQ(0.0,mLayerClone->getCrossCorrLength()); + EXPECT_EQ(size_t(4), mLayerClone->getNumberOfLayers()); + EXPECT_EQ(size_t(3), mLayerClone->getNumberOfInterfaces()); + + //check layer thickness + EXPECT_EQ(topLayer.getThickness(), mLayerClone->getLayerThickness(0)); + EXPECT_EQ(layer1.getThickness(), mLayerClone->getLayerThickness(1)); + EXPECT_EQ(layer2.getThickness(), mLayerClone->getLayerThickness(2)); + EXPECT_EQ(substrate.getThickness(), mLayerClone->getLayerThickness(3)); + + //check bottomZ value + EXPECT_EQ(mLayer.getLayerBottomZ(0), mLayerClone->getLayerBottomZ(0)); + EXPECT_EQ(mLayer.getLayerBottomZ(1), mLayerClone->getLayerBottomZ(1)); + EXPECT_EQ(mLayer.getLayerBottomZ(2), mLayerClone->getLayerBottomZ(2)); + EXPECT_EQ(mLayer.getLayerBottomZ(3), mLayerClone->getLayerBottomZ(3)); + + //check individual layer + const Layer* layerCopy0 = mLayerClone->getLayer(0); + EXPECT_EQ(topLayer.getName(), layerCopy0->getName()); + EXPECT_EQ(topLayer.getThickness(), layerCopy0->getThickness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), layerCopy0->getMaterial()->getName()); + + const Layer* layerCopy1 = mLayerClone->getLayer(1); + EXPECT_EQ(layer1.getName(), layerCopy1->getName()); + EXPECT_EQ(layer1.getThickness(), layerCopy1->getThickness()); + EXPECT_EQ(layer1.getMaterial()->getName(), layerCopy1->getMaterial()->getName()); + + const Layer* layerCopy2 = mLayerClone->getLayer(2); + EXPECT_EQ(layer2.getName(), layerCopy2->getName()); + EXPECT_EQ(layer2.getThickness(), layerCopy2->getThickness()); + EXPECT_EQ(layer2.getMaterial()->getName(), layerCopy2->getMaterial()->getName()); + + const Layer* layerCopy3 = mLayerClone->getLayer(3); + EXPECT_EQ(substrate.getName(), layerCopy3->getName()); + EXPECT_EQ(substrate.getThickness(), layerCopy3->getThickness()); + EXPECT_EQ(substrate.getMaterial()->getName(), layerCopy3->getMaterial()->getName()); + + //check interfaces + const LayerInterface* interface0 = mLayerClone->getLayerInterface(0); + EXPECT_TRUE(nullptr!=interface0); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); + EXPECT_EQ(nullptr, interface0->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), interface0->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), interface0->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface1 = mLayerClone->getLayerInterface(1); + EXPECT_TRUE(nullptr!=interface1); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); + EXPECT_EQ(nullptr, interface1->getRoughness()); + EXPECT_EQ(layer1.getMaterial()->getName(), interface1->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer2.getMaterial()->getName(), interface1->getLayerBottom()->getMaterial()->getName()); + + const LayerInterface* interface2 = mLayerClone->getLayerInterface(2); + EXPECT_TRUE(nullptr!=interface2); + EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); + EXPECT_EQ(nullptr, interface2->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), interface2->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), interface2->getLayerBottom()->getMaterial()->getName()); + + //top interface + const LayerInterface* interfaceBottom = mLayerClone->getLayerTopInterface(1); + EXPECT_TRUE(nullptr!=interfaceBottom); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); + EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); + EXPECT_EQ(topLayer.getMaterial()->getName(), interfaceBottom->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(layer1.getMaterial()->getName(), interfaceBottom->getLayerBottom()->getMaterial()->getName()); + + //Bottom interface + const LayerInterface* interfaceTop = mLayerClone->getLayerBottomInterface(2); + EXPECT_TRUE(nullptr!=interfaceTop); + EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); + EXPECT_EQ(nullptr, interfaceTop->getRoughness()); + EXPECT_EQ(layer2.getMaterial()->getName(), interfaceTop->getLayerTop()->getMaterial()->getName()); + EXPECT_EQ(substrate.getMaterial()->getName(), interfaceTop->getLayerBottom()->getMaterial()->getName()); + + //null interface + const LayerInterface* interfaceTopNull = mLayerClone->getLayerTopInterface(0); + EXPECT_TRUE(nullptr==interfaceTopNull); + + const LayerInterface* interfaceBottomNull = mLayerClone->getLayerBottomInterface(3); + EXPECT_TRUE(nullptr==interfaceBottomNull); + + delete mLayerClone; +} + +TEST_F(MultiLayerTest, WithRoughness) +{ + //LayerRoughness(double sigma, double hurstParameter, double latteralCorrLength); + LayerRoughness lr(1.1, -7.3, 0.1); + mLayer.addLayer(topLayer); + mLayer.addLayerWithTopRoughness(layer1,lr); + mLayer.addLayer(substrate); + + const LayerInterface* interface0 = mLayer.getLayerInterface(0); + const LayerInterface* interface1 = mLayer.getLayerInterface(1); + + const LayerRoughness* roughness0 = interface0->getRoughness(); + const LayerRoughness* roughness1 = interface1->getRoughness(); + + EXPECT_TRUE(roughness0); + EXPECT_EQ(nullptr, roughness1); + + EXPECT_EQ(1.1, roughness0->getSigma()); + EXPECT_EQ(-7.3, roughness0->getHurstParameter()); + EXPECT_EQ(0.1, roughness0->getLatteralCorrLength()); +} + +TEST_F(MultiLayerTest, CloneWithRoughness) +{ + LayerRoughness lr0(-2.1, 7.3, -12.1); + LayerRoughness lr1(1.1, -7.3, 0.1); + + mLayer.addLayer(topLayer); + mLayer.addLayerWithTopRoughness(layer1,lr0); + mLayer.addLayerWithTopRoughness(substrate,lr1); + + MultiLayer* mLayerClone = mLayer.clone(); + + const LayerInterface* interface0 = mLayerClone->getLayerInterface(0); + const LayerInterface* interface1 = mLayerClone->getLayerInterface(1); + const LayerRoughness* roughness0 = interface0->getRoughness(); + const LayerRoughness* roughness1 = interface1->getRoughness(); + + EXPECT_TRUE(roughness0); + EXPECT_TRUE(roughness1); + + EXPECT_EQ( -2.1, roughness0->getSigma()); + EXPECT_EQ( 7.3, roughness0->getHurstParameter()); + EXPECT_EQ(-12.1, roughness0->getLatteralCorrLength()); + + EXPECT_EQ( 1.1, roughness1->getSigma()); + EXPECT_EQ( -7.3, roughness1->getHurstParameter()); + EXPECT_EQ( 0.1, roughness1->getLatteralCorrLength()); + + delete mLayerClone; +} + +TEST_F(MultiLayerTest, CloneInvertBWithRoughness) +{ + Layer layer1(iron, 20*Units::nanometer); + Layer layer2(stone, 5*Units::nanometer); + + //LayerRoughness(double sigma, double hurstParameter, double latteralCorrLength); + LayerRoughness lr0(-2.1, 7.3, -12.1); + LayerRoughness lr1(1.1, -7.3, 0.1); + + mLayer.addLayer(topLayer); + mLayer.addLayerWithTopRoughness(layer1,lr0); + mLayer.addLayerWithTopRoughness(layer2,lr1); + + MultiLayer* mLayerClone = mLayer.cloneInvertB(); + + const LayerInterface* interface0 = mLayerClone->getLayerInterface(0); + const LayerInterface* interface1 = mLayerClone->getLayerInterface(1); + const LayerRoughness* roughness0 = interface0->getRoughness(); + const LayerRoughness* roughness1 = interface1->getRoughness(); + + EXPECT_EQ( -2.1, roughness0->getSigma()); + EXPECT_EQ( 7.3, roughness0->getHurstParameter()); + EXPECT_EQ(-12.1, roughness0->getLatteralCorrLength()); + + EXPECT_EQ( 1.1, roughness1->getSigma()); + EXPECT_EQ( -7.3, roughness1->getHurstParameter()); + EXPECT_EQ( 0.1, roughness1->getLatteralCorrLength()); + + delete mLayerClone; +} + +TEST_F(MultiLayerTest, WithMagneticMaterial) +{ + kvector_t magnetic_field(0.0, 0.0, 0.0); + HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); + HomogeneousMagneticMaterial magMaterial1("MagMat1", -5.6, 10, magnetic_field); + + Layer layer1(iron, 20*Units::nanometer); + Layer layer2(stone, 30*Units::nanometer); + Layer layer3(magMaterial0, 20*Units::nanometer); + Layer layer4(magMaterial1, 0*Units::nanometer); + + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + EXPECT_FALSE(mLayer.containsMagneticMaterial()); + + mLayer.addLayer(layer3); + mLayer.addLayer(layer4); + EXPECT_TRUE(mLayer.containsMagneticMaterial()); +} + +TEST_F(MultiLayerTest, CloneWithMagneticMaterial) +{ + kvector_t magnetic_field(1.1, 2.1, -5.1); + HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); + + Layer layer1(iron, 20*Units::nanometer); + Layer layer2(magMaterial0, 20*Units::nanometer); + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + + MultiLayer* mLayerClone = mLayer.clone(); + EXPECT_TRUE(mLayerClone->containsMagneticMaterial()); + delete mLayerClone; +} + +TEST_F(MultiLayerTest, CloneInvertBMagneticMaterial) +{ + kvector_t magnetic_field(0.0, 0.0, 0.0); + HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); + + Layer layer1(iron, 20*Units::nanometer); + Layer layer2(magMaterial0, 20*Units::nanometer); + + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + + MultiLayer* mLayerClone = mLayer.cloneInvertB(); + EXPECT_TRUE(mLayerClone->containsMagneticMaterial()); + delete mLayerClone; +} + +TEST_F(MultiLayerTest, MultiLayerCompositeTest) +{ + MultiLayer mLayer; + kvector_t magnetic_field(0.0, 0.0, 0.0); + HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); + HomogeneousMagneticMaterial magMaterial1("MagMat1", -5.6, 10, magnetic_field); + + Layer layer1(iron, 10*Units::nanometer); + Layer layer2(magMaterial0, 20*Units::nanometer); + Layer layer3(magMaterial1, 30*Units::nanometer); + Layer layer4(stone, 40*Units::nanometer); + + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + mLayer.addLayer(layer3); + mLayer.addLayer(layer4); + + std::vector<Layer *> layer_buffer; + std::vector<LayerInterface *> interface_buffer; + int counter(0); + for(size_t index=0; index<mLayer.size();++index) + { + ISample *sample = mLayer[index]; + if(counter%2 == 1) + { + LayerInterface *interface = dynamic_cast<LayerInterface *>(sample); + EXPECT_TRUE(nullptr != interface); + interface_buffer.push_back(interface); + } else { + Layer *layer = dynamic_cast<Layer *>(sample); + EXPECT_TRUE(nullptr != layer); + layer_buffer.push_back(layer); + } + counter++; + } + EXPECT_EQ( size_t(5), layer_buffer.size()); + EXPECT_EQ( size_t(4), interface_buffer.size()); + for(size_t i=0; i<layer_buffer.size(); ++i) { + EXPECT_EQ( double(i*10), layer_buffer[i]->getThickness()); + } + for(size_t i=0; i<interface_buffer.size(); ++i) { + EXPECT_EQ( double((i+1)*10), interface_buffer[i]->getLayerBottom()->getThickness()); + } +} + +TEST_F(MultiLayerTest, MultiLayerZtoIndex) +{ + MultiLayer mLayer; + + // index_0 + // ----------------- 0.0 + // index_1 + // ----------------- -10.0 + // index_2 + // ----------------- -30.0 + // index_3 + // ----------------- -60.0 + // index_4 + Layer layer1(air, 10*Units::nanometer); + Layer layer2(air, 20*Units::nanometer); + Layer layer3(air, 30*Units::nanometer); + Layer layer4(air, 0*Units::nanometer); + mLayer.addLayer(topLayer); + mLayer.addLayer(layer1); + mLayer.addLayer(layer2); + mLayer.addLayer(layer3); + mLayer.addLayer(layer4); + + EXPECT_EQ(size_t(0), mLayer.zToLayerIndex(1.0)); + EXPECT_EQ(size_t(0), mLayer.zToLayerIndex(0.0)); + EXPECT_EQ(size_t(1), mLayer.zToLayerIndex(-1.0)); + EXPECT_EQ(size_t(1), mLayer.zToLayerIndex(-9.0)); + EXPECT_EQ(size_t(1), mLayer.zToLayerIndex(-10.0)); + EXPECT_EQ(size_t(2), mLayer.zToLayerIndex(-11.0)); + EXPECT_EQ(size_t(2), mLayer.zToLayerIndex(-30.0)); + EXPECT_EQ(size_t(3), mLayer.zToLayerIndex(-31.0)); + EXPECT_EQ(size_t(3), mLayer.zToLayerIndex(-60.0)); + EXPECT_EQ(size_t(4), mLayer.zToLayerIndex(-61.0)); +} + +#endif diff --git a/Tests/UnitTests/Core/ParticleCompositionTest.h b/Tests/UnitTests/Core/1/ParticleCompositionTest.h similarity index 100% rename from Tests/UnitTests/Core/ParticleCompositionTest.h rename to Tests/UnitTests/Core/1/ParticleCompositionTest.h diff --git a/Tests/UnitTests/Core/ParticleCoreShellTest.h b/Tests/UnitTests/Core/1/ParticleCoreShellTest.h similarity index 99% rename from Tests/UnitTests/Core/ParticleCoreShellTest.h rename to Tests/UnitTests/Core/1/ParticleCoreShellTest.h index 1a68088f36dd3fc2e9b8c40ad4daed17a9812acd..d06ce11bab4469160eb8f277c184826572ef46ed 100644 --- a/Tests/UnitTests/Core/ParticleCoreShellTest.h +++ b/Tests/UnitTests/Core/1/ParticleCoreShellTest.h @@ -1,6 +1,7 @@ #ifndef PARTICLECORESHELLTEST_H #define PARTICLECORESHELLTEST_H +#include "IFormFactorBorn.h" #include "ParticleCoreShell.h" #include "BornAgainNamespace.h" #include "Units.h" diff --git a/Tests/UnitTests/Core/ParticleLayoutTest.h b/Tests/UnitTests/Core/1/ParticleLayoutTest.h similarity index 100% rename from Tests/UnitTests/Core/ParticleLayoutTest.h rename to Tests/UnitTests/Core/1/ParticleLayoutTest.h diff --git a/Tests/UnitTests/Core/ParticleTest.h b/Tests/UnitTests/Core/1/ParticleTest.h similarity index 100% rename from Tests/UnitTests/Core/ParticleTest.h rename to Tests/UnitTests/Core/1/ParticleTest.h diff --git a/Tests/UnitTests/Core/MatrixRTCoefficientsTest.h b/Tests/UnitTests/Core/2/MatrixRTCoefficientsTest.h similarity index 98% rename from Tests/UnitTests/Core/MatrixRTCoefficientsTest.h rename to Tests/UnitTests/Core/2/MatrixRTCoefficientsTest.h index 4bca061325ea3d84d39dd139e82748a037c0a1fe..2210aef7650908d053419a12d3175d44e4997582 100644 --- a/Tests/UnitTests/Core/MatrixRTCoefficientsTest.h +++ b/Tests/UnitTests/Core/2/MatrixRTCoefficientsTest.h @@ -2,7 +2,6 @@ #define MATRIXRTCOEFFICIENTSTEST_H #include "MatrixRTCoefficients.h" -#include "gtest/gtest.h" class MatrixRTCoefficientsTest : public ::testing :: Test diff --git a/Tests/UnitTests/Core/MatrixSpecularInfoMapTest.h b/Tests/UnitTests/Core/2/MatrixSpecularInfoMapTest.h similarity index 99% rename from Tests/UnitTests/Core/MatrixSpecularInfoMapTest.h rename to Tests/UnitTests/Core/2/MatrixSpecularInfoMapTest.h index 83e5e1e4b2d8cd22f5f85aa844dd126407ead49f..fad4b78bd4dfd74c0dedcae275790eaad1a38969 100644 --- a/Tests/UnitTests/Core/MatrixSpecularInfoMapTest.h +++ b/Tests/UnitTests/Core/2/MatrixSpecularInfoMapTest.h @@ -4,7 +4,6 @@ #include "Units.h" #include "MatrixRTCoefficients.h" #include "MatrixSpecularInfoMap.h" -#include "gtest/gtest.h" #include <memory> diff --git a/Tests/UnitTests/Core/ScalarRTCoefficientsTest.h b/Tests/UnitTests/Core/2/ScalarRTCoefficientsTest.h similarity index 99% rename from Tests/UnitTests/Core/ScalarRTCoefficientsTest.h rename to Tests/UnitTests/Core/2/ScalarRTCoefficientsTest.h index 2ebf708de835768ba533b01b120156ed3dd1015d..1229e3bf9a56bc1ba3494a806721437511bdd34c 100644 --- a/Tests/UnitTests/Core/ScalarRTCoefficientsTest.h +++ b/Tests/UnitTests/Core/2/ScalarRTCoefficientsTest.h @@ -2,7 +2,6 @@ #define SCALARRTCOEFFICIENTS_H #include "ScalarRTCoefficients.h" -#include "gtest/gtest.h" class ScalarRTCoefficientsTest : public ::testing :: Test { diff --git a/Tests/UnitTests/Core/ScalarSpecularInfoMapTest.h b/Tests/UnitTests/Core/2/ScalarSpecularInfoMapTest.h similarity index 99% rename from Tests/UnitTests/Core/ScalarSpecularInfoMapTest.h rename to Tests/UnitTests/Core/2/ScalarSpecularInfoMapTest.h index 6b1b072e4e79ea2cddae358e8e5f8e6108d96b27..4e88cace43bf717c31ed706f5b67576aab8e0fcc 100644 --- a/Tests/UnitTests/Core/ScalarSpecularInfoMapTest.h +++ b/Tests/UnitTests/Core/2/ScalarSpecularInfoMapTest.h @@ -4,7 +4,6 @@ #include "Units.h" #include "ScalarRTCoefficients.h" #include "ScalarSpecularInfoMap.h" -#include "gtest/gtest.h" #include <memory> diff --git a/Tests/UnitTests/Core/SpecularMatrixTest.h b/Tests/UnitTests/Core/2/SpecularMatrixTest.h similarity index 96% rename from Tests/UnitTests/Core/SpecularMatrixTest.h rename to Tests/UnitTests/Core/2/SpecularMatrixTest.h index 3c223c89383f3a530a8e9b334083f9651dbec8af..842d91259ba9aeb20807f89bc187f6d3cd192c9d 100644 --- a/Tests/UnitTests/Core/SpecularMatrixTest.h +++ b/Tests/UnitTests/Core/2/SpecularMatrixTest.h @@ -2,7 +2,6 @@ #define SPECULARMATRIXTEST_H #include "SpecularMatrix.h" -#include "gtest/gtest.h" class SpecularMatrixTest : public ::testing :: Test { diff --git a/Tests/UnitTests/Core/SpecularSimulationTest.h b/Tests/UnitTests/Core/2/SpecularSimulationTest.h similarity index 99% rename from Tests/UnitTests/Core/SpecularSimulationTest.h rename to Tests/UnitTests/Core/2/SpecularSimulationTest.h index acb70ce5126a100b030eb62b6b78d16ef3414033..f0abec9161e16a670d55bb61198335d89e2862ea 100644 --- a/Tests/UnitTests/Core/SpecularSimulationTest.h +++ b/Tests/UnitTests/Core/2/SpecularSimulationTest.h @@ -1,7 +1,6 @@ #ifndef SPECULARSIMULATIONTEST_H #define SPECULARSIMULATIONTEST_H -#include "gtest/gtest.h" #include "SpecularSimulation.h" #include "Exceptions.h" #include "FixedBinAxis.h" diff --git a/Tests/UnitTests/Core/DetectorMaskTest.h b/Tests/UnitTests/Core/3/DetectorMaskTest.h similarity index 99% rename from Tests/UnitTests/Core/DetectorMaskTest.h rename to Tests/UnitTests/Core/3/DetectorMaskTest.h index ed26ece8c41c2cc26ec168fa46d6ba0a90ee2583..4b857d8edd9bc7af1d242357b59500355c60cee8 100644 --- a/Tests/UnitTests/Core/DetectorMaskTest.h +++ b/Tests/UnitTests/Core/3/DetectorMaskTest.h @@ -3,7 +3,7 @@ #include "DetectorMask.h" #include "SphericalDetector.h" -#include "gtest/gtest.h" +#include "Polygon.h" #include <memory> class DetectorMaskTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/DetectorTest.h b/Tests/UnitTests/Core/3/DetectorTest.h similarity index 99% rename from Tests/UnitTests/Core/DetectorTest.h rename to Tests/UnitTests/Core/3/DetectorTest.h index 05b9c00bf9efc454e2f26f6737b197f9b31b34a3..720ad398a95b67475cb8aee59d0e57551ad78a1b 100644 --- a/Tests/UnitTests/Core/DetectorTest.h +++ b/Tests/UnitTests/Core/3/DetectorTest.h @@ -11,7 +11,6 @@ #include "Polygon.h" #include <memory> -#include "gtest/gtest.h" class DetectorTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/MaskTest.h b/Tests/UnitTests/Core/3/MaskTest.h similarity index 99% rename from Tests/UnitTests/Core/MaskTest.h rename to Tests/UnitTests/Core/3/MaskTest.h index d8941d2f6ea9f5d7d208523e942f1706ba384dd1..5b7344ae0dcfd03694c0d090ff357d9faf830626 100644 --- a/Tests/UnitTests/Core/MaskTest.h +++ b/Tests/UnitTests/Core/3/MaskTest.h @@ -4,7 +4,6 @@ #include "Mask.h" #include "OutputData.h" -#include "gtest/gtest.h" class MaskTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/PolygonTest.h b/Tests/UnitTests/Core/3/PolygonTest.h similarity index 99% rename from Tests/UnitTests/Core/PolygonTest.h rename to Tests/UnitTests/Core/3/PolygonTest.h index fd666d4338d3038961838f42d9eb9fbcb93a0796..35d7cb989732ef45f45ee86855bafdf12e507d52 100644 --- a/Tests/UnitTests/Core/PolygonTest.h +++ b/Tests/UnitTests/Core/3/PolygonTest.h @@ -2,7 +2,6 @@ #define POLYGONTEST_H #include "Polygon.h" -#include "gtest/gtest.h" #include <memory> class PolygonTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/PrecomputedTest.h b/Tests/UnitTests/Core/3/PrecomputedTest.h similarity index 97% rename from Tests/UnitTests/Core/PrecomputedTest.h rename to Tests/UnitTests/Core/3/PrecomputedTest.h index 260fc938e18b5ac98588497d7f040ff28427a565..e77740421b4dc88958d13b23b3325bcea67054ba 100644 --- a/Tests/UnitTests/Core/PrecomputedTest.h +++ b/Tests/UnitTests/Core/3/PrecomputedTest.h @@ -2,7 +2,6 @@ #define PRECOMPUTEDTEST_H #include "Precomputed.h" -#include "gtest/gtest.h" #include <memory> class PrecomputedTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/RectangularDetectorTest.h b/Tests/UnitTests/Core/3/RectangularDetectorTest.h similarity index 99% rename from Tests/UnitTests/Core/RectangularDetectorTest.h rename to Tests/UnitTests/Core/3/RectangularDetectorTest.h index 4fbdaa9ae04024cc6b24039f644cf94d1a33e21a..6144c3b64e6953d527a42e373409689028041e77 100644 --- a/Tests/UnitTests/Core/RectangularDetectorTest.h +++ b/Tests/UnitTests/Core/3/RectangularDetectorTest.h @@ -1,11 +1,11 @@ #ifndef RECTANGULARDETECTORTEST_H #define RECTANGULARDETECTORTEST_H +#include "Units.h" #include "RectangularDetector.h" #include "GISASSimulation.h" #include "SimulationElement.h" #include "Numeric.h" -#include "gtest/gtest.h" #include <memory> #include <iostream> diff --git a/Tests/UnitTests/Core/SpecialFunctionsTest.h b/Tests/UnitTests/Core/3/SpecialFunctionsTest.h similarity index 99% rename from Tests/UnitTests/Core/SpecialFunctionsTest.h rename to Tests/UnitTests/Core/3/SpecialFunctionsTest.h index fc01687a58ce5006caf909be25263df311fb900a..b09c1a27020af62a2b86fc34efb3bd5e4a5580ea 100644 --- a/Tests/UnitTests/Core/SpecialFunctionsTest.h +++ b/Tests/UnitTests/Core/3/SpecialFunctionsTest.h @@ -17,7 +17,6 @@ #define SPECIALFUNCTIONSTEST_H #include "MathFunctions.h" -#include "gtest/gtest.h" #define EXPECT_CNEAR(a,b,epsi) \ EXPECT_NEAR((a).real(),(b).real(),epsi); EXPECT_NEAR((a).imag(),(b).imag(),epsi); diff --git a/Tests/UnitTests/Core/AttLimitsTest.h b/Tests/UnitTests/Core/4/AttLimitsTest.h similarity index 99% rename from Tests/UnitTests/Core/AttLimitsTest.h rename to Tests/UnitTests/Core/4/AttLimitsTest.h index 8d376ece6f9c1fe8dafe5a3977c7ece231bf657b..cc34367a3b0ea36a9c74f338549003c02460cebd 100644 --- a/Tests/UnitTests/Core/AttLimitsTest.h +++ b/Tests/UnitTests/Core/4/AttLimitsTest.h @@ -4,7 +4,6 @@ #include "AttLimits.h" #include <limits> -#include "gtest/gtest.h" class AttLimitsTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/BeamTest.h b/Tests/UnitTests/Core/4/BeamTest.h similarity index 98% rename from Tests/UnitTests/Core/BeamTest.h rename to Tests/UnitTests/Core/4/BeamTest.h index 6af9a88b0c8107edd5745cf780e88d12f84388b9..8d4bdde410dd530016413ff399988400bf5fefb3 100644 --- a/Tests/UnitTests/Core/BeamTest.h +++ b/Tests/UnitTests/Core/4/BeamTest.h @@ -5,7 +5,6 @@ #include "BornAgainNamespace.h" #include "Units.h" #include "ParameterPool.h" -#include "gtest/gtest.h" #include <memory> diff --git a/Tests/UnitTests/Core/ChiSquaredModuleTest.h b/Tests/UnitTests/Core/4/ChiSquaredModuleTest.h similarity index 99% rename from Tests/UnitTests/Core/ChiSquaredModuleTest.h rename to Tests/UnitTests/Core/4/ChiSquaredModuleTest.h index 4a1309aa6350b0ae28784b6ca4254ac54a655d95..0a344722b2a9e1da810a8b6e78defcd9b8039334 100644 --- a/Tests/UnitTests/Core/ChiSquaredModuleTest.h +++ b/Tests/UnitTests/Core/4/ChiSquaredModuleTest.h @@ -5,7 +5,6 @@ #include "ISquaredFunction.h" #include "BornAgainNamespace.h" -#include "gtest/gtest.h" class ChiSquaredModuleTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/CumulativeValueTest.h b/Tests/UnitTests/Core/4/CumulativeValueTest.h similarity index 98% rename from Tests/UnitTests/Core/CumulativeValueTest.h rename to Tests/UnitTests/Core/4/CumulativeValueTest.h index f23f4029b0493e460056482e0b4640ea94de15aa..98250ee815fb743735b881b333e0d564edfc102c 100644 --- a/Tests/UnitTests/Core/CumulativeValueTest.h +++ b/Tests/UnitTests/Core/4/CumulativeValueTest.h @@ -3,7 +3,6 @@ #include "CumulativeValue.h" -#include "gtest/gtest.h" class CumulativeValueTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/DWBASimulationTest.h b/Tests/UnitTests/Core/4/DWBASimulationTest.h similarity index 99% rename from Tests/UnitTests/Core/DWBASimulationTest.h rename to Tests/UnitTests/Core/4/DWBASimulationTest.h index 2e01b43b95b5c4a23898e15990f0db35c301e213..d8d162a15aab0efc9474d1d173a6836f4af250bb 100644 --- a/Tests/UnitTests/Core/DWBASimulationTest.h +++ b/Tests/UnitTests/Core/4/DWBASimulationTest.h @@ -5,9 +5,6 @@ #include "DWBASimulation.h" #include "MultiLayer.h" #include "OutputDataFunctions.h" -#include "gtest/gtest.h" - - class DWBASimulationTest : public ::testing::Test { protected: diff --git a/Tests/UnitTests/Core/GISASSimulationTest.h b/Tests/UnitTests/Core/4/GISASSimulationTest.h similarity index 99% rename from Tests/UnitTests/Core/GISASSimulationTest.h rename to Tests/UnitTests/Core/4/GISASSimulationTest.h index 84bbf5fd9f69ae5089b366b0fa3ba05a81c0798b..e3268a83177d2ba26431c7fdb27a96393560abae 100644 --- a/Tests/UnitTests/Core/GISASSimulationTest.h +++ b/Tests/UnitTests/Core/4/GISASSimulationTest.h @@ -10,7 +10,6 @@ #include <memory> #include <cmath> -#include "gtest/gtest.h" class GISASSimulationTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/HomogeneousMagneticMaterialTest.h b/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h similarity index 99% rename from Tests/UnitTests/Core/HomogeneousMagneticMaterialTest.h rename to Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h index 39f714cd7fff9d0d70553cd69a47504c961fad6f..9678d251e0eeed015c1564722c2ab97871b2c3ee 100644 --- a/Tests/UnitTests/Core/HomogeneousMagneticMaterialTest.h +++ b/Tests/UnitTests/Core/4/HomogeneousMagneticMaterialTest.h @@ -2,7 +2,6 @@ #define HOMOGENEOUSMAGNETICMATERIALTEST_H #include "HomogeneousMagneticMaterial.h" -#include "gtest/gtest.h" class HomogeneousMagneticMaterialTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/HomogeneousMaterialTest.h b/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h similarity index 99% rename from Tests/UnitTests/Core/HomogeneousMaterialTest.h rename to Tests/UnitTests/Core/4/HomogeneousMaterialTest.h index 8f251376074e30b6523968dfb874d4c56eaa41ac..fed03e8b4b972137ce292db0879938823ae38127 100644 --- a/Tests/UnitTests/Core/HomogeneousMaterialTest.h +++ b/Tests/UnitTests/Core/4/HomogeneousMaterialTest.h @@ -2,7 +2,6 @@ #define HOMOGENEOUSMATERIALTEST_H #include "HomogeneousMaterial.h" -#include "gtest/gtest.h" class HomogeneousMaterialTest : public ::testing :: Test { diff --git a/Tests/UnitTests/Core/InstrumentTest.h b/Tests/UnitTests/Core/4/InstrumentTest.h similarity index 100% rename from Tests/UnitTests/Core/InstrumentTest.h rename to Tests/UnitTests/Core/4/InstrumentTest.h diff --git a/Tests/UnitTests/Core/Shape2DTest.h b/Tests/UnitTests/Core/4/Shape2DTest.h similarity index 99% rename from Tests/UnitTests/Core/Shape2DTest.h rename to Tests/UnitTests/Core/4/Shape2DTest.h index cb021a8ef1a5dc2aaf87cd69a4cf28db48fc1324..065b273225d868b4412ae8521dbc61a612402f68 100644 --- a/Tests/UnitTests/Core/Shape2DTest.h +++ b/Tests/UnitTests/Core/4/Shape2DTest.h @@ -5,7 +5,6 @@ #include "Ellipse.h" #include "Line.h" #include "Units.h" -#include "gtest/gtest.h" #include <memory> class Shape2DTest : public ::testing::Test diff --git a/Tests/UnitTests/Core/TRangeTest.h b/Tests/UnitTests/Core/4/TRangeTest.h similarity index 99% rename from Tests/UnitTests/Core/TRangeTest.h rename to Tests/UnitTests/Core/4/TRangeTest.h index bb964b7461421785578381becb76cdae4196313d..b32bcbca9e01cfa4df607ffade1cf8c914f378bc 100644 --- a/Tests/UnitTests/Core/TRangeTest.h +++ b/Tests/UnitTests/Core/4/TRangeTest.h @@ -5,7 +5,6 @@ #include <algorithm> -#include "gtest/gtest.h" class TRangeTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/ThreadInfoTest.h b/Tests/UnitTests/Core/4/ThreadInfoTest.h similarity index 97% rename from Tests/UnitTests/Core/ThreadInfoTest.h rename to Tests/UnitTests/Core/4/ThreadInfoTest.h index 2bc17e69c79ff275c6abbc7f8a4f9dc3edfdee2d..9efe1ade6a77b119586d038970794d7003f9a8eb 100644 --- a/Tests/UnitTests/Core/ThreadInfoTest.h +++ b/Tests/UnitTests/Core/4/ThreadInfoTest.h @@ -18,7 +18,6 @@ #include "ThreadInfo.h" -#include "gtest/gtest.h" class ThreadInfoTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/DistributionHandlerTest.h b/Tests/UnitTests/Core/5/DistributionHandlerTest.h similarity index 100% rename from Tests/UnitTests/Core/DistributionHandlerTest.h rename to Tests/UnitTests/Core/5/DistributionHandlerTest.h diff --git a/Tests/UnitTests/Core/DistributionsTest.h b/Tests/UnitTests/Core/5/DistributionsTest.h similarity index 100% rename from Tests/UnitTests/Core/DistributionsTest.h rename to Tests/UnitTests/Core/5/DistributionsTest.h diff --git a/Tests/UnitTests/Core/FTDistributionsTest.h b/Tests/UnitTests/Core/5/FTDistributionsTest.h similarity index 100% rename from Tests/UnitTests/Core/FTDistributionsTest.h rename to Tests/UnitTests/Core/5/FTDistributionsTest.h diff --git a/Tests/UnitTests/Core/IParameterizedTest.h b/Tests/UnitTests/Core/5/IParameterizedTest.h similarity index 100% rename from Tests/UnitTests/Core/IParameterizedTest.h rename to Tests/UnitTests/Core/5/IParameterizedTest.h diff --git a/Tests/UnitTests/Core/ParameterDistributionTest.h b/Tests/UnitTests/Core/5/ParameterDistributionTest.h similarity index 100% rename from Tests/UnitTests/Core/ParameterDistributionTest.h rename to Tests/UnitTests/Core/5/ParameterDistributionTest.h diff --git a/Tests/UnitTests/Core/ParameterPoolTest.h b/Tests/UnitTests/Core/5/ParameterPoolTest.h similarity index 100% rename from Tests/UnitTests/Core/ParameterPoolTest.h rename to Tests/UnitTests/Core/5/ParameterPoolTest.h diff --git a/Tests/UnitTests/Core/RealParameterWrapperTest.h b/Tests/UnitTests/Core/5/RealParameterWrapperTest.h similarity index 100% rename from Tests/UnitTests/Core/RealParameterWrapperTest.h rename to Tests/UnitTests/Core/5/RealParameterWrapperTest.h diff --git a/Tests/UnitTests/Core/IntensityDataFunctionsTest.h b/Tests/UnitTests/Core/6/IntensityDataFunctionsTest.h similarity index 99% rename from Tests/UnitTests/Core/IntensityDataFunctionsTest.h rename to Tests/UnitTests/Core/6/IntensityDataFunctionsTest.h index 503dde8fdb219c56c131a7b8bfaea6d08ff6c7fe..d11415041cf53b12773d984e696e4fcc291180a1 100644 --- a/Tests/UnitTests/Core/IntensityDataFunctionsTest.h +++ b/Tests/UnitTests/Core/6/IntensityDataFunctionsTest.h @@ -3,7 +3,6 @@ -#include "gtest/gtest.h" #include "IntensityDataFunctions.h" #include "VariableBinAxis.h" diff --git a/Tests/UnitTests/Core/LLDataTest.h b/Tests/UnitTests/Core/6/LLDataTest.h similarity index 99% rename from Tests/UnitTests/Core/LLDataTest.h rename to Tests/UnitTests/Core/6/LLDataTest.h index fb5f4456a5d9a111f93bdec3da2f1aa9104e8112..81a88ad8236b2124f2c15a1510745c1c72f95901 100644 --- a/Tests/UnitTests/Core/LLDataTest.h +++ b/Tests/UnitTests/Core/6/LLDataTest.h @@ -6,7 +6,6 @@ #include "IMaterial.h" #include "Types.h" -#include "gtest/gtest.h" class LLDataTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/OutputDataIteratorTest.h b/Tests/UnitTests/Core/6/OutputDataIteratorTest.h similarity index 99% rename from Tests/UnitTests/Core/OutputDataIteratorTest.h rename to Tests/UnitTests/Core/6/OutputDataIteratorTest.h index 25e560587e0b3b06471b1549ca90f2743430f1c3..7c487eda07de602fa05d7a0a2497dac8deae6f0c 100644 --- a/Tests/UnitTests/Core/OutputDataIteratorTest.h +++ b/Tests/UnitTests/Core/6/OutputDataIteratorTest.h @@ -3,7 +3,6 @@ #include "OutputDataIterator.h" -#include "gtest/gtest.h" class OutputDataIteratorTest : public ::testing::Test { diff --git a/Tests/UnitTests/Core/OutputDataTest.h b/Tests/UnitTests/Core/6/OutputDataTest.h similarity index 98% rename from Tests/UnitTests/Core/OutputDataTest.h rename to Tests/UnitTests/Core/6/OutputDataTest.h index 3446cb7c47f2980bf6819fe91603d7d54e98aaa4..2efd9d4a57bb8b5db98c5d37591b9999d47f0392 100644 --- a/Tests/UnitTests/Core/OutputDataTest.h +++ b/Tests/UnitTests/Core/6/OutputDataTest.h @@ -9,14 +9,10 @@ #include "FixedBinAxis.h" #include "ThreadInfo.h" - -#include "gtest/gtest.h" - class OutputDataTest : public ::testing::Test { protected: OutputDataTest(); - virtual ~OutputDataTest(); OutputData<int> int_data_0d; OutputData<float> fl_data_1d; @@ -52,11 +48,6 @@ OutputDataTest::OutputDataTest() } -OutputDataTest::~OutputDataTest() -{ -} - - TEST_F(OutputDataTest, SingleElementAfterConstruction) { EXPECT_EQ((size_t)1, int_data_0d.getAllocatedSize()); @@ -81,11 +72,11 @@ TEST_F(OutputDataTest, DataInitialization) coordinates.push_back(3); EXPECT_DOUBLE_EQ((double)1143, db_data_3d[db_data_3d.toGlobalIndex(coordinates)]); - std::vector<int> coordinates2; coordinates2.push_back(10); coordinates2.push_back(5); - EXPECT_EQ(Eigen::Matrix2d::Identity(), matrix_data_2d[matrix_data_2d.toGlobalIndex(coordinates2)]); + EXPECT_EQ(Eigen::Matrix2d::Identity(), + matrix_data_2d[matrix_data_2d.toGlobalIndex(coordinates2)]); } TEST_F(OutputDataTest, isInitialized) @@ -443,7 +434,6 @@ TEST_F(OutputDataTest, GetAxisBin) //} - TEST_F(OutputDataTest, SetCleared) { db_data_3d.clear(); @@ -479,5 +469,4 @@ TEST_F(OutputDataTest, MixedTypeOperations) // -------------------------------------------- // | 0 1 2 3 4 5 6 7 8 9 | x - #endif // OUTPUTDATATEST_H diff --git a/Tests/UnitTests/Core/CMakeLists.txt b/Tests/UnitTests/Core/CMakeLists.txt index d849cf851b55aadf67ce2aa39fb55a3fa250f054..b4ba5d29986e4d2b8b03a61ac150e1b480ca685b 100644 --- a/Tests/UnitTests/Core/CMakeLists.txt +++ b/Tests/UnitTests/Core/CMakeLists.txt @@ -2,41 +2,20 @@ # CMakeLists.txt file for building and running unit tests ############################################################################ -enable_testing() - -file(GLOB include_files "*.h") - -add_executable( TestCore main.cpp ${include_files}) - -# dependencies -include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) -target_link_libraries(TestCore gtest) - include_directories( - ${Boost_INCLUDE_DIRS} ${BornAgainCore_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} ${GSL_INCLUDE_DIR} -) -target_link_libraries(TestCore - ${BornAgainCore_LIBRARY} - ${Boost_LIBRARIES} - ${GSL_LIBRARIES} -) - + ) if(BORNAGAIN_OPENMPI) include_directories(${MPI_INCLUDE_PATH}) - target_link_libraries(TestCore ${MPI_LIBRARIES}) endif() - -# to build executable right in lib directory to not to have problems with finding libBornAgainCore.dll under Windows -set_property(TARGET TestCore PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - -add_test( TestCore TestCore) # TestName ExeName - -# add execution of TestCore just after compilation -add_custom_command(TARGET TestCore POST_BUILD COMMAND TestCore) - - - +UNIT_TESTS(TestCore0 "0" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore1 "1" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore2 "2" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore3 "3" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore4 "4" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore5 "5" ${BornAgainCore_LIBRARY}) +UNIT_TESTS(TestCore6 "6" ${BornAgainCore_LIBRARY}) diff --git a/Tests/UnitTests/Core/MultiLayerTest.h b/Tests/UnitTests/Core/MultiLayerTest.h deleted file mode 100644 index 910f8f9431eb526f2f6230a24cd4d39976ee27e0..0000000000000000000000000000000000000000 --- a/Tests/UnitTests/Core/MultiLayerTest.h +++ /dev/null @@ -1,688 +0,0 @@ -#ifndef MULTILAYERTEST_H -#define MULTILAYERTEST_H - -#include "MultiLayer.h" -#include "BornAgainNamespace.h" -#include "Layer.h" -#include "HomogeneousMaterial.h" -#include "Materials.h" -#include "Units.h" -#include "ParticleLayout.h" - -class MultiLayerTest : public ::testing::Test -{ -protected: - MultiLayerTest(){} - virtual ~MultiLayerTest(){} -}; - -TEST_F(MultiLayerTest, BasicProperty) -{ - MultiLayer multi_layer; - //check default properties - EXPECT_EQ(BornAgain::MultiLayerType, multi_layer.getName()); - EXPECT_EQ(0.0, multi_layer.getCrossCorrLength()); - EXPECT_EQ(size_t(0), multi_layer.getNumberOfLayers()); - EXPECT_EQ(size_t(0), multi_layer.getNumberOfInterfaces()); - //set parameter - multi_layer.setParameterValue(BornAgain::CrossCorrelationLength, -2.54); - EXPECT_EQ(-2.54,multi_layer.getCrossCorrLength()); - - // adding layers - HomogeneousMaterial air ("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - Layer airLayer(air, 0*Units::nanometer); - Layer ironLayer(iron, 20*Units::nanometer); - Layer chromiumLayer(chromium, 40*Units::nanometer); - Layer stoneLayer(stone, 0*Units::nanometer); - multi_layer.addLayer(airLayer); - EXPECT_EQ(size_t(1), multi_layer.getNumberOfLayers()); - EXPECT_EQ(size_t(0), multi_layer.getNumberOfInterfaces()); - - multi_layer.addLayer(ironLayer); - multi_layer.addLayer(chromiumLayer); - multi_layer.addLayer(stoneLayer); - EXPECT_EQ(size_t(4), multi_layer.getNumberOfLayers()); - EXPECT_EQ(size_t(3), multi_layer.getNumberOfInterfaces()); -} - -TEST_F(MultiLayerTest, LayerThicknesses) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - - Layer airLayer(air, 0*Units::nanometer); - Layer ironLayer(iron, 20*Units::nanometer); - Layer chromiumLayer(chromium, 40*Units::nanometer); - Layer stoneLayer(stone, 0*Units::nanometer); - - mLayer.addLayer(airLayer); - mLayer.addLayer(ironLayer); - mLayer.addLayer(chromiumLayer); - mLayer.addLayer(stoneLayer); - - //check layer thickness - EXPECT_EQ(0.0, mLayer.getLayerThickness(0)); - EXPECT_EQ(20.0, mLayer.getLayerThickness(1)); - EXPECT_EQ(40.0, mLayer.getLayerThickness(2)); - EXPECT_EQ(0.0, mLayer.getLayerThickness(3)); - - //check bottomZ value - EXPECT_EQ(0.0, mLayer.getLayerBottomZ(0)); - EXPECT_EQ(-20.0, mLayer.getLayerBottomZ(1)); - EXPECT_EQ(-60.0, mLayer.getLayerBottomZ(2)); - EXPECT_EQ(-60.0, mLayer.getLayerBottomZ(3)); - - //set layer thickness - mLayer.setLayerThickness(1, 45.0); - EXPECT_EQ(45.0, mLayer.getLayerThickness(1)); - - EXPECT_EQ(0.0, mLayer.getLayerBottomZ(0)); - EXPECT_EQ(-45.0, mLayer.getLayerBottomZ(1)); - EXPECT_EQ(-85.0, mLayer.getLayerBottomZ(2)); - EXPECT_EQ(-85.0, mLayer.getLayerBottomZ(3)); -} - -TEST_F(MultiLayerTest, CheckAllLayers) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - - Layer airLayer(air, 0*Units::nanometer); - Layer ironLayer(iron, 20*Units::nanometer); - Layer chromiumLayer(chromium, 40*Units::nanometer); - Layer stoneLayer(stone, 0*Units::nanometer); - - mLayer.addLayer(airLayer); - mLayer.addLayer(ironLayer); - mLayer.addLayer(chromiumLayer); - mLayer.addLayer(stoneLayer); - - //check individual layer - const Layer * layer0 = mLayer.getLayer(0); - EXPECT_EQ(BornAgain::LayerType, layer0->getName()); - EXPECT_EQ(0, layer0->getThickness()); - EXPECT_EQ(airLayer.getMaterial()->getName(), layer0->getMaterial()->getName()); - - const Layer * layer1 = mLayer.getLayer(1); - EXPECT_EQ(BornAgain::LayerType, layer1->getName()); - EXPECT_EQ(20, layer1->getThickness()); - EXPECT_EQ(ironLayer.getMaterial()->getName(), layer1->getMaterial()->getName()); - - const Layer * layer2 = mLayer.getLayer(2); - EXPECT_EQ(BornAgain::LayerType, layer2->getName()); - EXPECT_EQ(40, layer2->getThickness()); - EXPECT_EQ(chromiumLayer.getMaterial()->getName(), layer2->getMaterial()->getName()); - - const Layer * layer3 = mLayer.getLayer(3); - EXPECT_EQ(BornAgain::LayerType, layer3->getName()); - EXPECT_EQ(0, layer3->getThickness()); - EXPECT_EQ(stoneLayer.getMaterial()->getName(), layer3->getMaterial()->getName()); -} - -TEST_F(MultiLayerTest, LayerInterfaces) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(chromium, 40*Units::nanometer); - Layer layer3(stone, 0*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - mLayer.addLayer(layer3); - - //check interfaces - const LayerInterface * interface0 = mLayer.getLayerInterface(0); - EXPECT_TRUE(nullptr!=interface0); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); - EXPECT_EQ(nullptr, interface0->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interface0->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface0->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface1 = mLayer.getLayerInterface(1); - EXPECT_TRUE(nullptr!=interface1); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); - EXPECT_EQ(nullptr, interface1->getRoughness()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface1->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface1->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface2 = mLayer.getLayerInterface(2); - EXPECT_TRUE(nullptr!=interface2); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); - EXPECT_EQ(nullptr, interface2->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface2->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interface2->getLayerBottom()->getMaterial()->getName()); - - //bottom interface - const LayerInterface * interfaceBottom = mLayer.getLayerBottomInterface(0); - EXPECT_TRUE(nullptr!=interfaceBottom); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); - EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interfaceBottom->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interfaceBottom->getLayerBottom()->getMaterial()->getName()); - - //top interface - const LayerInterface * interfaceTop = mLayer.getLayerTopInterface(3); - EXPECT_TRUE(nullptr!=interfaceTop); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); - EXPECT_EQ(nullptr, interfaceTop->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interfaceTop->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interfaceTop->getLayerBottom()->getMaterial()->getName()); - - //null interface - const LayerInterface * interfaceTopNull = mLayer.getLayerTopInterface(0); - EXPECT_TRUE(nullptr==interfaceTopNull); - - const LayerInterface * interfaceBottomNull = mLayer.getLayerBottomInterface(3); - EXPECT_TRUE(nullptr==interfaceBottomNull); -} - -TEST_F(MultiLayerTest, Clone) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium ("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(chromium, 40*Units::nanometer); - Layer layer3(stone, 0*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - mLayer.addLayer(layer3); - - MultiLayer * mLayerClone = mLayer.clone(); - - //check properties - EXPECT_EQ(BornAgain::MultiLayerType, mLayerClone->getName()); - EXPECT_EQ(0.0,mLayerClone->getCrossCorrLength()); - EXPECT_EQ(size_t(4), mLayerClone->getNumberOfLayers()); - EXPECT_EQ(size_t(3), mLayerClone->getNumberOfInterfaces()); - - //check layer thickness - EXPECT_EQ(layer0.getThickness(), mLayerClone->getLayerThickness(0)); - EXPECT_EQ(layer1.getThickness(), mLayerClone->getLayerThickness(1)); - EXPECT_EQ(layer2.getThickness(), mLayerClone->getLayerThickness(2)); - EXPECT_EQ(layer3.getThickness(), mLayerClone->getLayerThickness(3)); - - //check bottomZ value - EXPECT_EQ(mLayer.getLayerBottomZ(0), mLayerClone->getLayerBottomZ(0)); - EXPECT_EQ(mLayer.getLayerBottomZ(1), mLayerClone->getLayerBottomZ(1)); - EXPECT_EQ(mLayer.getLayerBottomZ(2), mLayerClone->getLayerBottomZ(2)); - EXPECT_EQ(mLayer.getLayerBottomZ(3), mLayerClone->getLayerBottomZ(3)); - - //check individual layer - const Layer * layerCopy0 = mLayerClone->getLayer(0); - EXPECT_EQ(layer0.getName(), layerCopy0->getName()); - EXPECT_EQ(layer0.getThickness(), layerCopy0->getThickness()); - EXPECT_EQ(layer0.getMaterial()->getName(), layerCopy0->getMaterial()->getName()); - - const Layer * layerCopy1 = mLayerClone->getLayer(1); - EXPECT_EQ(layer1.getName(), layerCopy1->getName()); - EXPECT_EQ(layer1.getThickness(), layerCopy1->getThickness()); - EXPECT_EQ(layer1.getMaterial()->getName(), layerCopy1->getMaterial()->getName()); - - const Layer * layerCopy2 = mLayerClone->getLayer(2); - EXPECT_EQ(layer2.getName(), layerCopy2->getName()); - EXPECT_EQ(layer2.getThickness(), layerCopy2->getThickness()); - EXPECT_EQ(layer2.getMaterial()->getName(), layerCopy2->getMaterial()->getName()); - - const Layer * layerCopy3 = mLayerClone->getLayer(3); - EXPECT_EQ(layer3.getName(), layerCopy3->getName()); - EXPECT_EQ(layer3.getThickness(), layerCopy3->getThickness()); - EXPECT_EQ(layer3.getMaterial()->getName(), layerCopy3->getMaterial()->getName()); - - //check interfaces - const LayerInterface * interface0 = mLayerClone->getLayerInterface(0); - EXPECT_TRUE(nullptr!=interface0); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); - EXPECT_EQ(nullptr, interface0->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interface0->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface0->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface1 = mLayerClone->getLayerInterface(1); - EXPECT_TRUE(nullptr!=interface1); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); - EXPECT_EQ(nullptr, interface1->getRoughness()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface1->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface1->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface2 = mLayerClone->getLayerInterface(2); - EXPECT_TRUE(nullptr!=interface2); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); - EXPECT_EQ(nullptr, interface2->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface2->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interface2->getLayerBottom()->getMaterial()->getName()); - - //top interface - const LayerInterface * interfaceBottom = mLayerClone->getLayerTopInterface(1); - EXPECT_TRUE(nullptr!=interfaceBottom); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); - EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interfaceBottom->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interfaceBottom->getLayerBottom()->getMaterial()->getName()); - - //Bottom interface - const LayerInterface * interfaceTop = mLayerClone->getLayerBottomInterface(2); - EXPECT_TRUE(nullptr!=interfaceTop); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); - EXPECT_EQ(nullptr, interfaceTop->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interfaceTop->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interfaceTop->getLayerBottom()->getMaterial()->getName()); - - //null interface - const LayerInterface * interfaceTopNull = mLayerClone->getLayerTopInterface(0); - EXPECT_TRUE(nullptr==interfaceTopNull); - - const LayerInterface * interfaceBottomNull = mLayerClone->getLayerBottomInterface(3); - EXPECT_TRUE(nullptr==interfaceBottomNull); - - delete mLayerClone; -} - -TEST_F(MultiLayerTest, CloneInvertB) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial chromium("chromium",0,3.68); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(chromium, 40*Units::nanometer); - Layer layer3(stone, 0*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - mLayer.addLayer(layer3); - - MultiLayer * mLayerClone = mLayer.cloneInvertB(); - - //check properties - EXPECT_EQ(BornAgain::MultiLayerType, mLayerClone->getName()); - EXPECT_EQ(0.0,mLayerClone->getCrossCorrLength()); - EXPECT_EQ(size_t(4), mLayerClone->getNumberOfLayers()); - EXPECT_EQ(size_t(3), mLayerClone->getNumberOfInterfaces()); - - //check layer thickness - EXPECT_EQ(layer0.getThickness(), mLayerClone->getLayerThickness(0)); - EXPECT_EQ(layer1.getThickness(), mLayerClone->getLayerThickness(1)); - EXPECT_EQ(layer2.getThickness(), mLayerClone->getLayerThickness(2)); - EXPECT_EQ(layer3.getThickness(), mLayerClone->getLayerThickness(3)); - - //check bottomZ value - EXPECT_EQ(mLayer.getLayerBottomZ(0), mLayerClone->getLayerBottomZ(0)); - EXPECT_EQ(mLayer.getLayerBottomZ(1), mLayerClone->getLayerBottomZ(1)); - EXPECT_EQ(mLayer.getLayerBottomZ(2), mLayerClone->getLayerBottomZ(2)); - EXPECT_EQ(mLayer.getLayerBottomZ(3), mLayerClone->getLayerBottomZ(3)); - - //check individual layer - const Layer * layerCopy0 = mLayerClone->getLayer(0); - EXPECT_EQ(layer0.getName(), layerCopy0->getName()); - EXPECT_EQ(layer0.getThickness(), layerCopy0->getThickness()); - EXPECT_EQ(layer0.getMaterial()->getName(), layerCopy0->getMaterial()->getName()); - - const Layer * layerCopy1 = mLayerClone->getLayer(1); - EXPECT_EQ(layer1.getName(), layerCopy1->getName()); - EXPECT_EQ(layer1.getThickness(), layerCopy1->getThickness()); - EXPECT_EQ(layer1.getMaterial()->getName(), layerCopy1->getMaterial()->getName()); - - const Layer * layerCopy2 = mLayerClone->getLayer(2); - EXPECT_EQ(layer2.getName(), layerCopy2->getName()); - EXPECT_EQ(layer2.getThickness(), layerCopy2->getThickness()); - EXPECT_EQ(layer2.getMaterial()->getName(), layerCopy2->getMaterial()->getName()); - - const Layer * layerCopy3 = mLayerClone->getLayer(3); - EXPECT_EQ(layer3.getName(), layerCopy3->getName()); - EXPECT_EQ(layer3.getThickness(), layerCopy3->getThickness()); - EXPECT_EQ(layer3.getMaterial()->getName(), layerCopy3->getMaterial()->getName()); - - //check interfaces - const LayerInterface * interface0 = mLayerClone->getLayerInterface(0); - EXPECT_TRUE(nullptr!=interface0); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface0->getName()); - EXPECT_EQ(nullptr, interface0->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interface0->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface0->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface1 = mLayerClone->getLayerInterface(1); - EXPECT_TRUE(nullptr!=interface1); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface1->getName()); - EXPECT_EQ(nullptr, interface1->getRoughness()); - EXPECT_EQ(layer1.getMaterial()->getName(), interface1->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface1->getLayerBottom()->getMaterial()->getName()); - - const LayerInterface * interface2 = mLayerClone->getLayerInterface(2); - EXPECT_TRUE(nullptr!=interface2); - EXPECT_EQ(BornAgain::LayerInterfaceType, interface2->getName()); - EXPECT_EQ(nullptr, interface2->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interface2->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interface2->getLayerBottom()->getMaterial()->getName()); - - //top interface - const LayerInterface * interfaceBottom = mLayerClone->getLayerTopInterface(1); - EXPECT_TRUE(nullptr!=interfaceBottom); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceBottom->getName()); - EXPECT_EQ(nullptr, interfaceBottom->getRoughness()); - EXPECT_EQ(layer0.getMaterial()->getName(), interfaceBottom->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer1.getMaterial()->getName(), interfaceBottom->getLayerBottom()->getMaterial()->getName()); - - //Bottom interface - const LayerInterface * interfaceTop = mLayerClone->getLayerBottomInterface(2); - EXPECT_TRUE(nullptr!=interfaceTop); - EXPECT_EQ(BornAgain::LayerInterfaceType, interfaceTop->getName()); - EXPECT_EQ(nullptr, interfaceTop->getRoughness()); - EXPECT_EQ(layer2.getMaterial()->getName(), interfaceTop->getLayerTop()->getMaterial()->getName()); - EXPECT_EQ(layer3.getMaterial()->getName(), interfaceTop->getLayerBottom()->getMaterial()->getName()); - - //null interface - const LayerInterface * interfaceTopNull = mLayerClone->getLayerTopInterface(0); - EXPECT_TRUE(nullptr==interfaceTopNull); - - const LayerInterface * interfaceBottomNull = mLayerClone->getLayerBottomInterface(3); - EXPECT_TRUE(nullptr==interfaceBottomNull); - - delete mLayerClone; -} - -TEST_F(MultiLayerTest, WithRoughness) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(stone, 0*Units::nanometer); - - //LayerRoughness(double sigma, double hurstParameter, double latteralCorrLength); - LayerRoughness lr(1.1, -7.3, 0.1); - mLayer.addLayer(layer0); - mLayer.addLayerWithTopRoughness(layer1,lr); - mLayer.addLayer(layer2); - - const LayerInterface * interface0 = mLayer.getLayerInterface(0); - const LayerInterface * interface1 = mLayer.getLayerInterface(1); - - const LayerRoughness * roughness0 = interface0->getRoughness(); - const LayerRoughness * roughness1 = interface1->getRoughness(); - - EXPECT_TRUE(roughness0); - EXPECT_EQ(nullptr, roughness1); - - EXPECT_EQ(1.1, roughness0->getSigma()); - EXPECT_EQ(-7.3, roughness0->getHurstParameter()); - EXPECT_EQ(0.1, roughness0->getLatteralCorrLength()); -} - -TEST_F(MultiLayerTest, CloneWithRoughness) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(stone, 0*Units::nanometer); - - //LayerRoughness(double sigma, double hurstParameter, double latteralCorrLength); - LayerRoughness lr0(-2.1, 7.3, -12.1); - LayerRoughness lr1(1.1, -7.3, 0.1); - - mLayer.addLayer(layer0); - mLayer.addLayerWithTopRoughness(layer1,lr0); - mLayer.addLayerWithTopRoughness(layer2,lr1); - - MultiLayer * mLayerClone = mLayer.clone(); - - const LayerInterface * interface0 = mLayerClone->getLayerInterface(0); - const LayerInterface * interface1 = mLayerClone->getLayerInterface(1); - const LayerRoughness * roughness0 = interface0->getRoughness(); - const LayerRoughness * roughness1 = interface1->getRoughness(); - - EXPECT_TRUE(roughness0); - EXPECT_TRUE(roughness1); - - EXPECT_EQ(-2.1, roughness0->getSigma()); - EXPECT_EQ(7.3, roughness0->getHurstParameter()); - EXPECT_EQ(-12.1, roughness0->getLatteralCorrLength()); - - EXPECT_EQ(1.1, roughness1->getSigma()); - EXPECT_EQ(-7.3, roughness1->getHurstParameter()); - EXPECT_EQ(0.1, roughness1->getLatteralCorrLength()); - - delete mLayerClone; -} - -TEST_F(MultiLayerTest, CloneInvertBWithRoughness) -{ - MultiLayer mLayer; - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(stone, 5*Units::nanometer); - - //LayerRoughness(double sigma, double hurstParameter, double latteralCorrLength); - LayerRoughness lr0(-2.1, 7.3, -12.1); - LayerRoughness lr1(1.1, -7.3, 0.1); - - mLayer.addLayer(layer0); - mLayer.addLayerWithTopRoughness(layer1,lr0); - mLayer.addLayerWithTopRoughness(layer2,lr1); - - MultiLayer * mLayerClone = mLayer.cloneInvertB(); - - const LayerInterface * interface0 = mLayerClone->getLayerInterface(0); - const LayerInterface * interface1 = mLayerClone->getLayerInterface(1); - const LayerRoughness * roughness0 = interface0->getRoughness(); - const LayerRoughness * roughness1 = interface1->getRoughness(); - - EXPECT_EQ(-2.1, roughness0->getSigma()); - EXPECT_EQ(7.3, roughness0->getHurstParameter()); - EXPECT_EQ(-12.1, roughness0->getLatteralCorrLength()); - - EXPECT_EQ(1.1, roughness1->getSigma()); - EXPECT_EQ(-7.3, roughness1->getHurstParameter()); - EXPECT_EQ(0.1, roughness1->getLatteralCorrLength()); - - delete mLayerClone; -} - -TEST_F(MultiLayerTest, WithMagneticMaterial) -{ - MultiLayer mLayer; - - kvector_t magnetic_field(0.0, 0.0, 0.0); - HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); - HomogeneousMagneticMaterial magMaterial1("MagMat1", -5.6, 10, magnetic_field); - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(stone, 30*Units::nanometer); - Layer layer3(magMaterial0, 20*Units::nanometer); - Layer layer4(magMaterial1, 0*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - EXPECT_FALSE(mLayer.containsMagneticMaterial()); - - mLayer.addLayer(layer3); - mLayer.addLayer(layer4); - EXPECT_TRUE(mLayer.containsMagneticMaterial()); -} - -TEST_F(MultiLayerTest, CloneWithMagneticMaterial) -{ - MultiLayer mLayer; - - kvector_t magnetic_field(1.1, 2.1, -5.1); - HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(magMaterial0, 20*Units::nanometer); - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - - MultiLayer * mLayerClone = mLayer.clone(); - EXPECT_TRUE(mLayerClone->containsMagneticMaterial()); - delete mLayerClone; -} - -TEST_F(MultiLayerTest, CloneInvertBMagneticMaterial) -{ - MultiLayer mLayer; - - kvector_t magnetic_field(0.0, 0.0, 0.0); - HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 20*Units::nanometer); - Layer layer2(magMaterial0, 20*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - - MultiLayer * mLayerClone = mLayer.cloneInvertB(); - EXPECT_TRUE(mLayerClone->containsMagneticMaterial()); - delete mLayerClone; -} - -TEST_F(MultiLayerTest, MultiLayerCompositeTest) -{ - MultiLayer mLayer; - - kvector_t magnetic_field(0.0, 0.0, 0.0); - HomogeneousMagneticMaterial magMaterial0("MagMat0", 6e-4, 2e-8, magnetic_field); - HomogeneousMagneticMaterial magMaterial1("MagMat1", -5.6, 10, magnetic_field); - - HomogeneousMaterial air("air",0,1.0); - HomogeneousMaterial iron("iron",0,1.51); - HomogeneousMaterial stone("stone",0,1.6); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(iron, 10*Units::nanometer); - Layer layer2(magMaterial0, 20*Units::nanometer); - Layer layer3(magMaterial1, 30*Units::nanometer); - Layer layer4(stone, 40*Units::nanometer); - - mLayer.addLayer(layer0); - mLayer.addLayer(layer1); - mLayer.addLayer(layer2); - mLayer.addLayer(layer3); - mLayer.addLayer(layer4); - - std::vector<Layer *> layer_buffer; - std::vector<LayerInterface *> interface_buffer; - int counter(0); - for(size_t index=0; index<mLayer.size();++index) - { - ISample *sample = mLayer[index]; - if(counter%2 == 1) - { - LayerInterface *interface = dynamic_cast<LayerInterface *>(sample); - EXPECT_TRUE(nullptr != interface); - interface_buffer.push_back(interface); - } else { - Layer *layer = dynamic_cast<Layer *>(sample); - EXPECT_TRUE(nullptr != layer); - layer_buffer.push_back(layer); - } - counter++; - } - EXPECT_EQ( size_t(5), layer_buffer.size()); - EXPECT_EQ( size_t(4), interface_buffer.size()); - for(size_t i=0; i<layer_buffer.size(); ++i) { - EXPECT_EQ( double(i*10), layer_buffer[i]->getThickness()); - } - for(size_t i=0; i<interface_buffer.size(); ++i) { - EXPECT_EQ( double((i+1)*10), interface_buffer[i]->getLayerBottom()->getThickness()); - } -} - -/* -index_0 ------------------ 0.0 -index_1 ------------------ -10.0 -index_2 ------------------ -30.0 -index_3 ------------------ -60.0 -index_4 -*/ - -TEST_F(MultiLayerTest, MultiLayerZtoIndex) -{ - MultiLayer multilayer; - HomogeneousMaterial air("air",0,1.0); - - Layer layer0(air, 0*Units::nanometer); - Layer layer1(air, 10*Units::nanometer); - Layer layer2(air, 20*Units::nanometer); - Layer layer3(air, 30*Units::nanometer); - Layer layer4(air, 0*Units::nanometer); - multilayer.addLayer(layer0); - multilayer.addLayer(layer1); - multilayer.addLayer(layer2); - multilayer.addLayer(layer3); - multilayer.addLayer(layer4); - - EXPECT_EQ(size_t(0), multilayer.zToLayerIndex(1.0)); - EXPECT_EQ(size_t(0), multilayer.zToLayerIndex(0.0)); - EXPECT_EQ(size_t(1), multilayer.zToLayerIndex(-1.0)); - EXPECT_EQ(size_t(1), multilayer.zToLayerIndex(-9.0)); - EXPECT_EQ(size_t(1), multilayer.zToLayerIndex(-10.0)); - EXPECT_EQ(size_t(2), multilayer.zToLayerIndex(-11.0)); - EXPECT_EQ(size_t(2), multilayer.zToLayerIndex(-30.0)); - EXPECT_EQ(size_t(3), multilayer.zToLayerIndex(-31.0)); - EXPECT_EQ(size_t(3), multilayer.zToLayerIndex(-60.0)); - EXPECT_EQ(size_t(4), multilayer.zToLayerIndex(-61.0)); -} - -#endif diff --git a/Tests/UnitTests/Core/TestCore.pro.user b/Tests/UnitTests/Core/TestCore.pro.user deleted file mode 100644 index 5243081e5d6ca209b171a4c0ed9e78f6a8dbb6f6..0000000000000000000000000000000000000000 --- a/Tests/UnitTests/Core/TestCore.pro.user +++ /dev/null @@ -1,63 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE QtCreatorProject> -<!-- Written by Qt Creator 2.6.2, 2013-02-15T11:16:44. --> -<qtcreator> - <data> - <variable>ProjectExplorer.Project.ActiveTarget</variable> - <value type="int">-1</value> - </data> - <data> - <variable>ProjectExplorer.Project.EditorSettings</variable> - <valuemap type="QVariantMap"> - <value type="bool" key="EditorConfiguration.AutoIndent">true</value> - <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value> - <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value> - <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> - <value type="QString" key="language">Cpp</value> - <valuemap type="QVariantMap" key="value"> - <value type="QString" key="CurrentPreferences">CppGlobal</value> - </valuemap> - </valuemap> - <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1"> - <value type="QString" key="language">QmlJS</value> - <valuemap type="QVariantMap" key="value"> - <value type="QString" key="CurrentPreferences">QmlJSGlobal</value> - </valuemap> - </valuemap> - <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value> - <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value> - <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> - <value type="int" key="EditorConfiguration.IndentSize">4</value> - <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value> - <value type="bool" key="EditorConfiguration.MouseNavigation">true</value> - <value type="int" key="EditorConfiguration.PaddingMode">1</value> - <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value> - <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value> - <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value> - <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value> - <value type="int" key="EditorConfiguration.TabSize">8</value> - <value type="bool" key="EditorConfiguration.UseGlobal">true</value> - <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value> - <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value> - <value type="bool" key="EditorConfiguration.cleanIndentation">true</value> - <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> - <value type="bool" key="EditorConfiguration.inEntireDocument">false</value> - </valuemap> - </data> - <data> - <variable>ProjectExplorer.Project.PluginSettings</variable> - <valuemap type="QVariantMap"/> - </data> - <data> - <variable>ProjectExplorer.Project.TargetCount</variable> - <value type="int">0</value> - </data> - <data> - <variable>ProjectExplorer.Project.Updater.EnvironmentId</variable> - <value type="QString">{3d0c9af8-0e2f-45cd-a5b0-a3c87e345188}</value> - </data> - <data> - <variable>ProjectExplorer.Project.Updater.FileVersion</variable> - <value type="int">12</value> - </data> -</qtcreator> diff --git a/Tests/UnitTests/Core/main.cpp b/Tests/UnitTests/Core/main.cpp deleted file mode 100644 index bc51821c600b50e3fc7defa1768c431935bc7cbe..0000000000000000000000000000000000000000 --- a/Tests/UnitTests/Core/main.cpp +++ /dev/null @@ -1,86 +0,0 @@ -#ifdef _MSC_VER -#define _VARIADIC_MAX 10 -#endif -#include "gtest/gtest.h" - -#include "AttLimitsTest.h" -#include "BeamTest.h" -#include "ChiSquaredModuleTest.h" -#include "CVectorTest.h" -#include "DetectorTest.h" -#include "DistributionsTest.h" -#include "DistributionHandlerTest.h" -#include "DWBASimulationTest.h" -#include "FormFactorTest.h" -#include "InstrumentTest.h" -#include "IParameterizedTest.h" -#include "KVectorTest.h" -#include "LayerTest.h" -#include "MaskTest.h" -#include "OutputDataIteratorTest.h" -#include "OutputDataTest.h" -#include "ParameterDistributionTest.h" -#include "ParameterPoolTest.h" -#include "ParticleTest.h" -#include "RealParameterWrapperTest.h" -#include "GISASSimulationTest.h" -#include "ThreadInfoTest.h" -#include "ParticleCompositionTest.h" -#include "LayerRoughnessTest.h" -#include "LLDataTest.h" -#include "TRangeTest.h" -#include "FTDistributionsTest.h" -#include "MultiLayerTest.h" -#include "ParticleLayoutTest.h" -#include "HomogeneousMaterialTest.h" -#include "HomogeneousMagneticMaterialTest.h" -#include "ScalarRTCoefficientsTest.h" -#include "SpecularMatrixTest.h" -#include "MatrixRTCoefficientsTest.h" -#include "ScalarSpecularInfoMapTest.h" -#include "MatrixSpecularInfoMapTest.h" -#include "FixedBinAxisTest.h" -#include "VariableBinAxisTest.h" -#include "ConstKBinAxisTest.h" -#include "CustomBinAxisTest.h" -#include "IntensityDataFunctionsTest.h" -#include "SpecularSimulationTest.h" -#include "ParticleCoreShellTest.h" -#include "ParameterDistributionTest.h" -#include "UtilsTest.h" -#include "CumulativeValueTest.h" -#include "Histogram1DTest.h" -#include "Histogram2DTest.h" -#include "PolygonTest.h" -#include "DetectorMaskTest.h" -#include "Shape2DTest.h" -#include "RectangularDetectorTest.h" -#include "SpecialFunctionsTest.h" -#include "PrecomputedTest.h" - - -struct ErrorStreamRedirect { - ErrorStreamRedirect( std::streambuf * new_buffer ) - : old( std::cerr.rdbuf( new_buffer ) ) - { } - - ~ErrorStreamRedirect( ) { - std::cerr.rdbuf( old ); - } - -private: - std::streambuf * old; -}; - -int main(int argc, char** argv) -{ - ::testing::InitGoogleTest(&argc, argv); - - // redirect std::cerr stream - std::stringstream oss; - ErrorStreamRedirect redirecter( oss.rdbuf() ); - (void)redirecter; - - // run all google tests - return RUN_ALL_TESTS(); -} diff --git a/Tests/UnitTests/Fit/CMakeLists.txt b/Tests/UnitTests/Fit/CMakeLists.txt index c940629cfcf9b1cd4322fbd44a26cc1ed40cdf67..035af85217f90f60248e5447f3ec1640e046258d 100644 --- a/Tests/UnitTests/Fit/CMakeLists.txt +++ b/Tests/UnitTests/Fit/CMakeLists.txt @@ -2,16 +2,6 @@ # CMakeLists.txt file for building and running unit tests ############################################################################ -enable_testing() - -file(GLOB include_files "*.h") - -add_executable( TestFit main.cpp ${include_files}) - -# dependencies -include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) -target_link_libraries(TestFit gtest) - include_directories( ${Boost_INCLUDE_DIRS} ${BornAgainCore_INCLUDE_DIRS} @@ -20,27 +10,8 @@ include_directories( ${GSL_INCLUDE_DIR} ) - -target_link_libraries(TestFit - ${BornAgainCore_LIBRARY} - ${BornAgainFit_LIBRARY} - ${Boost_LIBRARIES} - ${GSL_LIBRARIES} -) - if(BORNAGAIN_OPENMPI) include_directories(${MPI_INCLUDE_PATH}) - target_link_libraries(TestFit ${MPI_LIBRARIES}) endif() - -# to build executable right in lib directory to not to have problems with finding libBornAgainCore.dll under Windows -set_property(TARGET TestFit PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - -add_test( TestFit TestFit) # TestName ExeName - -# add execution of TestCore just after compilation -add_custom_command(TARGET TestFit POST_BUILD COMMAND TestFit) - - - +UNIT_TESTS(TestFit0 "." ${BornAgainFit_LIBRARY}) diff --git a/Tests/UnitTests/GUI/CMakeLists.txt b/Tests/UnitTests/GUI/CMakeLists.txt index f61b458acfa2ebb9b7571714b22a74da5a75ea5d..75481588ed9e0c89bf90fccf449501b89ad83516 100644 --- a/Tests/UnitTests/GUI/CMakeLists.txt +++ b/Tests/UnitTests/GUI/CMakeLists.txt @@ -1,11 +1,10 @@ -############################################################################ -# CMakeLists.txt file for building and running unit tests -############################################################################ +# Here we use QtTest, not gtest ... + if(POLICY CMP0020) -cmake_policy(SET CMP0020 NEW) + cmake_policy(SET CMP0020 NEW) endif() if(POLICY CMP0043) -cmake_policy(SET CMP0043 NEW) + cmake_policy(SET CMP0043 NEW) endif() enable_testing() @@ -25,15 +24,11 @@ include_directories( ) -# to build executable right in lib directory to not to have problems with finding libBornAgainCore.dll under Windows -#set_property(TARGET TestGUI PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - set(CMAKE_AUTOMOC ON) add_executable(TestGUI ${source_files} ${include_files}) target_link_libraries(TestGUI - ${BornAgainCore_LIBRARY} ${BornAgainGUI_LIBRARY} ) @@ -43,4 +38,3 @@ add_test( TestGUI TestGUI) # TestName ExeName # add execution of TestCore just after compilation add_custom_command(TARGET TestGUI POST_BUILD COMMAND TestGUI) - diff --git a/cmake/modules/SetUpLinux.cmake b/cmake/modules/SetUpLinux.cmake index 40de6e260419b2c9154985c09b54894609b559b1..600efaf2756d526241f2ccf7d0279a2d110d60f9 100644 --- a/cmake/modules/SetUpLinux.cmake +++ b/cmake/modules/SetUpLinux.cmake @@ -1,8 +1,6 @@ set(BORNAGAIN_ARCHITECTURE linux) set(BORNAGAIN_PLATFORM linux) - - execute_process(COMMAND uname -m OUTPUT_VARIABLE SYSCTL_OUTPUT) if(${SYSCTL_OUTPUT} MATCHES x86_64) message(STATUS "Found a 64bit system") diff --git a/cmake/modules/UnitTests.cmake b/cmake/modules/UnitTests.cmake new file mode 100644 index 0000000000000000000000000000000000000000..19bc0e30b1c0121be8bc6070b33db8d8e110f215 --- /dev/null +++ b/cmake/modules/UnitTests.cmake @@ -0,0 +1,51 @@ +################################################################################# +# +# BornAgain: simulate and fit scattering at grazing incidence +# +# @file cmake/modules/UnitTests +# @brief Implements function UNIT_TESTS(..) +# +# @homepage http://www.bornagainproject.org +# @license GNU General Public License v3 or higher (see COPYING) +# @copyright Forschungszentrum Jülich GmbH 2016 +# @authors Scientific Computing Group at MLZ Garching +# @authors J. Fisher, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke +# +################################################################################## + +# @brief Compile tests given as .h files in SUBDIR, link with LINK_LIB, and execute + +function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB) + enable_testing() + include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) + + file(GLOB INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIR}/*.h") + list(SORT INCLUDE_FILES) + + # Compose main program (C++ snippets plus #include's of test code from SUBDIR) + set(TMP "/* Generated by CMake. Do not edit. Do not put under version control. */\n") + file(READ "${CMAKE_MODULE_PATH}/unitTests.cpp.header" TMPTMP) + set(TMP "${TMP}\n${TMPTMP}\n") + foreach(FILE ${INCLUDE_FILES}) + set(TMP "${TMP}#include \"${FILE}\"\n") + endforeach() + file(READ "${CMAKE_MODULE_PATH}/unitTests.cpp.footer" TMPTMP) + set(TMP "${TMP}\n${TMPTMP}") + + set(TEST_SRC "_${TEST_NAME}.cpp") + file(WRITE ${TEST_SRC} "${TMP}") + + set(EXE ${TEST_NAME}) + add_executable(${EXE} ${TEST_SRC}) + target_link_libraries(${EXE} gtest ${LINK_LIB}) + + # Build executable in lib directory, + # to prevent problems with finding libBornAgainCore.dll under Windows + set_property(TARGET ${EXE} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) + + add_test(${TEST_NAME} ${EXE}) + + # Add execution of TestCore just after compilation + add_custom_command(TARGET ${TEST_NAME} POST_BUILD COMMAND ${EXE}) + +endfunction() diff --git a/Tests/UnitTests/Fit/main.cpp b/cmake/modules/unitTests.cpp.footer similarity index 71% rename from Tests/UnitTests/Fit/main.cpp rename to cmake/modules/unitTests.cpp.footer index 8169f87b356005bb1a13a873a3b6c84e9754e71e..8d131ad6d166a300f49b7cee44631e60fd1f6b30 100644 --- a/Tests/UnitTests/Fit/main.cpp +++ b/cmake/modules/unitTests.cpp.footer @@ -1,13 +1,4 @@ -#ifdef _MSC_VER -#define _VARIADIC_MAX 10 -#endif -#include "gtest/gtest.h" - -#include "FitParameterTest.h" -#include "FitParameterLinkedTest.h" -#include "MinimizerOptionsTest.h" -#include "FitObjectTest.h" - +/* From unitTests.cpp.footer: */ struct ErrorStreamRedirect { ErrorStreamRedirect( std::streambuf * new_buffer ) @@ -24,6 +15,7 @@ private: int main(int argc, char** argv) { + std::cout << "UnitTest::main ...\n"; ::testing::InitGoogleTest(&argc, argv); // redirect std::cerr stream @@ -34,4 +26,3 @@ int main(int argc, char** argv) // run all google tests return RUN_ALL_TESTS(); } - diff --git a/cmake/modules/unitTests.cpp.header b/cmake/modules/unitTests.cpp.header new file mode 100644 index 0000000000000000000000000000000000000000..2a00517bcbab88aca345843c066b1de4b32cf3aa --- /dev/null +++ b/cmake/modules/unitTests.cpp.header @@ -0,0 +1,8 @@ +/* From unitTests.cpp.header: */ + +#ifdef _MSC_VER +#define _VARIADIC_MAX 10 +#endif +#include <gtest/gtest.h> + +/* Autogenerated includes (rerun cmake to update): */