7
7
)
8
8
9
9
10
+ # Tests adapted from `problem-specifications//canonical-data.json` @ v1.0.1
11
+
10
12
class CircularBufferTest (unittest .TestCase ):
11
13
def test_read_empty_buffer (self ):
12
14
buf = CircularBuffer (1 )
13
15
with self .assertRaises (BufferEmptyException ):
14
16
buf .read ()
15
17
18
+ def test_read_just_written_item (self ):
19
+ buf = CircularBuffer (1 )
20
+ buf .write ('1' )
21
+ self .assertEqual (buf .read (), '1' )
22
+
16
23
def test_write_and_read_back_one_item (self ):
17
24
buf = CircularBuffer (1 )
18
25
buf .write ('1' )
19
- self .assertEqual ('1' , buf .read ())
26
+ self .assertEqual (buf .read (), '1' )
20
27
with self .assertRaises (BufferEmptyException ):
21
28
buf .read ()
22
29
23
- def test_write_and_read_back_multiple_items (self ):
30
+ def test_write_and_read_back_multiple_items_ordered (self ):
24
31
buf = CircularBuffer (2 )
25
32
buf .write ('1' )
26
33
buf .write ('2' )
27
34
self .assertEqual (buf .read (), '1' )
28
35
self .assertEqual (buf .read (), '2' )
29
- with self .assertRaises (BufferEmptyException ):
30
- buf .read ()
31
36
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 )
39
39
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' )
44
42
45
43
def test_alternate_write_and_read (self ):
46
- buf = CircularBuffer (2 )
44
+ buf = CircularBuffer (1 )
47
45
buf .write ('1' )
48
46
self .assertEqual (buf .read (), '1' )
49
47
buf .write ('2' )
@@ -53,56 +51,64 @@ def test_read_back_oldest_item(self):
53
51
buf = CircularBuffer (3 )
54
52
buf .write ('1' )
55
53
buf .write ('2' )
56
- buf .read ()
54
+ self . assertEqual ( buf .read (), '1' )
57
55
buf .write ('3' )
58
- buf .read ()
56
+ self . assertEqual ( buf .read (), '2' )
59
57
self .assertEqual (buf .read (), '3' )
60
58
61
- def test_write_full_buffer (self ):
62
- buf = CircularBuffer (2 )
59
+ def test_clearing_buffer (self ):
60
+ buf = CircularBuffer (1 )
63
61
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 ( )
67
65
68
- def test_overwrite_full_buffer (self ):
69
- buf = CircularBuffer (2 )
66
+ def test_clear_free_buffer_for_write (self ):
67
+ buf = CircularBuffer (1 )
70
68
buf .write ('1' )
69
+ buf .clear ()
71
70
buf .write ('2' )
72
- buf .overwrite ('A' )
73
71
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' )
77
78
78
79
def test_overwrite_non_full_buffer (self ):
79
80
buf = CircularBuffer (2 )
80
- buf .overwrite ('1' )
81
+ buf .write ('1' )
81
82
buf .overwrite ('2' )
82
83
self .assertEqual (buf .read (), '1' )
83
84
self .assertEqual (buf .read (), '2' )
84
- with self .assertRaises (BufferEmptyException ):
85
- buf .read ()
86
85
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' )
93
107
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' )
106
112
107
113
108
114
if __name__ == '__main__' :
0 commit comments