Ejemplo n.º 1
0
def test_signal_wait_a_while():
    sim = Simulator()
    signal = Signal().turn_off()
    log = []
    expectation = [3.0, 4.0]
    sim.add(wait_for, signal, expectation, 1.0, log)
    sim._schedule(3.0, signal.turn_on)
    sim.run()
    assert expectation == log
Ejemplo n.º 2
0
def test_schedule_multiple_events():
    ll = []
    sim = Simulator()
    sim._schedule(1.0, append, 1, ll)
    sim._schedule(0.7, append, 2, ll)
    sim._schedule(10.0, append, 3, ll)
    sim.run()
    assert ll == [2, 1, 3]
    assert sim.now() == 10.0
Ejemplo n.º 3
0
def test_schedule_recurring():
    ll = [0]

    def _append():
        if sim.now() <= 10.0:
            ll.append(ll[-1] + 1)
            sim._schedule(1.0, _append)
        else:
            sim.stop()

    sim = Simulator()
    sim._schedule(1.0, _append)
    sim.run()
    assert sim.now() == 11.0
    assert ll == list(range(11))
Ejemplo n.º 4
0
def sim_cancellable():
    ll = []
    sim = Simulator()
    id_event = []
    for n in [1, 3, 5]:
        id_event.append(sim._schedule(n, append, n, ll))
    return ll, sim, id_event
Ejemplo n.º 5
0
def test_signal_waiter_turning_off():
    def waiter_turning_off(signal: Signal, log: List[float]):
        signal.wait()
        signal.turn_off()
        log.append(now())

    sim = Simulator()
    signal = Signal().turn_off()
    log_time = []
    for n in range(5):
        sim.add(waiter_turning_off, signal, log_time)
    schedule_signal_on = [4.0, 9.0, 9.1, 200.0, 3000.0]
    for moment in schedule_signal_on:
        sim._schedule(moment, signal.turn_on)
    sim.run()
    assert schedule_signal_on == pytest.approx(log_time)
Ejemplo n.º 6
0
def test_schedule_functions():
    def f1(sim, results):
        res = f"1 + {sim.now()}"
        results.append(res)

    def f2(sim, results):
        res = f"2 + {sim.now()}"
        results.append(res)

    sim = Simulator()
    results = []
    sim._schedule(1, f1, sim, results)
    sim._schedule(2, f2, sim, results)
    sim._schedule(3, f1, sim, results)
    sim.run()
    assert ['1 + 1.0', '2 + 2.0', '1 + 3.0'] == results
Ejemplo n.º 7
0
def test_signal_toggling():
    sim = Simulator()
    signal = Signal().turn_off()
    log = []
    expectation = [3.0, 4.0, 10.0, 13.0, 14.0, 15.0]
    sim.add(wait_for, signal, expectation, 1.0, log)
    sim._schedule(3.0, signal.turn_on)
    sim._schedule(4.5, signal.turn_off)
    sim._schedule(10.0, signal.turn_on)
    sim._schedule(10.1, signal.turn_off)
    sim._schedule(13.0, signal.turn_on)
    sim.run()
    assert expectation == log
Ejemplo n.º 8
0
def test_progress_capture():
    log = []

    def capture(progress_min, _rt_remaining, mc):
        log.append(progress_min)

    a = 0
    b = 0

    def set_ab(new_a, new_b):
        nonlocal a, b
        a = new_a
        b = new_b

    def measure():
        return (a, b)

    sim = Simulator()
    sim.add(track_progress, measure, [10, 10], 10.0, capture)
    sim._schedule(15.0, set_ab, 2, 0)
    sim._schedule(25.0, set_ab, 4, 1)
    sim._schedule(35.0, set_ab, 4, 6)
    sim._schedule(45.0, set_ab, 5, 9)
    sim._schedule(55.0, set_ab, 10, 10)
    sim.run(100.0)

    assert sim.now() == pytest.approx(60.0)
    assert log == pytest.approx([0.0, 0.0, 0.1, 0.4, 0.5, 1.0])
Ejemplo n.º 9
0
def test_schedule_negative():
    sim = Simulator()
    ll = []
    with pytest.raises(ValueError):
        sim._schedule(-0.5, append, 1, ll)
Ejemplo n.º 10
0
def test_schedule_1_event():
    ll = []
    sim = Simulator()
    sim._schedule(1.0, append, 1, ll)
    sim.run()
    assert ll == [1]