Skip to content

Commit a797e77

Browse files
committed
test: Add test for motor movement callbacks
1 parent 33b5502 commit a797e77

1 file changed

Lines changed: 19 additions & 5 deletions

File tree

tests/test_simulation.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,12 @@ def test_init_async_monitor(async_monitor):
221221

222222

223223
@pytest.mark.parametrize("center", [-10, 0, 10])
224-
def test_monitor_readback(monitor, center):
224+
def test_monitor_readback(monitor, center, positioner):
225225
"""Test the readback method of SimMonitor."""
226226
motor_pos = 0
227-
monitor.device_manager.add_device(name="samx", value=motor_pos)
227+
samx = SimPositioner(name="samx", device_manager=monitor.device_manager)
228+
setattr(samx, "obj", samx) # Set obj attribute to itself for proxy lookup
229+
monitor.device_manager.devices["samx"] = samx
228230
for model_name in monitor.sim.get_models():
229231
monitor.sim.select_model(model_name)
230232
monitor.sim.params["noise_multipler"] = 10
@@ -234,17 +236,29 @@ def test_monitor_readback(monitor, center):
234236
elif "center" in monitor.sim.params:
235237
monitor.sim.params["center"] = center
236238
assert isinstance(monitor.read()[monitor.name]["value"], monitor.BIT_DEPTH)
237-
expected_value = _safeint(monitor.sim._model.eval(monitor.sim._model_params, x=motor_pos))
238-
print(expected_value, monitor.read()[monitor.name]["value"])
239+
expected_value = _safeint(
240+
monitor.sim._model.eval(monitor.sim._model_params, x=samx.read()["samx"]["value"])
241+
)
239242
tolerance = (
240243
monitor.sim.params["noise_multipler"] + 1
241244
) # due to ceiling in calculation, but maximum +1int
242245
assert np.isclose(
243246
monitor.read()[monitor.name]["value"],
244247
expected_value,
245-
atol=monitor.sim.params["noise_multipler"] + 1,
248+
atol=monitor.sim.params["noise_multipler"] + 2, # allow extra tolerance for ceiling
246249
)
247250

251+
# Test callback on motor motion
252+
_callback_bucket = []
253+
254+
def _callback(value, **kwargs):
255+
_callback_bucket.append(value)
256+
257+
monitor.subscribe(_callback, run=False)
258+
assert not _callback_bucket
259+
monitor.device_manager.devices["samx"].move(10).wait()
260+
assert len(_callback_bucket) > 0
261+
248262

249263
@pytest.mark.parametrize("amplitude, noise_multiplier", [(0, 1), (100, 10), (1000, 50)])
250264
def test_camera_readback(camera, amplitude, noise_multiplier):

0 commit comments

Comments
 (0)