예제 #1
0
async def test_selector_order():
    source_1 = make_async_gen([1, 2, 3], step_delay=0.2)
    source_2 = make_async_gen([4, 5, 6], initial_delay=0.1, step_delay=0.2)
    expected = [1, 4, 2, 5, 3, 6]

    async for value in Selector(source_1(), source_2()):
        assert value == expected.pop(0)
예제 #2
0
async def test_selector_blocking():
    source_1 = make_async_gen([1, 2, 3], step_delay=1)
    source_2 = make_async_gen([1, 2, 3], step_delay=1)

    with profile(max_duration=3.1):
        async for _ in Selector(source_1(), source_2()):
            pass
예제 #3
0
async def test_yielded_source_with_values():
    source_values = [
        [object(), object(), object()],
        [object(), object(), object()],
        [object(), object(), object()],
    ]
    source_values = {make_async_gen(vs)(): vs.copy() for vs in source_values}
    sel = Selector(*source_values.keys(), yield_source=True)
    async for source, value in sel:
        source_values[source].remove(value)
    else:
        assert all(len(vs) == 0 for vs in source_values.values())
예제 #4
0
async def test_non_raised_exception_passes():
    class AnException(Exception):
        pass
    exc1 = AnException()
    exc2 = AnException()
    src1 = [0, 1, 2, 3, exc1, 4]
    src2 = [0, 1, exc2, 3, 4, 5]
    source_1 = make_async_gen(src1, initial_delay=0.2)
    source_2 = make_async_gen(src2, raise_exc=False)
    expected = [0, 1, exc2, 3, 4, 5, 0, 1, 2, 3, exc1]
    result = []

    sel = Selector(source_1, source_2)
    sel_agen = sel.__aiter__()
    while True:
        try:
            result.append(await sel_agen.__anext__())
        except AnException as e:
            result.append(e)
        except StopAsyncIteration:
            break

    assert result == expected