77)
88
99
10+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.1
11+
1012class CircularBufferTest (unittest .TestCase ):
1113 def test_read_empty_buffer (self ):
1214 buf = CircularBuffer (1 )
1315 with self .assertRaises (BufferEmptyException ):
1416 buf .read ()
1517
18+ def test_read_just_written_item (self ):
19+ buf = CircularBuffer (1 )
20+ buf .write ('1' )
21+ self .assertEqual (buf .read (), '1' )
22+
1623 def test_write_and_read_back_one_item (self ):
1724 buf = CircularBuffer (1 )
1825 buf .write ('1' )
19- self .assertEqual ('1' , buf .read ())
26+ self .assertEqual (buf .read (), '1' )
2027 with self .assertRaises (BufferEmptyException ):
2128 buf .read ()
2229
23- def test_write_and_read_back_multiple_items (self ):
30+ def test_write_and_read_back_multiple_items_ordered (self ):
2431 buf = CircularBuffer (2 )
2532 buf .write ('1' )
2633 buf .write ('2' )
2734 self .assertEqual (buf .read (), '1' )
2835 self .assertEqual (buf .read (), '2' )
29- with self .assertRaises (BufferEmptyException ):
30- buf .read ()
3136
32- def test_clearing_buffer (self ):
33- buf = CircularBuffer (3 )
34- for c in '123' :
35- buf .write (c )
36- buf .clear ()
37- with self .assertRaises (BufferEmptyException ):
38- buf .read ()
37+ def test_full_buffer_cant_written (self ):
38+ buf = CircularBuffer (1 )
3939 buf .write ('1' )
40- buf .write ('2' )
41- self .assertEqual (buf .read (), '1' )
42- buf .write ('3' )
43- self .assertEqual (buf .read (), '2' )
40+ with self .assertRaises (BufferFullException ):
41+ buf .write ('2' )
4442
4543 def test_alternate_write_and_read (self ):
46- buf = CircularBuffer (2 )
44+ buf = CircularBuffer (1 )
4745 buf .write ('1' )
4846 self .assertEqual (buf .read (), '1' )
4947 buf .write ('2' )
@@ -53,56 +51,64 @@ def test_read_back_oldest_item(self):
5351 buf = CircularBuffer (3 )
5452 buf .write ('1' )
5553 buf .write ('2' )
56- buf .read ()
54+ self . assertEqual ( buf .read (), '1' )
5755 buf .write ('3' )
58- buf .read ()
56+ self . assertEqual ( buf .read (), '2' )
5957 self .assertEqual (buf .read (), '3' )
6058
61- def test_write_full_buffer (self ):
62- buf = CircularBuffer (2 )
59+ def test_clearing_buffer (self ):
60+ buf = CircularBuffer (1 )
6361 buf .write ('1' )
64- buf .write ( '2' )
65- with self .assertRaises (BufferFullException ):
66- buf .write ( 'A' )
62+ buf .clear ( )
63+ with self .assertRaises (BufferEmptyException ):
64+ buf .read ( )
6765
68- def test_overwrite_full_buffer (self ):
69- buf = CircularBuffer (2 )
66+ def test_clear_free_buffer_for_write (self ):
67+ buf = CircularBuffer (1 )
7068 buf .write ('1' )
69+ buf .clear ()
7170 buf .write ('2' )
72- buf .overwrite ('A' )
7371 self .assertEqual (buf .read (), '2' )
74- self .assertEqual (buf .read (), 'A' )
75- with self .assertRaises (BufferEmptyException ):
76- buf .read ()
72+
73+ def test_clear_does_nothin_empty_buffer (self ):
74+ buf = CircularBuffer (1 )
75+ buf .clear ()
76+ buf .write ('1' )
77+ self .assertEqual (buf .read (), '1' )
7778
7879 def test_overwrite_non_full_buffer (self ):
7980 buf = CircularBuffer (2 )
80- buf .overwrite ('1' )
81+ buf .write ('1' )
8182 buf .overwrite ('2' )
8283 self .assertEqual (buf .read (), '1' )
8384 self .assertEqual (buf .read (), '2' )
84- with self .assertRaises (BufferEmptyException ):
85- buf .read ()
8685
87- def test_alternate_read_and_overwrite (self ):
88- buf = CircularBuffer (5 )
89- for c in '123' :
90- buf .write (c )
91- buf .read ()
92- buf .read ()
86+ def test_overwrite_replaces_oldest_item (self ):
87+ buf = CircularBuffer (2 )
88+ buf .write ('1' )
89+ buf .write ('2' )
90+ buf .overwrite ('3' )
91+ self .assertEqual (buf .read (), '2' )
92+ self .assertEqual (buf .read (), '3' )
93+
94+ def test_write_full_buffer (self ):
95+ buf = CircularBuffer (2 )
96+ buf .write ('1' )
97+ buf .write ('2' )
98+ with self .assertRaises (BufferFullException ):
99+ buf .write ('A' )
100+
101+ def test_over_write_replaces_oldest_remaning_item (self ):
102+ buf = CircularBuffer (3 )
103+ buf .write ('1' )
104+ buf .write ('2' )
105+ buf .write ('3' )
106+ self .assertEqual (buf .read (), '1' )
93107 buf .write ('4' )
94- buf .read ()
95- for c in '5678' :
96- buf .write (c )
97- buf .overwrite ('A' )
98- buf .overwrite ('B' )
99- self .assertEqual (buf .read (), '6' )
100- self .assertEqual (buf .read (), '7' )
101- self .assertEqual (buf .read (), '8' )
102- self .assertEqual (buf .read (), 'A' )
103- self .assertEqual (buf .read (), 'B' )
104- with self .assertRaises (BufferEmptyException ):
105- buf .read ()
108+ buf .overwrite ('5' )
109+ self .assertEqual (buf .read (), '3' )
110+ self .assertEqual (buf .read (), '4' )
111+ self .assertEqual (buf .read (), '5' )
106112
107113
108114if __name__ == '__main__' :
0 commit comments