fix: restore simulated pressure model and fast prescan
This commit is contained in:
@@ -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__":
|
||||
|
||||
Reference in New Issue
Block a user