Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 56 additions & 50 deletions exercises/circular-buffer/circular_buffer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,41 @@
)


# Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.1
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor formatting point, but can you add a blank line after the version string for consistency?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


class CircularBufferTest(unittest.TestCase):
def test_read_empty_buffer(self):
buf = CircularBuffer(1)
with self.assertRaises(BufferEmptyException):
buf.read()

def test_read_just_written_item(self):
buf = CircularBuffer(1)
buf.write('1')
self.assertEqual(buf.read(), '1')

def test_write_and_read_back_one_item(self):
buf = CircularBuffer(1)
buf.write('1')
self.assertEqual('1', buf.read())
self.assertEqual(buf.read(), '1')
with self.assertRaises(BufferEmptyException):
buf.read()

def test_write_and_read_back_multiple_items(self):
def test_write_and_read_back_multiple_items_ordered(self):
buf = CircularBuffer(2)
buf.write('1')
buf.write('2')
self.assertEqual(buf.read(), '1')
self.assertEqual(buf.read(), '2')
with self.assertRaises(BufferEmptyException):
buf.read()

def test_clearing_buffer(self):
buf = CircularBuffer(3)
for c in '123':
buf.write(c)
buf.clear()
with self.assertRaises(BufferEmptyException):
buf.read()
def test_full_buffer_cant_written(self):
buf = CircularBuffer(1)
buf.write('1')
buf.write('2')
self.assertEqual(buf.read(), '1')
buf.write('3')
self.assertEqual(buf.read(), '2')
with self.assertRaises(BufferFullException):
buf.write('2')

def test_alternate_write_and_read(self):
buf = CircularBuffer(2)
buf = CircularBuffer(1)
buf.write('1')
self.assertEqual(buf.read(), '1')
buf.write('2')
Expand All @@ -53,56 +51,64 @@ def test_read_back_oldest_item(self):
buf = CircularBuffer(3)
buf.write('1')
buf.write('2')
buf.read()
self.assertEqual(buf.read(), '1')
buf.write('3')
buf.read()
self.assertEqual(buf.read(), '2')
self.assertEqual(buf.read(), '3')

def test_write_full_buffer(self):
buf = CircularBuffer(2)
def test_clearing_buffer(self):
buf = CircularBuffer(1)
buf.write('1')
buf.write('2')
with self.assertRaises(BufferFullException):
buf.write('A')
buf.clear()
with self.assertRaises(BufferEmptyException):
buf.read()

def test_overwrite_full_buffer(self):
buf = CircularBuffer(2)
def test_clear_free_buffer_for_write(self):
buf = CircularBuffer(1)
buf.write('1')
buf.clear()
buf.write('2')
buf.overwrite('A')
self.assertEqual(buf.read(), '2')
self.assertEqual(buf.read(), 'A')
with self.assertRaises(BufferEmptyException):
buf.read()

def test_clear_does_nothin_empty_buffer(self):
buf = CircularBuffer(1)
buf.clear()
buf.write('1')
self.assertEqual(buf.read(), '1')

def test_overwrite_non_full_buffer(self):
buf = CircularBuffer(2)
buf.overwrite('1')
buf.write('1')
buf.overwrite('2')
self.assertEqual(buf.read(), '1')
self.assertEqual(buf.read(), '2')
with self.assertRaises(BufferEmptyException):
buf.read()

def test_alternate_read_and_overwrite(self):
buf = CircularBuffer(5)
for c in '123':
buf.write(c)
buf.read()
buf.read()
def test_overwrite_replaces_oldest_item(self):
buf = CircularBuffer(2)
buf.write('1')
buf.write('2')
buf.overwrite('3')
self.assertEqual(buf.read(), '2')
self.assertEqual(buf.read(), '3')

def test_write_full_buffer(self):
buf = CircularBuffer(2)
buf.write('1')
buf.write('2')
with self.assertRaises(BufferFullException):
buf.write('A')

def test_over_write_replaces_oldest_remaning_item(self):
buf = CircularBuffer(3)
buf.write('1')
buf.write('2')
buf.write('3')
self.assertEqual(buf.read(), '1')
buf.write('4')
buf.read()
for c in '5678':
buf.write(c)
buf.overwrite('A')
buf.overwrite('B')
self.assertEqual(buf.read(), '6')
self.assertEqual(buf.read(), '7')
self.assertEqual(buf.read(), '8')
self.assertEqual(buf.read(), 'A')
self.assertEqual(buf.read(), 'B')
with self.assertRaises(BufferEmptyException):
buf.read()
buf.overwrite('5')
self.assertEqual(buf.read(), '3')
self.assertEqual(buf.read(), '4')
self.assertEqual(buf.read(), '5')


if __name__ == '__main__':
Expand Down