async def test_tee_when_not_interleaved():
    """Check that all tees produce correct values when not interleaved."""
    a, b = aitertools.tee(range(10))
    a_values = await aitertools.alist(a)
    b_values = await aitertools.alist(b)

    assert a_values == b_values
    assert a_values == list(range(10))
async def test_tee_when_interleaved():
    """Check that all tees produce correct values when interleaved."""
    a, b = aitertools.tee(range(100))
    a_values, b_values = [], []
    for _ in range(100):

        a_values.append((await aitertools.anext(a)))
        b_values.append((await aitertools.anext(b)))

    assert a_values == b_values
    assert a_values == list(range(100))
async def test_tee_can_be_instantiated():
    """Check that new tees can be created from individual tees."""
    a, b = aitertools.tee('abc')
    c = type(a)('def')
    assert (await aitertools.alist(c)) == list('def')
async def test_tee_empty_iterable():
    """Check that all tees are empty when the iterable is empty."""
    a, b = aitertools.tee([])
    assert (await aitertools.alist(a)) == []
    assert (await aitertools.alist(b)) == []