Finished
55
66 """
77 def __init__(self, message):
8 pass
8 self.message = message
9 super().__init__(message)
910
1011
1112class BufferEmptyException(BufferError):
1516
1617 """
1718 def __init__(self, message):
18 pass
19 self.message = message
20 super().__init__(message)
1921
2022
2123class CircularBuffer:
2224 def __init__(self, capacity):
23 pass
25 self.capacity = capacity
26 self.buffer = [None] * capacity
27 self.write_index = 0
28 self.read_index = 0
29 self.size = 0
2430
2531 def read(self):
26 pass
32 # Edge Case: Buffer is empty when trying to read
33 if self.size == 0:
34 raise BufferEmptyException("Circular buffer is empty")
35
36 data = self.buffer[self.read_index]
37 self.buffer[self.read_index] = None
38 self.read_index = (self.read_index + 1) % self.capacity
39 self.size -= 1
40 return data
2741
2842 def write(self, data):
29 pass
43 # Edge Case: Buffer is full when trying to write
44 if self.size == self.capacity:
45 raise BufferFullException("Circular buffer is full")
46
47 self.buffer[self.write_index] = data
48 self.write_index = (self.write_index + 1) % self.capacity
49 self.size += 1
3050
3151 def overwrite(self, data):
32 pass
52 # Edge Case: Buffer is full and we need to overwrite the oldest element
53 if self.size == self.capacity:
54 # Overwrite the oldest element (at read_index)
55 self.buffer[self.read_index] = data
56 self.read_index = (self.read_index + 1) % self.capacity
57 self.write_index = (self.write_index + 1) % self.capacity
58 else:
59 # Buffer is not full, just write normally
60 self.buffer[self.write_index] = data
61 self.write_index = (self.write_index + 1) % self.capacity
62 self.size += 1
3363
3464 def clear(self):
35 pass
65 # Edge Case: Clearing an already empty buffer
66 self.buffer = [None] * self.capacity
67 self.write_index = 0
68 self.read_index = 0
69 self.size = 0
70 # Handled Edge Cases: Clearing an already empty buffer
Test NameStatus
test_a_read_frees_up_capacity_for_another_write
Pass
test_can_read_an_item_just_written
Pass
test_clear_does_nothing_on_empty_buffer
Pass
test_clear_frees_up_capacity_for_another_write
Pass
test_each_item_may_only_be_read_once
Pass
test_full_buffer_can_t_be_written_to
Pass
test_initial_clear_does_not_affect_wrapping_around
Pass
test_items_are_read_in_the_order_they_are_written
Pass
test_items_cleared_out_of_buffer_can_t_be_read
Pass
test_overwrite_acts_like_write_on_non_full_buffer
Pass
test_overwrite_replaces_the_oldest_item_on_full_buffer
Pass
test_overwrite_replaces_the_oldest_item_remaining_in_buffer_following_a_read
Pass
test_read_position_is_maintained_even_across_multiple_writes
Pass
test_reading_empty_buffer_should_fail
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.