spacesafeml-certification-b.../tests/test_trace_determinism.py

30 lines
1.3 KiB
Python

import json
from spacesafeml_certification_benchmark_and_.verification import VerificationEngine
from spacesafeml_certification_benchmark_and_.dsl import (
SafetyContract,
LocalCapabilities,
Scenario,
ResourceBudgets,
)
def test_trace_id_is_deterministic_and_sensitive_to_seed():
plan = {"name": "mission-x", "actions": ["go", "scan"]}
# Create a contract with a scenario that has an explicit seed
sc = Scenario(scenario_id="sc-1", deterministic_replay=True, seed=12345, description="seeded")
contract = SafetyContract(contract_id="c-1", local_capabilities=[LocalCapabilities(name="A")], scenarios=[sc])
engine = VerificationEngine()
tid1 = engine._trace_id(plan, contract, scenario_id="sc-1")
tid2 = engine._trace_id(plan, contract, scenario_id="sc-1")
assert tid1 == tid2, "Trace id should be stable for same plan + scenario seed"
# Changing the seed should change the trace id
sc2 = Scenario(scenario_id="sc-1", deterministic_replay=True, seed=54321, description="seeded-different")
contract2 = SafetyContract(contract_id="c-1", local_capabilities=[LocalCapabilities(name="A")], scenarios=[sc2])
tid3 = engine._trace_id(plan, contract2, scenario_id="sc-1")
assert tid3 != tid1, "Different scenario seed should change trace id"