From eb4b71fba6d1916fea82cba9477f865bd6002fcb Mon Sep 17 00:00:00 2001
From: Randolf Beerwerth <r.beerwerth@fz-juelich.de>
Date: Tue, 22 Sep 2020 16:39:51 +0200
Subject: [PATCH] Correct tests to account for correct k = 0 behavior

---
 .../Fresnel/MatrixRTCoefficients_v3Test.cpp   | 16 +++---
 .../Core/Fresnel/SpecularMagneticTest.cpp     | 50 ++++++++++++++-----
 2 files changed, 45 insertions(+), 21 deletions(-)

diff --git a/Tests/UnitTests/Core/Fresnel/MatrixRTCoefficients_v3Test.cpp b/Tests/UnitTests/Core/Fresnel/MatrixRTCoefficients_v3Test.cpp
index 1e4ee5076f7..bb5b146a6b3 100644
--- a/Tests/UnitTests/Core/Fresnel/MatrixRTCoefficients_v3Test.cpp
+++ b/Tests/UnitTests/Core/Fresnel/MatrixRTCoefficients_v3Test.cpp
@@ -10,7 +10,7 @@ protected:
 TEST_F(MatrixRTCoefficients_v3Test, T1plus)
 {
     Eigen::Vector2cd vector = mrtcDefault.T1plus();
-    EXPECT_EQ(complex_t(0.5, 0.0), vector(0));
+    EXPECT_EQ(0.0, vector(0));
     EXPECT_EQ(0.0, vector(1));
 }
 
@@ -18,13 +18,13 @@ TEST_F(MatrixRTCoefficients_v3Test, T1min)
 {
     Eigen::Vector2cd vector = mrtcDefault.T1min();
     EXPECT_EQ(0.0, vector(0));
-    EXPECT_EQ(complex_t(0.5, 0.0), vector(1));
+    EXPECT_EQ(complex_t(1.0, 0.0), vector(1));
 }
 
 TEST_F(MatrixRTCoefficients_v3Test, T2plus)
 {
     Eigen::Vector2cd vector = mrtcDefault.T2plus();
-    EXPECT_EQ(complex_t(0.5, 0.0), vector(0));
+    EXPECT_EQ(complex_t(1.0, 0.0), vector(0));
     EXPECT_EQ(0.0, vector(1));
 }
 
@@ -32,13 +32,13 @@ TEST_F(MatrixRTCoefficients_v3Test, T2min)
 {
     Eigen::Vector2cd vector = mrtcDefault.T2min();
     EXPECT_EQ(0.0, vector(0));
-    EXPECT_EQ(complex_t(0.5, 0.0), vector(1));
+    EXPECT_EQ(0.0, vector(1));
 }
 
 TEST_F(MatrixRTCoefficients_v3Test, R1plus)
 {
     Eigen::Vector2cd vector = mrtcDefault.R1plus();
-    EXPECT_EQ(complex_t(-0.5, 0.0), vector(0));
+    EXPECT_EQ(0.0, vector(0));
     EXPECT_EQ(0.0, vector(1));
 }
 
@@ -46,13 +46,13 @@ TEST_F(MatrixRTCoefficients_v3Test, R1min)
 {
     Eigen::Vector2cd vector = mrtcDefault.R1min();
     EXPECT_EQ(0.0, vector(0));
-    EXPECT_EQ(complex_t(-0.5, 0.0), vector(1));
+    EXPECT_EQ(complex_t(-1.0, 0.0), vector(1));
 }
 
 TEST_F(MatrixRTCoefficients_v3Test, R2plus)
 {
     Eigen::Vector2cd vector = mrtcDefault.R2plus();
-    EXPECT_EQ(complex_t(-0.5, 0.0), vector(0));
+    EXPECT_EQ(complex_t(-1.0, 0.0), vector(0));
     EXPECT_EQ(0.0, vector(1));
 }
 
@@ -60,7 +60,7 @@ TEST_F(MatrixRTCoefficients_v3Test, R2min)
 {
     Eigen::Vector2cd vector = mrtcDefault.R2min();
     EXPECT_EQ(0.0, vector(0));
-    EXPECT_EQ(complex_t(-0.5, 0.0), vector(1));
+    EXPECT_EQ(0.0, vector(1));
 }
 
 TEST_F(MatrixRTCoefficients_v3Test, getKz)
