Skip to content

Commit 60caa0b

Browse files
committed
testing: improve QueueTest
1 parent 31bf130 commit 60caa0b

File tree

1 file changed

+207
-0
lines changed

1 file changed

+207
-0
lines changed

src/test/java/com/thealgorithms/datastructures/queues/QueueTest.java

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,211 @@ void testQueueCapacityException() {
124124
Assertions.assertThrows(IllegalArgumentException.class, () -> new Queue<>(0));
125125
Assertions.assertThrows(IllegalArgumentException.class, () -> new Queue<>(-5));
126126
}
127+
128+
@Test
129+
void testCircularBehavior() {
130+
// Test that queue behaves correctly after multiple insert/remove cycles
131+
queue.insert(1);
132+
queue.insert(2);
133+
queue.insert(3);
134+
135+
// Remove all elements
136+
queue.remove(); // removes 1
137+
queue.remove(); // removes 2
138+
queue.remove(); // removes 3
139+
140+
// Add elements again to test circular behavior
141+
queue.insert(4);
142+
queue.insert(5);
143+
queue.insert(6);
144+
145+
Assertions.assertEquals(4, queue.peekFront());
146+
Assertions.assertEquals(6, queue.peekRear());
147+
Assertions.assertEquals(3, queue.getSize());
148+
Assertions.assertTrue(queue.isFull());
149+
}
150+
151+
@Test
152+
void testMixedInsertRemoveOperations() {
153+
// Test interleaved insert and remove operations
154+
queue.insert(1);
155+
queue.insert(2);
156+
157+
Assertions.assertEquals(1, queue.remove());
158+
queue.insert(3);
159+
queue.insert(4);
160+
161+
Assertions.assertEquals(2, queue.remove());
162+
Assertions.assertEquals(3, queue.remove());
163+
164+
queue.insert(5);
165+
queue.insert(6);
166+
167+
Assertions.assertEquals(4, queue.peekFront());
168+
Assertions.assertEquals(6, queue.peekRear());
169+
Assertions.assertEquals(3, queue.getSize());
170+
}
171+
172+
@Test
173+
void testSingleElementOperations() {
174+
// Test operations with single element
175+
queue.insert(42);
176+
177+
Assertions.assertEquals(42, queue.peekFront());
178+
Assertions.assertEquals(42, queue.peekRear());
179+
Assertions.assertEquals(1, queue.getSize());
180+
Assertions.assertFalse(queue.isEmpty());
181+
Assertions.assertFalse(queue.isFull());
182+
183+
Assertions.assertEquals(42, queue.remove());
184+
Assertions.assertTrue(queue.isEmpty());
185+
Assertions.assertEquals(0, queue.getSize());
186+
}
187+
188+
@Test
189+
void testNullValueHandling() {
190+
// Test queue with null values (if supported)
191+
Queue<String> stringQueue = new Queue<>(3);
192+
193+
Assertions.assertTrue(stringQueue.insert(null));
194+
Assertions.assertTrue(stringQueue.insert("test"));
195+
Assertions.assertTrue(stringQueue.insert(null));
196+
197+
Assertions.assertNull(stringQueue.peekFront());
198+
Assertions.assertNull(stringQueue.peekRear());
199+
Assertions.assertEquals(3, stringQueue.getSize());
200+
201+
Assertions.assertNull(stringQueue.remove());
202+
Assertions.assertEquals("test", stringQueue.peekFront());
203+
}
204+
205+
@Test
206+
void testDifferentDataTypes() {
207+
// Test queue with different data types
208+
Queue<String> stringQueue = new Queue<>(2);
209+
stringQueue.insert("first");
210+
stringQueue.insert("second");
211+
212+
Assertions.assertEquals("first", stringQueue.peekFront());
213+
Assertions.assertEquals("second", stringQueue.peekRear());
214+
215+
Queue<Double> doubleQueue = new Queue<>(2);
216+
doubleQueue.insert(3.14);
217+
doubleQueue.insert(2.71);
218+
219+
Assertions.assertEquals(3.14, doubleQueue.peekFront());
220+
Assertions.assertEquals(2.71, doubleQueue.peekRear());
221+
}
222+
223+
@Test
224+
void testLargerCapacityQueue() {
225+
// Test queue with larger capacity
226+
Queue<Integer> largeQueue = new Queue<>(10);
227+
228+
// Fill the queue
229+
for (int i = 1; i <= 10; i++) {
230+
Assertions.assertTrue(largeQueue.insert(i));
231+
}
232+
233+
Assertions.assertTrue(largeQueue.isFull());
234+
Assertions.assertFalse(largeQueue.insert(11));
235+
236+
// Remove half the elements
237+
for (int i = 1; i <= 5; i++) {
238+
Assertions.assertEquals(i, largeQueue.remove());
239+
}
240+
241+
Assertions.assertEquals(6, largeQueue.peekFront());
242+
Assertions.assertEquals(10, largeQueue.peekRear());
243+
Assertions.assertEquals(5, largeQueue.getSize());
244+
}
245+
246+
@Test
247+
void testQueueCapacityOne() {
248+
// Test queue with capacity of 1
249+
Queue<Integer> singleQueue = new Queue<>(1);
250+
251+
Assertions.assertTrue(singleQueue.isEmpty());
252+
Assertions.assertFalse(singleQueue.isFull());
253+
254+
Assertions.assertTrue(singleQueue.insert(100));
255+
Assertions.assertTrue(singleQueue.isFull());
256+
Assertions.assertFalse(singleQueue.isEmpty());
257+
Assertions.assertFalse(singleQueue.insert(200));
258+
259+
Assertions.assertEquals(100, singleQueue.peekFront());
260+
Assertions.assertEquals(100, singleQueue.peekRear());
261+
262+
Assertions.assertEquals(100, singleQueue.remove());
263+
Assertions.assertTrue(singleQueue.isEmpty());
264+
}
265+
266+
@Test
267+
void testQueueWraparoundIndexing() {
268+
// Test that internal array indexing wraps around correctly
269+
queue.insert(1);
270+
queue.insert(2);
271+
queue.insert(3); // Queue full
272+
273+
// Remove one element
274+
queue.remove(); // removes 1
275+
276+
// Add another element (should wrap around)
277+
queue.insert(4);
278+
279+
Assertions.assertEquals("[2, 3, 4]", queue.toString());
280+
Assertions.assertEquals(2, queue.peekFront());
281+
Assertions.assertEquals(4, queue.peekRear());
282+
283+
// Continue the pattern
284+
queue.remove(); // removes 2
285+
queue.insert(5);
286+
287+
Assertions.assertEquals(3, queue.peekFront());
288+
Assertions.assertEquals(5, queue.peekRear());
289+
}
290+
291+
@Test
292+
void testQueueStateAfterMultipleCycles() {
293+
// Test queue state after multiple complete fill/empty cycles
294+
for (int cycle = 0; cycle < 3; cycle++) {
295+
// Fill the queue
296+
for (int i = 1; i <= 3; i++) {
297+
queue.insert(i + cycle * 10);
298+
}
299+
300+
// Verify state
301+
Assertions.assertTrue(queue.isFull());
302+
Assertions.assertEquals(3, queue.getSize());
303+
304+
// Empty the queue
305+
for (int i = 1; i <= 3; i++) {
306+
queue.remove();
307+
}
308+
309+
// Verify empty state
310+
Assertions.assertTrue(queue.isEmpty());
311+
Assertions.assertEquals(0, queue.getSize());
312+
}
313+
}
314+
315+
@Test
316+
void testQueueConsistencyAfterOperations() {
317+
// Test that queue maintains consistency after various operations
318+
queue.insert(10);
319+
queue.insert(20);
320+
321+
int firstRemoved = queue.remove();
322+
queue.insert(30);
323+
queue.insert(40);
324+
325+
int secondRemoved = queue.remove();
326+
queue.insert(50);
327+
328+
// Verify the order is maintained
329+
Assertions.assertEquals(10, firstRemoved);
330+
Assertions.assertEquals(20, secondRemoved);
331+
Assertions.assertEquals(30, queue.peekFront());
332+
Assertions.assertEquals(50, queue.peekRear());
333+
}
127334
}

0 commit comments

Comments
 (0)