Skip to content

Commit 37b6bc9

Browse files
authored
Merge branch 'master' into testing/SortStackTest
2 parents 72ddc22 + 073b6f1 commit 37b6bc9

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)