fix: restore simulated pressure model and fast prescan

This commit is contained in:
rangang
2026-08-04 10:04:48 +08:00
parent 9185591a6d
commit 8d6534b96e
3 changed files with 67 additions and 17 deletions
+35 -13
View File
@@ -1,7 +1,7 @@
import importlib.util
import time
import unittest
from pathlib import Path
from unittest.mock import patch
MODULE_PATH = Path(__file__).resolve().parents[1] / "core" / "simulated_device.py"
@@ -22,18 +22,40 @@ class SimulatedDeviceTests(unittest.TestCase):
self.assertFalse(device.connected)
def test_pressure_model_responds_to_valve_position(self):
device = SIMULATED.SimulatedDevice()
device.connect()
device.set_motor_position(0)
time.sleep(0.02)
open_pressure = device.get_pressure()
device.set_motor_position(1000)
time.sleep(0.02)
closed_pressure = device.get_pressure()
self.assertGreaterEqual(open_pressure, 0.0)
self.assertGreaterEqual(closed_pressure, 0.0)
self.assertEqual(device.read_current_position(), 1000.0)
device.disconnect()
class FakeClock:
def __init__(self):
self.now = 0.0
def monotonic(self):
return self.now
def advance(self, duration):
self.now += duration
clock = FakeClock()
with patch.object(SIMULATED.time, "monotonic", clock.monotonic):
device = SIMULATED.SimulatedDevice()
device.connect()
def settled_pressure(position):
device.set_motor_position(position)
pressure = None
for _ in range(1200):
clock.advance(0.1)
pressure = device.get_pressure()
return pressure
open_pressure = settled_pressure(0)
half_open_pressure = settled_pressure(500)
closed_pressure = settled_pressure(1000)
self.assertAlmostEqual(open_pressure, 10.0, delta=0.1)
self.assertAlmostEqual(half_open_pressure, 205.0, delta=0.1)
self.assertAlmostEqual(closed_pressure, 400.0, delta=0.1)
self.assertGreater(closed_pressure, half_open_pressure)
self.assertGreater(half_open_pressure, open_pressure)
self.assertEqual(device.read_current_position(), 1000.0)
device.disconnect()
if __name__ == "__main__":