mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-01 03:43:46 +08:00
Remember custom personality graphs and correct default resets
This commit is contained in:
committed by
firestar5683
parent
a51205e302
commit
ab6c97fef8
@@ -38,7 +38,7 @@ from openpilot.starpilot.common.longitudinal_personality_profiles import (
|
||||
def test_document_is_versioned_disabled_and_declares_exact_axes_and_units():
|
||||
document = profile_document(default_personality_profiles(False), enabled=False)
|
||||
|
||||
assert document["schemaVersion"] == PROFILE_SCHEMA_VERSION == 2
|
||||
assert document["schemaVersion"] == PROFILE_SCHEMA_VERSION == 3
|
||||
assert document["enabled"] is False
|
||||
assert document["axes"] == {
|
||||
"acceleration": {
|
||||
@@ -455,7 +455,7 @@ def test_following_custom_initialisation_uses_effective_legacy_curve():
|
||||
|
||||
|
||||
def test_v2_uses_one_shared_ten_mph_custom_axis():
|
||||
assert PROFILE_SCHEMA_VERSION == 2
|
||||
assert PROFILE_SCHEMA_VERSION == 3
|
||||
expected = tuple(range(0, 91, 10))
|
||||
assert ACCELERATION_SPEEDS_MPH == expected
|
||||
assert BRAKING_SPEEDS_MPH == expected
|
||||
@@ -537,7 +537,7 @@ def test_exact_v1_document_migrates_whole_or_not_at_all():
|
||||
|
||||
migrated = lpp.migrate_profile_document(legacy)
|
||||
assert migrated is not None
|
||||
assert migrated["schemaVersion"] == 2
|
||||
assert migrated["schemaVersion"] == PROFILE_SCHEMA_VERSION
|
||||
assert migrated["enabled"] is True
|
||||
migrated_acceleration = migrated["profiles"]["aggressive"]["acceleration"]
|
||||
assert migrated_acceleration["preset"] == "custom"
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import json
|
||||
from copy import deepcopy
|
||||
|
||||
import pytest
|
||||
|
||||
from openpilot.starpilot.common import longitudinal_personality_profiles as lpp
|
||||
|
||||
|
||||
@pytest.mark.parametrize("personality", lpp.PERSONALITY_IDS)
|
||||
@pytest.mark.parametrize("category,preset", [("acceleration", "eco"), ("braking", "sport"), ("following", "far")])
|
||||
def test_custom_survives_preset_changes_serialization_and_reload(personality, category, preset):
|
||||
profiles = lpp.default_personality_profiles(False)
|
||||
curve = [round(1.0 + i * 0.05, 4) for i in range(10)]
|
||||
profiles = lpp.update_personality_profile(profiles, personality, category, "custom", curve, False)
|
||||
other_profiles = deepcopy(profiles)
|
||||
for selected in (preset, "dom_default", preset):
|
||||
profiles = lpp.update_personality_profile(profiles, personality, category, selected, [], False)
|
||||
profiles = lpp.load_personality_profiles(lpp.serialize_personality_profiles(profiles, False, enabled=True), False)
|
||||
assert profiles[personality][category] == {"preset": selected, "curve": curve}
|
||||
if selected != "dom_default":
|
||||
assert lpp.category_curve(category, profiles[personality][category], False) == lpp.category_curve(category, {"preset": selected, "curve": []}, False)
|
||||
seed = lpp.initial_custom_curve(category, profiles[personality][category], False, False, legacy_curve=[2.0] * 10)
|
||||
profiles = lpp.update_personality_profile(profiles, personality, category, "custom", seed, False)
|
||||
assert profiles == other_profiles
|
||||
|
||||
|
||||
def test_switching_preserves_high_points_and_legacy_runtime_only_for_custom():
|
||||
profiles = lpp.default_personality_profiles(False)
|
||||
saved = {"preset": "custom", "curve": [4.0] * 10, "legacyCurve": [5.0] * 7}
|
||||
profiles["aggressive"]["acceleration"] = deepcopy(saved)
|
||||
profiles = lpp.update_personality_profile(profiles, "aggressive", "acceleration", "eco", [], False)
|
||||
assert profiles["aggressive"]["acceleration"]["legacyCurve"] == saved["legacyCurve"]
|
||||
assert lpp.interpolate_category_curve("acceleration", 12, profiles["aggressive"]["acceleration"], False) == lpp.interpolate_category_curve("acceleration", 12, {"preset": "eco", "curve": []}, False)
|
||||
profiles = lpp.update_personality_profile(profiles, "aggressive", "acceleration", "custom", [4.0] * 10, False)
|
||||
assert profiles["aggressive"]["acceleration"] == saved
|
||||
|
||||
|
||||
def test_v2_load_is_lossless_and_next_write_uses_new_version():
|
||||
document = lpp.profile_document(lpp.default_personality_profiles(False), enabled=True)
|
||||
document["schemaVersion"] = 2
|
||||
document["profiles"]["standard"]["acceleration"] = {"preset": "custom", "curve": [4.0] * 10}
|
||||
loaded = lpp.strict_profile_document(document)
|
||||
assert loaded is not None
|
||||
assert loaded["profiles"] == document["profiles"]
|
||||
assert json.loads(lpp.serialize_personality_profiles(loaded["profiles"], False, enabled=True))["schemaVersion"] > 2
|
||||
document["profiles"]["standard"]["acceleration"]["preset"] = "eco"
|
||||
assert lpp.strict_profile_document(document) is None # v2 never allowed dormant curves
|
||||
|
||||
|
||||
@pytest.mark.parametrize("curve", [[True] * 10, [float("nan")] * 10, [1.0] * 9, [7.0] * 10])
|
||||
def test_dormant_curves_are_validated(curve):
|
||||
profiles = lpp.default_personality_profiles(False)
|
||||
profiles["standard"]["acceleration"] = {"preset": "eco", "curve": curve}
|
||||
assert lpp.strict_profile_document(lpp.profile_document(profiles, enabled=True)) is None
|
||||
Reference in New Issue
Block a user