def test_queues(self):
        cb = CircularBuffer()
        for i in range(12):
            cb.queue(i)
        assert cb.read == 0
        assert cb.dequeue() == 0
        assert cb.read == 1
        assert cb.dequeue() == 1

        # Overwriting
        for i in range(12):
            cb.queue(i)
        assert cb.read == 0
        assert cb.dequeue() == 0
        assert cb.read == 1
        assert cb.dequeue() == 1

        # Let's keep dequeueing
        assert cb.dequeue() == 2
        assert cb.dequeue() == 3
        assert cb.dequeue() == 4
        assert cb.dequeue() == 5
        assert cb.dequeue() == 6
        assert cb.dequeue() == 7
        assert cb.dequeue() == 8
        assert cb.dequeue() == 9
        assert cb.dequeue() == 10
        assert cb.dequeue() == 11
        assert cb.dequeue() is None
        assert cb.dequeue() is None
        assert cb.read == 11
        assert cb.write == 0
    def test_write_and_read_movement(self):
        cb = CircularBuffer(['A', 'B', 'C'])
        assert cb.write == 3
        assert cb.read == 0  # This better not be moving

        cb.queue('D')
        assert cb.write == 4
        assert cb.read == 0
        cb.dequeue()  # Should not do anything
        assert cb.write == 4
        assert cb.read == 1

        cb = CircularBuffer()  # Clearing
        for i in range(11):
            cb.queue(i)
        assert cb.write == 11
        assert cb.read == 0

        cb.queue(11)
        assert cb.write == 0
        assert cb.read == 0
        assert cb.dequeue() == 0

        # Should BOTH move
        cb.queue(12)
        assert cb.write == 1
        assert cb.read == 1
        assert cb.dequeue() == 1