From e23d8a3f9d339c5e265bbbf2a2c9d34bf4f58595 Mon Sep 17 00:00:00 2001 From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu> Date: Fri, 14 Sep 2018 14:52:58 +0200 Subject: [PATCH] unit test for Helix --- Framework/Geometry/testGeometry.cc | 56 ++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/Framework/Geometry/testGeometry.cc b/Framework/Geometry/testGeometry.cc index d453b8f7..469d2dec 100644 --- a/Framework/Geometry/testGeometry.cc +++ b/Framework/Geometry/testGeometry.cc @@ -14,6 +14,9 @@ using namespace corsika::geometry; using namespace corsika::units; +double constexpr absMargin = 1.0e-8; +; + TEST_CASE("transformations between CoordinateSystems") { CoordinateSystem rootCS; @@ -27,8 +30,10 @@ TEST_CASE("transformations between CoordinateSystems") { 0. * tesla}; Vector<magnetic_flux_density_d> v1(rootCS, components); - REQUIRE((p1.GetCoordinates() - coordinates).norm().magnitude() == Approx(0)); - REQUIRE((p1.GetCoordinates(rootCS) - coordinates).norm().magnitude() == Approx(0)); + REQUIRE((p1.GetCoordinates() - coordinates).norm().magnitude() == + Approx(0).margin(absMargin)); + REQUIRE((p1.GetCoordinates(rootCS) - coordinates).norm().magnitude() == + Approx(0).margin(absMargin)); SECTION("unconnected CoordinateSystems") { CoordinateSystem rootCS2; @@ -43,16 +48,16 @@ TEST_CASE("transformations between CoordinateSystems") { REQUIRE(translatedCS.GetReference() == &rootCS); REQUIRE((p1.GetCoordinates(translatedCS) + translationVector).norm().magnitude() == - Approx(0)); + Approx(0).margin(absMargin)); // Vectors are not subject to translations REQUIRE( (v1.GetComponents(rootCS) - v1.GetComponents(translatedCS)).norm().magnitude() == - Approx(0)); + Approx(0).margin(absMargin)); Point p2(translatedCS, {0_m, 0_m, 0_m}); REQUIRE(((p2 - p1).GetComponents() - translationVector).norm().magnitude() == - Approx(0)); + Approx(0).margin(absMargin)); } SECTION("multiple translations") { @@ -103,7 +108,7 @@ TEST_CASE("transformations between CoordinateSystems") { auto comp1 = v1.GetComponents(rootCS); auto comp3 = v1.GetComponents(combined); - REQUIRE((comp1 - comp3).norm().magnitude() == Approx(0)); + REQUIRE((comp1 - comp3).norm().magnitude() == Approx(0).margin(absMargin)); } } @@ -126,14 +131,37 @@ TEST_CASE("Trajectories") { Vector<SpeedType::dimension_type> v0(rootCS, {1_m / second, 0_m / second, 0_m / second}); - LineTrajectory lineTrajectory(r0, v0); - REQUIRE((lineTrajectory.GetPosition(2_s).GetCoordinates() - - corsika::QuantityVector<length_d>(2_m, 0_m, 0_m)) - .norm() - .magnitude() == Approx(0)); + LineTrajectory const lineTrajectory(r0, v0); + CHECK((lineTrajectory.GetPosition(2_s).GetCoordinates() - + corsika::QuantityVector<length_d>(2_m, 0_m, 0_m)) + .norm() + .magnitude() == Approx(0).margin(absMargin)); + + BaseTrajectory const* base = &lineTrajectory; + CHECK(lineTrajectory.GetPosition(2_s).GetCoordinates() == + base->GetPosition(2_s).GetCoordinates()); + } + + SECTION("Helix") { + Vector<SpeedType::dimension_type> const vPar( + rootCS, {0_m / second, 0_m / second, 4_m / second}), + vPerp(rootCS, {1_m / second, 0_m / second, 0_m / second}); + auto const omegaC = 2 * M_PI / 1_s; + + Helix const helix(r0, omegaC, vPar, vPerp); + + CHECK((helix.GetPosition(1_s).GetCoordinates() - + corsika::QuantityVector<length_d>(0_m, 0_m, 4_m)) + .norm() + .magnitude() == Approx(0).margin(absMargin)); + + CHECK((helix.GetPosition(0.25_s).GetCoordinates() - + corsika::QuantityVector<length_d>(-1_m / (2 * M_PI), -1_m / (2 * M_PI), 1_m)) + .norm() + .magnitude() == Approx(0).margin(absMargin)); - BaseTrajectory* base = &lineTrajectory; - REQUIRE(lineTrajectory.GetPosition(2_s).GetCoordinates() == - base->GetPosition(2_s).GetCoordinates()); + BaseTrajectory const* base = &helix; + CHECK(helix.GetPosition(1234_s).GetCoordinates() == + base->GetPosition(1234_s).GetCoordinates()); } } -- GitLab