From 66081f16d6506b53da390c74379eb8b1f8d05a5e Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Tue, 14 Mar 2023 14:56:38 +0100
Subject: [PATCH] test some unsupported scenarios

---
 tests/modules/testFluka.cpp | 59 +++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/tests/modules/testFluka.cpp b/tests/modules/testFluka.cpp
index 573332bb9..a26b36f49 100644
--- a/tests/modules/testFluka.cpp
+++ b/tests/modules/testFluka.cpp
@@ -77,6 +77,8 @@ TEST_CASE("FLUKA") {
     REQUIRE(flukaModel.getMaterialIndex(Code::Oxygen) > 0);
     REQUIRE(flukaModel.getMaterialIndex(Code::Nitrogen) > 0);
     REQUIRE(flukaModel.getMaterialIndex(Code::Argon) > 0);
+
+    // not initialized
     REQUIRE(flukaModel.getMaterialIndex(Code::Uranium) < 0);
   }
 
@@ -100,6 +102,21 @@ TEST_CASE("FLUKA") {
                                      target4mom) > 0_mb);
   }
 
+  SECTION("getCrossSection invalid") {
+    auto const projectileCode = GENERATE(Code::Electron, Code::Photon);
+    auto const targetCode = GENERATE(Code::Oxygen, Code::Hydrogen);
+
+    HEPEnergyType const p = 100_GeV;
+    auto const projectile4mom =
+        FourVector{calculate_total_energy(p, get_mass(projectileCode)),
+                   MomentumVector{cs, 0_eV, 0_eV, p}};
+    auto const target4mom =
+        FourVector{get_mass(targetCode), MomentumVector{cs, 0_eV, 0_eV, 0_eV}};
+
+    CHECK(flukaModel.getCrossSection(projectileCode, targetCode, projectile4mom,
+                                     target4mom) == CrossSectionType::zero());
+  }
+
   SECTION("doInteraction") {
     auto [env, csPtr, nodePtr] = setup::testing::setup_environment(Code::Proton);
     auto const& cs = *csPtr;
@@ -127,4 +144,46 @@ TEST_CASE("FLUKA") {
     CHECK((pSum.getNorm() - p) / p == Approx(0).margin(1e-4));
     CHECK(secViewPtr->getSize() > 1);
   }
+
+  SECTION("doInteraction-invalid-projectile") {
+    auto [env, csPtr, nodePtr] = setup::testing::setup_environment(Code::Proton);
+    auto const& cs = *csPtr;
+
+    auto const projectileCode = GENERATE(Code::Electron, Code::MuPlus);
+    auto const p = 50_GeV;
+    auto [stackPtr, secViewPtr] = setup::testing::setup_stack(
+        Code::Hydrogen, 1_GeV, (DummyEnvironment::BaseNodeType* const)nodePtr, *csPtr);
+    { [[maybe_unused]] auto const& dummy_StackPtr = stackPtr; }
+
+    auto const targetCode = Code::Oxygen;
+    auto const projectile4mom =
+        FourVector{calculate_total_energy(p, get_mass(projectileCode)),
+                   MomentumVector{cs, 0_eV, 0_eV, p}};
+    auto const target4mom =
+        FourVector{get_mass(targetCode), MomentumVector{cs, 0_eV, 0_eV, 0_eV}};
+
+    REQUIRE_THROWS(flukaModel.doInteraction(*secViewPtr, projectileCode, targetCode,
+                                            projectile4mom, target4mom));
+  }
+
+  SECTION("doInteraction-invalid-target") {
+    auto [env, csPtr, nodePtr] = setup::testing::setup_environment(Code::Proton);
+    auto const& cs = *csPtr;
+
+    auto const projectileCode = Code::AntiNeutron;
+    auto const p = 50_GeV;
+    auto [stackPtr, secViewPtr] = setup::testing::setup_stack(
+        Code::Hydrogen, 1_GeV, (DummyEnvironment::BaseNodeType* const)nodePtr, *csPtr);
+    { [[maybe_unused]] auto const& dummy_StackPtr = stackPtr; }
+
+    auto const targetCode = Code::Uranium;
+    auto const projectile4mom =
+        FourVector{calculate_total_energy(p, get_mass(projectileCode)),
+                   MomentumVector{cs, 0_eV, 0_eV, p}};
+    auto const target4mom =
+        FourVector{get_mass(targetCode), MomentumVector{cs, 0_eV, 0_eV, 0_eV}};
+
+    REQUIRE_THROWS(flukaModel.doInteraction(*secViewPtr, projectileCode, targetCode,
+                                            projectile4mom, target4mom));
+  }
 }
-- 
GitLab