2
2
3
3
import static org .junit .jupiter .api .Assertions .assertEquals ;
4
4
import static org .junit .jupiter .api .Assertions .assertNull ;
5
- import static org .junit .jupiter .api .Assertions .assertThrows ;
6
5
import static org .junit .jupiter .api .Assertions .assertTrue ;
7
6
8
7
import org .junit .jupiter .api .Test ;
@@ -68,11 +67,11 @@ void testFullBuffer() {
68
67
69
68
@ Test
70
69
void testIllegalArguments () {
71
- assertThrows (IllegalArgumentException .class , () -> new CircularBuffer <>(0 ));
72
- assertThrows (IllegalArgumentException .class , () -> new CircularBuffer <>(-1 ));
70
+ org . junit . jupiter . api . Assertions . assertThrows (IllegalArgumentException .class , () -> new CircularBuffer <>(0 ));
71
+ org . junit . jupiter . api . Assertions . assertThrows (IllegalArgumentException .class , () -> new CircularBuffer <>(-1 ));
73
72
74
73
CircularBuffer <String > buffer = new CircularBuffer <>(1 );
75
- assertThrows (IllegalArgumentException .class , () -> buffer .put (null ));
74
+ org . junit . jupiter . api . Assertions . assertThrows (IllegalArgumentException .class , () -> buffer .put (null ));
76
75
}
77
76
78
77
@ Test
@@ -85,4 +84,149 @@ void testLargeBuffer() {
85
84
buffer .put (1000 ); // This should overwrite 0
86
85
assertEquals (1 , buffer .get ());
87
86
}
87
+
88
+ @ Test
89
+ void testPutAfterGet () {
90
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(2 );
91
+ buffer .put (10 );
92
+ buffer .put (20 );
93
+ assertEquals (10 , buffer .get ());
94
+ buffer .put (30 );
95
+ assertEquals (20 , buffer .get ());
96
+ assertEquals (30 , buffer .get ());
97
+ assertNull (buffer .get ());
98
+ }
99
+
100
+ @ Test
101
+ void testMultipleWrapArounds () {
102
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(3 );
103
+ for (int i = 1 ; i <= 6 ; i ++) {
104
+ buffer .put (i );
105
+ buffer .get (); // add and immediately remove
106
+ }
107
+ assertTrue (buffer .isEmpty ());
108
+ assertNull (buffer .get ());
109
+ }
110
+
111
+ @ Test
112
+ void testOverwriteMultipleTimes () {
113
+ CircularBuffer <String > buffer = new CircularBuffer <>(2 );
114
+ buffer .put ("X" );
115
+ buffer .put ("Y" );
116
+ buffer .put ("Z" ); // overwrites "X"
117
+ buffer .put ("W" ); // overwrites "Y"
118
+ assertEquals ("Z" , buffer .get ());
119
+ assertEquals ("W" , buffer .get ());
120
+ assertNull (buffer .get ());
121
+ }
122
+
123
+ @ Test
124
+ void testIsEmptyAndIsFullTransitions () {
125
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(2 );
126
+ assertTrue (buffer .isEmpty ());
127
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .isFull ());
128
+
129
+ buffer .put (1 );
130
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .isEmpty ());
131
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .isFull ());
132
+
133
+ buffer .put (2 );
134
+ assertTrue (buffer .isFull ());
135
+
136
+ buffer .get ();
137
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .isFull ());
138
+
139
+ buffer .get ();
140
+ assertTrue (buffer .isEmpty ());
141
+ }
142
+
143
+ @ Test
144
+ void testInterleavedPutAndGet () {
145
+ CircularBuffer <String > buffer = new CircularBuffer <>(3 );
146
+ buffer .put ("A" );
147
+ buffer .put ("B" );
148
+ assertEquals ("A" , buffer .get ());
149
+ buffer .put ("C" );
150
+ assertEquals ("B" , buffer .get ());
151
+ assertEquals ("C" , buffer .get ());
152
+ assertNull (buffer .get ());
153
+ }
154
+
155
+ @ Test
156
+ void testRepeatedNullInsertionThrows () {
157
+ CircularBuffer <Object > buffer = new CircularBuffer <>(5 );
158
+ for (int i = 0 ; i < 3 ; i ++) {
159
+ int finalI = i ;
160
+ org .junit .jupiter .api .Assertions .assertThrows (IllegalArgumentException .class , () -> buffer .put (null ), "Iteration: " + finalI );
161
+ }
162
+ }
163
+ @ Test
164
+ void testFillThenEmptyThenReuseBuffer () {
165
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(3 );
166
+
167
+ buffer .put (1 );
168
+ buffer .put (2 );
169
+ buffer .put (3 );
170
+ assertTrue (buffer .isFull ());
171
+
172
+ assertEquals (1 , buffer .get ());
173
+ assertEquals (2 , buffer .get ());
174
+ assertEquals (3 , buffer .get ());
175
+
176
+ assertTrue (buffer .isEmpty ());
177
+
178
+ buffer .put (4 );
179
+ buffer .put (5 );
180
+ assertEquals (4 , buffer .get ());
181
+ assertEquals (5 , buffer .get ());
182
+ assertTrue (buffer .isEmpty ());
183
+ }
184
+
185
+ @ Test
186
+ void testPutReturnsTrueOnlyIfPreviouslyEmpty () {
187
+ CircularBuffer <String > buffer = new CircularBuffer <>(2 );
188
+
189
+ assertTrue (buffer .put ("one" )); // was empty
190
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .put ("two" )); // not empty
191
+ org .junit .jupiter .api .Assertions .assertFalse (buffer .put ("three" )); // overwrite
192
+ }
193
+
194
+ @ Test
195
+ void testOverwriteAndGetAllElementsCorrectly () {
196
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(3 );
197
+
198
+ buffer .put (1 );
199
+ buffer .put (2 );
200
+ buffer .put (3 );
201
+ buffer .put (4 ); // Overwrites 1
202
+ buffer .put (5 ); // Overwrites 2
203
+
204
+ assertEquals (3 , buffer .get ());
205
+ assertEquals (4 , buffer .get ());
206
+ assertEquals (5 , buffer .get ());
207
+ assertNull (buffer .get ());
208
+ }
209
+
210
+ @ Test
211
+ void testBufferWithOneElementCapacity () {
212
+ CircularBuffer <String > buffer = new CircularBuffer <>(1 );
213
+
214
+ assertTrue (buffer .put ("first" ));
215
+ assertEquals ("first" , buffer .get ());
216
+ assertNull (buffer .get ());
217
+
218
+ assertTrue (buffer .put ("second" ));
219
+ assertEquals ("second" , buffer .get ());
220
+ }
221
+
222
+ @ Test
223
+ void testPointerWraparoundWithExactMultipleOfCapacity () {
224
+ CircularBuffer <Integer > buffer = new CircularBuffer <>(3 );
225
+ for (int i = 0 ; i < 6 ; i ++) {
226
+ buffer .put (i );
227
+ buffer .get (); // keep buffer size at 0
228
+ }
229
+ assertTrue (buffer .isEmpty ());
230
+ assertNull (buffer .get ());
231
+ }
88
232
}
0 commit comments