From d4af885c2c80d110ba010b2e569dab305e1b5867 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Fri, 10 Apr 2020 13:53:42 +0200
Subject: [PATCH] Implement unit tests for SimulationElement

---
 .../SimulationElementTest.cpp                 | 143 ++++++++++++++++++
 1 file changed, 143 insertions(+)
 create mode 100644 Tests/UnitTests/Core/SimulationElement/SimulationElementTest.cpp

diff --git a/Tests/UnitTests/Core/SimulationElement/SimulationElementTest.cpp b/Tests/UnitTests/Core/SimulationElement/SimulationElementTest.cpp
new file mode 100644
index 00000000000..e9691468dc9
--- /dev/null
+++ b/Tests/UnitTests/Core/SimulationElement/SimulationElementTest.cpp
@@ -0,0 +1,143 @@
+#include "SimulationElement.h"
+#include "Bin.h"
+#include "SphericalDetector.h"
+#include "Units.h"
+#include "google_test.h"
+#include <memory>
+
+namespace
+{
+const Bin1D alpha_bin(0.0 * Units::deg, 1.0 * Units::deg);
+const Bin1D phi_bin(-0.5 * Units::deg, 0.5 * Units::deg);
+const double wavelength = 42.0;
+const double alpha_i = 0.2 * Units::deg;
+const double phi_i = 0.0 * Units::deg;
+} // namespace
+
+class SimulationElementTest : public ::testing::Test
+{
+public:
+    ~SimulationElementTest();
+
+    std::unique_ptr<IPixel> createPixel() const
+    {
+        return std::make_unique<SphericalPixel>(alpha_bin, phi_bin);
+    }
+
+    std::unique_ptr<SimulationElement> createElement() const
+    {
+        return std::make_unique<SimulationElement>(wavelength, alpha_i, phi_i, createPixel());
+    }
+};
+
+SimulationElementTest::~SimulationElementTest() = default;
+
+TEST_F(SimulationElementTest, basicConstructor)
+{
+    SimulationElement element(wavelength, alpha_i, phi_i, createPixel());
+    EXPECT_EQ(element.getWavelength(), wavelength);
+    EXPECT_EQ(element.getAlphaI(), alpha_i);
+    EXPECT_EQ(element.getPhiI(), phi_i);
+    EXPECT_EQ(element.getIntensity(), 0.0);
+    EXPECT_FLOAT_EQ(element.getAlphaMean(), 0.5 * Units::deg);
+    EXPECT_FLOAT_EQ(element.getPhiMean(), 0.0 * Units::deg);
+    EXPECT_EQ(element.getKi(), vecOfLambdaAlphaPhi(wavelength, alpha_i, phi_i));
+    EXPECT_EQ(element.getMeanKf(), createPixel()->getK(0.5, 0.5, wavelength));
+    EXPECT_FALSE(element.isSpecular());
+}
+
+TEST_F(SimulationElementTest, setIntensity)
+{
+    auto element = createElement();
+    EXPECT_EQ(element->getIntensity(), 0.0);
+    element->addIntensity(1.0);
+    EXPECT_EQ(element->getIntensity(), 1.0);
+    element->setIntensity(42.0);
+    EXPECT_EQ(element->getIntensity(), 42.0);
+}
+
+TEST_F(SimulationElementTest, copyConstructor)
+{
+    auto orig = createElement();
+    SimulationElement element(*orig);
+    EXPECT_EQ(orig->getWavelength(), element.getWavelength());
+    EXPECT_EQ(orig->getAlphaI(), element.getAlphaI());
+    EXPECT_EQ(orig->getPhiI(), element.getPhiI());
+    EXPECT_EQ(orig->getAlphaMean(), element.getAlphaMean());
+    EXPECT_EQ(orig->getPhiMean(), element.getPhiMean());
+    EXPECT_EQ(orig->getIntensity(), element.getIntensity());
+    EXPECT_EQ(orig->getKi(), element.getKi());
+    EXPECT_EQ(orig->getMeanKf(), element.getMeanKf());
+    EXPECT_EQ(orig->getQ(0.5, 0.5), element.getQ(0.5, 0.5));
+    EXPECT_EQ(orig->getIntegrationFactor(0.5, 0.5), element.getIntegrationFactor(0.5, 0.5));
+    EXPECT_EQ(orig->getSolidAngle(), element.getSolidAngle());
+    EXPECT_EQ(orig->getAlpha(0.5, 0.5), element.getAlpha(0.5, 0.5));
+    EXPECT_EQ(orig->getPhi(0.5, 0.5), element.getPhi(0.5, 0.5));
+    EXPECT_EQ(orig->isSpecular(), element.isSpecular());
+}
+
+TEST_F(SimulationElementTest, assignmentOperator)
+{
+    auto orig = createElement();
+    SimulationElement element(1.0, 1.0, 1.0, createPixel());
+    element = *orig;
+
+    EXPECT_EQ(orig->getWavelength(), element.getWavelength());
+    EXPECT_EQ(orig->getAlphaI(), element.getAlphaI());
+    EXPECT_EQ(orig->getPhiI(), element.getPhiI());
+    EXPECT_EQ(orig->getAlphaMean(), element.getAlphaMean());
+    EXPECT_EQ(orig->getPhiMean(), element.getPhiMean());
+    EXPECT_EQ(orig->getIntensity(), element.getIntensity());
+    EXPECT_EQ(orig->getKi(), element.getKi());
+    EXPECT_EQ(orig->getMeanKf(), element.getMeanKf());
+    EXPECT_EQ(orig->getQ(0.5, 0.5), element.getQ(0.5, 0.5));
+    EXPECT_EQ(orig->getIntegrationFactor(0.5, 0.5), element.getIntegrationFactor(0.5, 0.5));
+    EXPECT_EQ(orig->getSolidAngle(), element.getSolidAngle());
+    EXPECT_EQ(orig->getAlpha(0.5, 0.5), element.getAlpha(0.5, 0.5));
+    EXPECT_EQ(orig->getPhi(0.5, 0.5), element.getPhi(0.5, 0.5));
+    EXPECT_EQ(orig->isSpecular(), element.isSpecular());
+}
+
+TEST_F(SimulationElementTest, moveAssignment)
+{
+    SimulationElement for_move(1.0, 2.0, 3.0, createPixel());
+    SimulationElement orig(1.0, 2.0, 3.0, createPixel());
+    SimulationElement element = std::move(for_move);
+
+    EXPECT_EQ(orig.getWavelength(), element.getWavelength());
+    EXPECT_EQ(orig.getAlphaI(), element.getAlphaI());
+    EXPECT_EQ(orig.getPhiI(), element.getPhiI());
+    EXPECT_EQ(orig.getAlphaMean(), element.getAlphaMean());
+    EXPECT_EQ(orig.getPhiMean(), element.getPhiMean());
+    EXPECT_EQ(orig.getIntensity(), element.getIntensity());
+    EXPECT_EQ(orig.getKi(), element.getKi());
+    EXPECT_EQ(orig.getMeanKf(), element.getMeanKf());
+    EXPECT_EQ(orig.getQ(0.5, 0.5), element.getQ(0.5, 0.5));
+    EXPECT_EQ(orig.getIntegrationFactor(0.5, 0.5), element.getIntegrationFactor(0.5, 0.5));
+    EXPECT_EQ(orig.getSolidAngle(), element.getSolidAngle());
+    EXPECT_EQ(orig.getAlpha(0.5, 0.5), element.getAlpha(0.5, 0.5));
+    EXPECT_EQ(orig.getPhi(0.5, 0.5), element.getPhi(0.5, 0.5));
+    EXPECT_EQ(orig.isSpecular(), element.isSpecular());
+}
+
+TEST_F(SimulationElementTest, moveConstruction)
+{
+    SimulationElement for_move(1.0, 2.0, 3.0, createPixel());
+    SimulationElement orig(1.0, 2.0, 3.0, createPixel());
+    SimulationElement element(std::move(for_move));
+
+    EXPECT_EQ(orig.getWavelength(), element.getWavelength());
+    EXPECT_EQ(orig.getAlphaI(), element.getAlphaI());
+    EXPECT_EQ(orig.getPhiI(), element.getPhiI());
+    EXPECT_EQ(orig.getAlphaMean(), element.getAlphaMean());
+    EXPECT_EQ(orig.getPhiMean(), element.getPhiMean());
+    EXPECT_EQ(orig.getIntensity(), element.getIntensity());
+    EXPECT_EQ(orig.getKi(), element.getKi());
+    EXPECT_EQ(orig.getMeanKf(), element.getMeanKf());
+    EXPECT_EQ(orig.getQ(0.5, 0.5), element.getQ(0.5, 0.5));
+    EXPECT_EQ(orig.getIntegrationFactor(0.5, 0.5), element.getIntegrationFactor(0.5, 0.5));
+    EXPECT_EQ(orig.getSolidAngle(), element.getSolidAngle());
+    EXPECT_EQ(orig.getAlpha(0.5, 0.5), element.getAlpha(0.5, 0.5));
+    EXPECT_EQ(orig.getPhi(0.5, 0.5), element.getPhi(0.5, 0.5));
+    EXPECT_EQ(orig.isSpecular(), element.isSpecular());
+}
-- 
GitLab