def test_observer_suspending(): rc = Context() rc.new_value(v=1) rc.new_expression('a', lambda env: env.v) rc.new_observer('b', lambda env: env.a) raises(Exception, rc.suspend, 'v') raises(Exception, rc.suspend, 'a') raises(Exception, rc.resume, 'v') raises(Exception, rc.resume, 'a') rc.suspend('b') rc.run() assert rc['a'].exec_count is 1 assert rc['b'].exec_count is 1 rc.resume('b') rc.run() assert rc['a'].exec_count is 1 assert rc['b'].exec_count is 1 rc.suspend('b') assert not rc['b'].invalidated rc.set_value(v=2) assert rc['b'].invalidated assert rc['a'].exec_count is 1 assert rc['b'].exec_count is 1 rc['b'].resume() rc.set_value(v=2.5) rc['b'].suspend() rc.run() assert rc['a'].exec_count is 2 assert rc['b'].exec_count is 2 rc.set_value(v=3) assert rc['a'].exec_count is 2 assert rc['b'].exec_count is 2 assert rc['b'].invalidated rc.set_value(v=4) rc['b'].resume() rc.run() assert rc['a'].exec_count is 3 assert rc['b'].exec_count is 3 assert not rc['b'].invalidated rc.suspend('b') rc.set_value(v=5) rc.resume('b', run=True) assert rc['a'].exec_count is 4 assert rc['b'].exec_count is 4