Skip to content

Commit 073b6f1

Browse files
testing: improve CircularBufferTest (#6418)
* testing: improve CircularBufferTest * style: redundant whitespace --------- Co-authored-by: Deniz Altunkapan <93663085+DenizAltunkapan@users.noreply.github.com>
1 parent bcfb3f2 commit 073b6f1

File tree

1 file changed

+148
-4
lines changed

1 file changed

+148
-4
lines changed

src/test/java/com/thealgorithms/datastructures/buffers/CircularBufferTest.java

Lines changed: 148 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44
import static org.junit.jupiter.api.Assertions.assertNull;
5-
import static org.junit.jupiter.api.Assertions.assertThrows;
65
import static org.junit.jupiter.api.Assertions.assertTrue;
76

87
import org.junit.jupiter.api.Test;
@@ -68,11 +67,11 @@ void testFullBuffer() {
6867

6968
@Test
7069
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));
7372

7473
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));
7675
}
7776

7877
@Test
@@ -85,4 +84,149 @@ void testLargeBuffer() {
8584
buffer.put(1000); // This should overwrite 0
8685
assertEquals(1, buffer.get());
8786
}
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+
}
88232
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy