Add VOACC takeoff safety regression coverage

Co-authored-by: Robin Dittrich <r.dittrich@niverplast.com>
This commit is contained in:
firestar5683
2026-08-25 15:37:25 -05:00
parent 5c4f6ff353
commit 60aa4aad49
2 changed files with 47 additions and 2 deletions
@@ -77,12 +77,26 @@ def test_follow_policy_never_relaxes_material_braking():
assert result.target == pytest.approx(-1.2)
def test_follow_policy_leaves_low_speed_vision_follow_uncapped():
result = run(lead(d_rel=8.0, v_lead=4.0), v_ego=2.0, raw=1.4)
def test_follow_policy_leaves_low_speed_vision_departure_uncapped():
# This is the range the old vision-only cap affected; below 4.5 m/s the
# longitudinal planner still has its independent weak-lead safety cap.
result = run(lead(d_rel=12.0, v_lead=6.0), v_ego=5.0, raw=1.4)
assert result.accel_cap is None
assert result.target == pytest.approx(1.4)
@pytest.mark.parametrize("v_ego", [0.0, 2.0, 4.5, 6.0, 7.9])
def test_follow_policy_low_speed_vision_never_relaxes_braking(v_ego):
result = run(
lead(d_rel=8.0, v_lead=max(v_ego - 0.8, 0.0), a_lead=-0.8),
v_ego=v_ego,
previous=0.3,
raw=-0.6,
)
assert result.target <= -0.6
def test_follow_policy_bypasses_post_departure_handoff():
result = run(lead(d_rel=46.0, v_lead=22.0), v_ego=20.0, previous=0.0, raw=0.6, post_departure=True)
assert result.target == pytest.approx(0.6)
@@ -1309,6 +1309,37 @@ def test_low_speed_weak_departure_accel_cap_softens_voacc_follow_pulse(model_ver
assert planner.output_a_target <= 0.22
@pytest.mark.parametrize("model_version", ["v11", "v12", "v13", "v14", "v15"])
@pytest.mark.parametrize("v_ego,v_lead,d_rel", [
(4.5, 3.7, 12.0),
(6.0, 5.2, 12.0),
(7.5, 6.7, 12.0),
])
def test_acc_mode_low_speed_vision_takeoff_never_relaxes_closing_lead(model_version, v_ego, v_lead, d_rel):
"""The takeoff change must not turn a closing vision lead into acceleration."""
CP = CarInterface.get_non_essential_params(CAR.HONDA_CIVIC)
planner = LongitudinalPlanner(CP, init_v=v_ego)
sm = make_sm(
v_ego,
desired_accel=1.4,
min_accel=-1.0,
experimental_mode=False,
tracking_lead=True,
lead_one=make_lead(
status=True, d_rel=d_rel, v_lead=v_lead, a_lead=0.0,
radar=False, model_prob=0.99, y_rel=0.0,
),
)
sm["starpilotPlan"].vCruise = v_ego + 10.0
for _ in range(3):
planner.update(sm, make_toggles(model_version))
assert planner.mode == "acc"
assert planner.output_a_target <= 0.0
assert not planner.output_should_stop
@pytest.mark.parametrize("model_version", ["v11", "v12", "v13", "v14", "v15"])
def test_acc_mode_pretracking_vision_far_slower_lead_starts_braking_before_tracking(model_version):
v_ego = 21.48