From 8b60051d65f94a58f887f5ef3776a35b1203bd60 Mon Sep 17 00:00:00 2001
From: ralfulrich <ralf.ulrich@kit.edu>
Date: Fri, 7 May 2021 19:03:00 +0200
Subject: [PATCH] futher tests, coverage

(cherry picked from commit 8bd09d1ceedb05d27da16d6e30ce2e275dd2634e)
---
 tests/framework/testGeometry.cpp |  2 ++
 tests/media/testEnvironment.cpp  | 40 +++++++++++++++++++++++++++-----
 tests/media/testMedium.cpp       |  2 --
 tests/media/testShowerAxis.cpp   | 10 ++++++--
 4 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/tests/framework/testGeometry.cpp b/tests/framework/testGeometry.cpp
index d9a01a3b2..e021d3014 100644
--- a/tests/framework/testGeometry.cpp
+++ b/tests/framework/testGeometry.cpp
@@ -334,6 +334,8 @@ TEST_CASE("Distance between points") {
   CHECK(distance(p5, p6) / 1_m == Approx(1));
 }
 
+TEST_CASE("Geometry Tree") {}
+
 TEST_CASE("Path") {
   // define a known CS
   CoordinateSystemPtr root = get_root_CoordinateSystem();
diff --git a/tests/media/testEnvironment.cpp b/tests/media/testEnvironment.cpp
index 3eab2cd6b..9a5cfab0e 100644
--- a/tests/media/testEnvironment.cpp
+++ b/tests/media/testEnvironment.cpp
@@ -38,10 +38,43 @@ CoordinateSystemPtr const& gCS = get_root_CoordinateSystem();
 
 Point const gOrigin(gCS, {0_m, 0_m, 0_m});
 
+TEST_CASE("VolumeTree") {
+  logging::set_level(logging::level::info);
+  Environment<IEmpty> env;
+  auto& universe = *(env.getUniverse());
+  auto world = Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 0_m}, 150_km);
+  // volume cut partly by "world"
+  auto vol1 =
+      Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 140_km}, 20_km);
+  // partly overlap with "vol1"
+  auto vol2 = Environment<IEmpty>::createNode<Sphere>(Point{gCS, 0_m, 0_m, 120_km}, 5_km);
+  vol1->excludeOverlapWith(vol2);
+  world->addChild(std::move(vol1));
+  world->addChild(std::move(vol2));
+
+  // in world
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_m, 0_m))->getVolume())
+            .getRadius() == 150_km);
+  // in vol1
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_m, 149_km))->getVolume())
+            .getRadius() == 20_km);
+  // outside world, in universe
+  CHECK(world->getContainingNode(Point(gCS, 0_m, 151_km, 0_m)) == nullptr);
+  // in vol2
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_km, 119_km))->getVolume())
+            .getRadius() == 5_km);
+  CHECK(dynamic_cast<Sphere const&>(
+            world->getContainingNode(Point(gCS, 0_m, 0_km, 121_km))->getVolume())
+            .getRadius() == 5_km);
+  universe.addChild(std::move(world));
+}
+
 TEST_CASE("HomogeneousMedium") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -54,7 +87,6 @@ TEST_CASE("HomogeneousMedium") {
 TEST_CASE("FlatExponential") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -117,7 +149,6 @@ TEST_CASE("FlatExponential") {
 TEST_CASE("SlidingPlanarExponential") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   NuclearComposition const protonComposition(std::vector<Code>{Code::Proton},
                                              std::vector<float>{1.f});
@@ -178,7 +209,6 @@ struct Exponential {
 TEST_CASE("InhomogeneousMedium") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   Vector direction(gCS, QuantityVector<dimensionless_d>(1, 0, 0));
 
@@ -227,7 +257,6 @@ TEST_CASE("InhomogeneousMedium") {
 TEST_CASE("LayeredSphericalAtmosphereBuilder") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   LayeredSphericalAtmosphereBuilder builder =
       make_layered_spherical_atmosphere_builder<>::create(gOrigin,
@@ -267,7 +296,6 @@ TEST_CASE("LayeredSphericalAtmosphereBuilder") {
 TEST_CASE("LayeredSphericalAtmosphereBuilder w/ magnetic field") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   // setup our interface types
   using ModelInterface = IMagneticFieldModel<IMediumModel>;
diff --git a/tests/media/testMedium.cpp b/tests/media/testMedium.cpp
index edcba45fc..709185d18 100644
--- a/tests/media/testMedium.cpp
+++ b/tests/media/testMedium.cpp
@@ -27,7 +27,6 @@ using namespace corsika;
 TEST_CASE("MediumProperties") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   // test access of medium properties via enum and class types
 
@@ -45,7 +44,6 @@ TEST_CASE("MediumProperties") {
 TEST_CASE("MediumPropertyModel w/ Homogeneous") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   CoordinateSystemPtr gCS = get_root_CoordinateSystem();
 
diff --git a/tests/media/testShowerAxis.cpp b/tests/media/testShowerAxis.cpp
index 19d7635ae..9378d9b41 100644
--- a/tests/media/testShowerAxis.cpp
+++ b/tests/media/testShowerAxis.cpp
@@ -48,7 +48,6 @@ auto setupEnvironment(Code vTargetCode) {
 TEST_CASE("Homogeneous Density") {
 
   logging::set_level(logging::level::info);
-  corsika_logger->set_pattern("[%n:%^%-8l%$] custom pattern: %v");
 
   auto [env, csPtr, nodePtr] = setupEnvironment(Code::Nitrogen);
   auto const& cs = *csPtr;
@@ -62,7 +61,7 @@ TEST_CASE("Homogeneous Density") {
   Point const injectionPos = showerCore + Vector<dimensionless_d>{cs, {0, 0, 1}} * t;
 
   ShowerAxis const showerAxis{injectionPos, (showerCore - injectionPos), *env,
-                              true, // -> do not throw exceptions
+                              true, // -> throw exceptions
                               20};  // -> number of bins
 
   CHECK(showerAxis.getSteplength() == 500_m);
@@ -83,4 +82,11 @@ TEST_CASE("Homogeneous Density") {
 
   CHECK_THROWS(showerAxis.getX(-1_m));
   CHECK_THROWS(showerAxis.getX((injectionPos - showerCore).getNorm() + 1_m));
+
+  ShowerAxis const showerAxisNoThrow{injectionPos, (showerCore - injectionPos), *env,
+                                     false, // -> do not throw exceptions
+                                     20};   // -> number of bins
+  CHECK(showerAxisNoThrow.getX(-1_m) == showerAxis.getMinimumX());
+  CHECK(showerAxisNoThrow.getX((injectionPos - showerCore).getNorm() + 1_m) ==
+        showerAxis.getMaximumX());
 }
-- 
GitLab