Content-Length: 609173 | pFad | http://github.com/TheAlgorithms/Java/commit/#start-of-content

688184EA testing: improve `QueueTest` (#6423) · TheAlgorithms/Java@6992716 · GitHub
Skip to content

Commit 6992716

Browse files
authored
testing: improve QueueTest (#6423)
* testing: improve QueueTest * testing: fix test
1 parent 7e3fbae commit 6992716

File tree

1 file changed

+200
-0
lines changed

1 file changed

+200
-0
lines changed

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

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,204 @@ 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 testStringDataType() {
207+
// Test queue with String data type
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+
216+
@Test
217+
void testLargerCapacityQueue() {
218+
// Test queue with larger capacity
219+
Queue<Integer> largeQueue = new Queue<>(10);
220+
221+
// Fill the queue
222+
for (int i = 1; i <= 10; i++) {
223+
Assertions.assertTrue(largeQueue.insert(i));
224+
}
225+
226+
Assertions.assertTrue(largeQueue.isFull());
227+
Assertions.assertFalse(largeQueue.insert(11));
228+
229+
// Remove half the elements
230+
for (int i = 1; i <= 5; i++) {
231+
Assertions.assertEquals(i, largeQueue.remove());
232+
}
233+
234+
Assertions.assertEquals(6, largeQueue.peekFront());
235+
Assertions.assertEquals(10, largeQueue.peekRear());
236+
Assertions.assertEquals(5, largeQueue.getSize());
237+
}
238+
239+
@Test
240+
void testQueueCapacityOne() {
241+
// Test queue with capacity of 1
242+
Queue<Integer> singleQueue = new Queue<>(1);
243+
244+
Assertions.assertTrue(singleQueue.isEmpty());
245+
Assertions.assertFalse(singleQueue.isFull());
246+
247+
Assertions.assertTrue(singleQueue.insert(100));
248+
Assertions.assertTrue(singleQueue.isFull());
249+
Assertions.assertFalse(singleQueue.isEmpty());
250+
Assertions.assertFalse(singleQueue.insert(200));
251+
252+
Assertions.assertEquals(100, singleQueue.peekFront());
253+
Assertions.assertEquals(100, singleQueue.peekRear());
254+
255+
Assertions.assertEquals(100, singleQueue.remove());
256+
Assertions.assertTrue(singleQueue.isEmpty());
257+
}
258+
259+
@Test
260+
void testQueueWraparoundIndexing() {
261+
// Test that internal array indexing wraps around correctly
262+
queue.insert(1);
263+
queue.insert(2);
264+
queue.insert(3); // Queue full
265+
266+
// Remove one element
267+
queue.remove(); // removes 1
268+
269+
// Add another element (should wrap around)
270+
queue.insert(4);
271+
272+
Assertions.assertEquals("[2, 3, 4]", queue.toString());
273+
Assertions.assertEquals(2, queue.peekFront());
274+
Assertions.assertEquals(4, queue.peekRear());
275+
276+
// Continue the pattern
277+
queue.remove(); // removes 2
278+
queue.insert(5);
279+
280+
Assertions.assertEquals(3, queue.peekFront());
281+
Assertions.assertEquals(5, queue.peekRear());
282+
}
283+
284+
@Test
285+
void testQueueStateAfterMultipleCycles() {
286+
// Test queue state after multiple complete fill/empty cycles
287+
for (int cycle = 0; cycle < 3; cycle++) {
288+
// Fill the queue
289+
for (int i = 1; i <= 3; i++) {
290+
queue.insert(i + cycle * 10);
291+
}
292+
293+
// Verify state
294+
Assertions.assertTrue(queue.isFull());
295+
Assertions.assertEquals(3, queue.getSize());
296+
297+
// Empty the queue
298+
for (int i = 1; i <= 3; i++) {
299+
queue.remove();
300+
}
301+
302+
// Verify empty state
303+
Assertions.assertTrue(queue.isEmpty());
304+
Assertions.assertEquals(0, queue.getSize());
305+
}
306+
}
307+
308+
@Test
309+
void testQueueConsistencyAfterOperations() {
310+
// Test that queue maintains consistency after various operations
311+
queue.insert(10);
312+
queue.insert(20);
313+
314+
int firstRemoved = queue.remove();
315+
queue.insert(30);
316+
queue.insert(40);
317+
318+
int secondRemoved = queue.remove();
319+
queue.insert(50);
320+
321+
// Verify the order is maintained
322+
Assertions.assertEquals(10, firstRemoved);
323+
Assertions.assertEquals(20, secondRemoved);
324+
Assertions.assertEquals(30, queue.peekFront());
325+
Assertions.assertEquals(50, queue.peekRear());
326+
}
127327
}

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/TheAlgorithms/Java/commit/#start-of-content

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy