"""Current eight-branch execution regression. The deleted high_stiffness_explicit_rk45.xml is not reconstructed or renamed. Per the user decision on 2026-09-12, exercise the corrected eight-branch JSON through the real XML/native path. This does not claim the former RK45 coverage. """ from __future__ import annotations import json import math import unittest from xml.etree import ElementTree as ET from app.main import run_system_xml_simulation from app.simulation.native_codegen.input import load_input from app.simulation.paths import CURRENT_MQL8_PROJECT_PATH class CurrentMql8SimulationTests(unittest.TestCase): def test_corrected_eight_branch_runs_its_complete_saved_configuration(self): original = CURRENT_MQL8_PROJECT_PATH.read_bytes() project = json.loads(original) settings = project["simulation"] xml, document = load_input(CURRENT_MQL8_PROJECT_PATH) self.assertEqual(len(document.components), len(project["nodes"])) self.assertEqual(len(document.connections), len(project["edges"])) self.assertEqual(ET.fromstring(xml).get("unitSystem"), "SI") result = run_system_xml_simulation(xml, cancel_check=lambda: False) self.assertTrue(result["success"], result["message"]) self.assertEqual(result["status"], "completed") self.assertFalse(result["partial"]) self.assertEqual(result["simulatedUntil"], settings["t_stop"]) integration = result["diagnostics"]["integration"] self.assertEqual(integration["method"], settings["method"]) self.assertEqual(integration["rtol"], 1e-8) self.assertEqual(result["diagnostics"]["native"]["backend"], "native-c") # The current case includes a mechanical transition over the complete 10 s. self.assertGreaterEqual(integration["totals"]["stateTransitionCount"], 1) self.assertGreaterEqual(integration["totals"]["solverStartCount"], 2) series = result["series"] times = series["time"] self.assertEqual(times[0], settings["t_start"]) self.assertEqual(times[-1], settings["t_stop"]) self.assertTrue(all(a < b for a, b in zip(times, times[1:]))) # Keep every requested output point, in addition to inserted event points. step = settings["step"] actual_grid = {round(t / step) for t in times if abs(t / step - round(t / step)) < 1e-8} expected_grid = set(range(round(settings["t_start"] / step), round(settings["t_stop"] / step) + 1)) self.assertTrue(expected_grid.issubset(actual_grid)) for key, values in series.items(): self.assertEqual(len(values), len(times), key) self.assertTrue(all(math.isfinite(value) for value in values), key) self.assertEqual(CURRENT_MQL8_PROJECT_PATH.read_bytes(), original) if __name__ == "__main__": unittest.main()