test: cover radar radial calibration guard

Issue: #485
User-Visible: no
This commit is contained in:
Matysh
2026-09-09 03:54:42 +03:00
parent 02289aee44
commit 3f0b4aeeea
2 changed files with 22 additions and 0 deletions
+9
View File
@@ -58,6 +58,15 @@ test('two-point calibration exposes an ambiguous mirror instead of choosing sile
], 5), /ambiguous_sources/);
});
test('two-point calibration rejects a reference with a hidden radial mismatch', () => {
const mount = [.5, .5];
const plan = (x, y) => [.5 + x / 1200, .5 - y / 1200];
assert.throws(() => solveRadarTwoPoint(mount, [[100, 0], [0, 100]], [
plan(125, 0), plan(0, 100),
], 5), /invalid_selection/,
'a 25 cm radial mismatch must fail even though RMS and per-reference error limits pass');
});
test('capture median rejects one sample more than 15cm away', () => {
assert.deepEqual(radarMedianSample([[100, 200], [102, 198], [101, 201]]), [101, 200]);
assert.throws(() => radarMedianSample([[100, 200], [101, 199], [140, 240]]), /bad_fit/);
+13
View File
@@ -105,6 +105,19 @@ def test_two_point_fit_rejects_ambiguous_mirror_candidates():
[plan(0, 80), plan(0, 80)], 5)
def test_two_point_fit_rejects_hidden_radial_mismatch():
mount = (.5, .5)
def plan(x, y):
return .5 + x / 1200, .5 - y / 1200
# The 25 cm error passes RMS (17.68 cm) and per-reference (30 cm)
# thresholds. The independent radial-consistency guard must reject it.
with pytest.raises(ValueError, match="invalid_selection"):
solve_two_point(mount, [(100, 0), (0, 100)],
[plan(125, 0), plan(0, 100)], 5)
def test_projection_rejects_nonfinite_and_over_100m():
mount = {"x": .5, "y": .5, "heading_deg": 0}
calibration = {"cell_cm": 5, "mirror": False}