def test_circular_buffer_appendleft():
    b = CircularBuffer(3)
    b.append(0)
    assert list(b) == [0]
    b.appendleft(1)
    assert list(b) == [1, 0]
    b.appendleft(2)
    assert list(b) == [2, 1, 0]
    b.appendleft(3)
    assert list(b) == [3, 2, 1]
    b.appendleft(4)
    assert list(b) == [4, 3, 2]
    b.appendleft(5)
    assert list(b) == [5, 4, 3]
def test_circular_buffer_appends_pops_partial():
    b = CircularBuffer(5)
    b.append(1)
    b.append(2)
    assert list(b) == [1, 2]
    assert b.pop() == 2
    assert list(b) == [1]
    b.append(3)
    b.append(4)
    assert list(b) == [1, 3, 4]
    assert b.popleft() == 1
    assert b.popleft() == 3
    assert list(b) == [4]
    b.appendleft(5)
    assert list(b) == [5, 4]
    assert b.popleft() == 5
def test_circular_buffer_appends_pops_overfull():
    b = CircularBuffer(5, range(7))
    b.append(-1)
    b.append(-2)
    assert list(b) == [4, 5, 6, -1, -2]
    assert b.pop() == -2
    assert b.popleft() == 4
    assert list(b) == [5, 6, -1]
    b.append(-3)
    b.append(-4)
    assert list(b) == [5, 6, -1, -3, -4]
    b.appendleft(-5)
    assert list(b) == [-5, 5, 6, -1, -3]
    assert b.popleft() == -5
    assert b.popleft() == 5
    assert list(b) == [6, -1, -3]
    b.appendleft(-6)
    assert list(b) == [-6, 6, -1, -3]
    assert b.popleft() == -6