From 7471d064f20be3d1bbea86c2c19b549a3daae987 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Sat, 31 Jan 2026 12:22:32 -0500 Subject: [PATCH] =?UTF-8?q?Fix=20test=5Fanalytical=5Fpropagation=5Ftimeste?= =?UTF-8?q?ps:=20tolerance,=20division=20by=20zero,=20and=202=CF=80=20wrap?= =?UTF-8?q?ping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_analytical_propagation_timesteps.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/test_analytical_propagation_timesteps.cpp b/tests/test_analytical_propagation_timesteps.cpp index f02e12d..26254a8 100644 --- a/tests/test_analytical_propagation_timesteps.cpp +++ b/tests/test_analytical_propagation_timesteps.cpp @@ -94,13 +94,15 @@ TEST_CASE("Very small timestep - dt less than 1 second", "[analytical][timestep] INFO("Position change: " << pos_change << " m"); INFO("Velocity change: " << vel_change << " m/s"); - double expected_pos_change = vel_change * small_dt; + double v_before_mag = vec3_magnitude(vel_before); + double expected_pos_change = v_before_mag * small_dt; double pos_error = fabs(pos_change - expected_pos_change); - INFO("Expected position change: " << expected_pos_change << " m"); + INFO("Expected position change (v·dt): " << expected_pos_change << " m"); INFO("Position error: " << pos_error << " m"); + INFO("Relative position error: " << (pos_error / expected_pos_change * 100.0) << "%"); - REQUIRE(pos_change < VELOCITY_TOLERANCE * small_dt * 10.0); + REQUIRE(pos_error < VELOCITY_TOLERANCE * small_dt * 10.0); REQUIRE(vel_change < VELOCITY_TOLERANCE); destroy_simulation(sim); @@ -149,12 +151,15 @@ TEST_CASE("Accuracy vs timestep size relationship", "[analytical][timestep][accu INFO(" Expected error (phase): " << expected_pos_error << " m"); INFO(" Number of periods: " << num_periods); - if (expected_num_orbits > 0) { + if (expected_num_orbits > 0 && expected_pos_error > 1.0e-6) { double relative_error = pos_error / expected_pos_error; INFO(" Relative error: " << relative_error); REQUIRE(relative_error < 0.5); + } else if (expected_num_orbits > 0) { + INFO(" Expected error is zero, skipping relative error check"); + REQUIRE(pos_error < 1.0e-3); } } @@ -192,7 +197,8 @@ TEST_CASE("Mean anomaly accumulation over long propagation", "[analytical][times INFO("Expected final anomaly: " << expected_final_anomaly << " rad"); - double anomaly_error = fabs(final_true_anomaly - expected_final_anomaly); + double raw_error = fabs(final_true_anomaly - expected_final_anomaly); + double anomaly_error = fmin(raw_error, 2.0 * M_PI - raw_error); INFO("True anomaly error: " << anomaly_error << " rad (" << anomaly_error * 180.0 / M_PI << "°)");