@@ -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 )])
250264def test_camera_readback (camera , amplitude , noise_multiplier ):
0 commit comments