def test_should_correctly_report_size(): bucket = [] buffer = CoalescingRingBuffer(2) eq_(buffer.size, 0) ok_(buffer.empty) not_(buffer.full) buffer.offer('asd') eq_(buffer.size, 1) not_(buffer.empty) not_(buffer.full) buffer.offer(1, 'qwe') eq_(buffer.size, 2) not_(buffer.empty) ok_(buffer.full) fetched = buffer.poll(bucket, 1) eq_(fetched, 1) eq_(buffer.size, 1) not_(buffer.empty) not_(buffer.full) fetched = buffer.poll(bucket, 1) eq_(fetched, 1) eq_(buffer.size, 0) ok_(buffer.empty) not_(buffer.full)
def test_should_hot_have_memory_leaks(): counter = Counter() buffer = CoalescingRingBuffer(16) buffer.offer(CountingValue(counter)) for key in (1, 2, 1): buffer.offer(CountingKey(key, counter), CountingValue(counter)) buffer.offer(CountingValue(counter)) eq_(buffer.size, 4) buffer.poll([], 1) buffer.poll([]) ok_(buffer.empty) # to trigger the clean buffer.offer(None) gc.collect() eq_(counter.value, 8)