diff --git a/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp b/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
index 03a435c7cb3..218738e256f 100644
--- a/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
@@ -52,6 +52,33 @@ template <typename Strategy> void SpecularMagneticTest::test_degenerate()
     }
 }
 
+template <> void SpecularMagneticTest::test_degenerate<SpecularMagneticNewTanhStrategy>()
+{
+    kvector_t v;
+
+    Eigen::Vector2cd T1p{0.0, 0.0};
+    Eigen::Vector2cd T2p{1.0, 0.0};
+    Eigen::Vector2cd R1p{0.0, 0.0};
+    Eigen::Vector2cd R2p{0.0, 0.0};
+    Eigen::Vector2cd T1m{0.0, 1.0};
+    Eigen::Vector2cd T2m{0.0, 0.0};
+    Eigen::Vector2cd R1m{0.0, 0.0};
+    Eigen::Vector2cd R2m{0.0, 0.0};
+
+    auto sample = sample_degenerate();
+    auto result = std::make_unique<SpecularMagneticNewTanhStrategy>()->Execute(sample->slices(), v);
+    for (auto& coeff : result) {
+        EXPECT_NEAR_VECTOR2CD(coeff->T1plus(), T1p, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->T2plus(), T2p, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->T1min(), T1m, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->T2min(), T2m, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->R1plus(), R1p, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->R2plus(), R2p, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->R1min(), R1m, eps);
+        EXPECT_NEAR_VECTOR2CD(coeff->R2min(), R2m, eps);
+    }
+}
+
 template <typename Strategy>
 void SpecularMagneticTest::testZeroField(const kvector_t& k, const ProcessedSample& sample_scalar,
                                          const ProcessedSample& sample_zerofield)
@@ -67,22 +94,19 @@ void SpecularMagneticTest::testZeroField(const kvector_t& k, const ProcessedSamp
     for (size_t i = 0; i < coeffs_scalar.size(); ++i) {
         const ScalarRTCoefficients& RTScalar =
             *dynamic_cast<const ScalarRTCoefficients*>(coeffs_scalar[i].get());
-        Eigen::Vector2cd TPS = RTScalar.T1plus() + RTScalar.T2plus();
-        Eigen::Vector2cd RPS = RTScalar.R1plus() + RTScalar.R2plus();
-        Eigen::Vector2cd TMS = RTScalar.T1min() + RTScalar.T2min();
-        Eigen::Vector2cd RMS = RTScalar.R1min() + RTScalar.R2min();
 
         auto& RTMatrix =
             *dynamic_cast<const typename Strategy::coefficient_type*>(coeffs_zerofield[i].get());
-        Eigen::Vector2cd TPM = RTMatrix.T1plus() + RTMatrix.T2plus();
-        Eigen::Vector2cd RPM = RTMatrix.R1plus() + RTMatrix.R2plus();
-        Eigen::Vector2cd TMM = RTMatrix.T1min() + RTMatrix.T2min();
-        Eigen::Vector2cd RMM = RTMatrix.R1min() + RTMatrix.R2min();
-
-        EXPECT_NEAR_VECTOR2CD(TPS, TPM, eps);
-        EXPECT_NEAR_VECTOR2CD(RPS, RPM, eps);
-        EXPECT_NEAR_VECTOR2CD(TMS, TMM, eps);
-        EXPECT_NEAR_VECTOR2CD(RMS, RMM, eps);
+
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.T1plus(), RTScalar.T1plus(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.T2plus(), RTScalar.T2plus(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.R1plus(), RTScalar.R1plus(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.R2plus(), RTScalar.R2plus(), eps);
+
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.T1min(), RTScalar.T1min(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.T2min(), RTScalar.T2min(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.R1min(), RTScalar.R1min(), eps);
+        EXPECT_NEAR_VECTOR2CD(RTMatrix.R2min(), RTScalar.R2min(), eps);
 
         EXPECT_NEAR_VECTOR2CD(RTScalar.getKz(), RTMatrix.getKz(), eps);
     }
-- 
GitLab