Exemplo n.º 1
0
def test_event():
    """Multiple tasks can be blocked on an event."""
    event = Event()

    log = []

    async def event_waiter():
        log.append("event_waiter started")
        await event
        log.append("event_waiter finished")

    do(event_waiter())
    do(event_waiter())

    async def runtest():
        await loop.next_tick()
        log.append(f"Tasks blocked: {len(event)}; setting event")
        event.set()
        log.append(f"Tasks blocked: {len(event)}")
        await loop.next_tick()

    run(runtest())
    assert log == [
        "event_waiter started",
        "event_waiter started",
        "Tasks blocked: 2; setting event",
        "Tasks blocked: 0",
        "event_waiter finished",
        "event_waiter finished",
    ]
Exemplo n.º 2
0
async def spawn_explosions():
    """Continue spawning explosions."""
    while True:
        px = random.uniform(50, scene.width - 50)
        py = random.uniform(50, scene.height - 50)
        do(explode((px, py)))
        await clock.coro.sleep(random.uniform(0.5, 3))
Exemplo n.º 3
0
def test_interpolate(clock):
    """We can interpolate a value over multiple frames."""
    vs = []

    async def interpolator():
        async for v in clock.coro.interpolate(1.0, 2.0, duration=0.5):
            vs.append(v)

    do(interpolator())
    run(run_clock(clock, frames=10, framerate=5))
    assert vs == pytest.approx([1.4, 1.8, 2.0])
Exemplo n.º 4
0
def test_await_seconds(clock):
    """We can iterate over a sequence of frames, in seconds."""
    ts = []

    async def multi_frame_waiter():
        async for t in clock.coro.frames(seconds=1.0):
            ts.append(t)

    do(multi_frame_waiter())
    run(run_clock(clock, frames=10, framerate=5))
    assert ts == pytest.approx([0.2, 0.4, 0.6, 0.8, 1.0])
Exemplo n.º 5
0
def test_await_frames(clock):
    """We can iterate over a sequence of frames."""
    ts = []

    async def multi_frame_waiter():
        async for t in clock.coro.frames(frames=3):
            ts.append(t)

    do(multi_frame_waiter())
    run(run_clock(clock, frames=3, framerate=10))

    assert ts == pytest.approx([0.1, 0.2, 0.3])
Exemplo n.º 6
0
def test_schedule(clock):
    """We can schedule a coroutine."""
    v = None

    async def set_v(val):
        nonlocal v
        await clock.coro.sleep(0.1)
        v = val

    do(set_v(3))

    assert v is None
    run(run_clock(clock, frames=10))
    assert v == 3
Exemplo n.º 7
0
 async def start_cancel():
     task = do(multi_frame_waiter())
     await loop.next_tick()  # Allow task to start and block on clock
     clock.tick(0.1)
     await loop.next_tick()  # Allow task to run one loop
     task.cancel()
     await loop.next_tick()  # Allow task to cancel