diff --git a/src/test/java/com/thealgorithms/datastructures/queues/DequeTest.java b/src/test/java/com/thealgorithms/datastructures/queues/DequeTest.java index 34b1ea2e0277..ada314383c74 100644 --- a/src/test/java/com/thealgorithms/datastructures/queues/DequeTest.java +++ b/src/test/java/com/thealgorithms/datastructures/queues/DequeTest.java @@ -121,4 +121,77 @@ void testNullValues() { assertNull(deque.pollFirst()); org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty()); } + + @Test + void testMultipleAddFirst() { + Deque deque = new Deque<>(); + deque.addFirst(1); + deque.addFirst(2); + deque.addFirst(3); + + assertEquals(3, deque.peekFirst(), "First element should be the last added to front"); + assertEquals(1, deque.peekLast(), "Last element should be the first added to front"); + assertEquals(3, deque.size(), "Size should reflect all additions"); + } + + @Test + void testMultipleAddLast() { + Deque deque = new Deque<>(); + deque.addLast(1); + deque.addLast(2); + deque.addLast(3); + + assertEquals(1, deque.peekFirst(), "First element should be the first added to back"); + assertEquals(3, deque.peekLast(), "Last element should be the last added to back"); + assertEquals(3, deque.size(), "Size should reflect all additions"); + } + + @Test + void testSingleElementOperations() { + Deque deque = new Deque<>(); + deque.addFirst(1); + + assertEquals(1, deque.peekFirst(), "Single element should be both first and last"); + assertEquals(1, deque.peekLast(), "Single element should be both first and last"); + assertEquals(1, deque.size()); + + assertEquals(1, deque.pollFirst(), "Should be able to poll single element from front"); + org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after polling single element"); + } + + @Test + void testSingleElementPollLast() { + Deque deque = new Deque<>(); + deque.addLast(1); + + assertEquals(1, deque.pollLast(), "Should be able to poll single element from back"); + org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after polling single element"); + } + + @Test + void testMixedNullAndValues() { + Deque deque = new Deque<>(); + deque.addFirst("first"); + deque.addLast(null); + deque.addFirst(null); + deque.addLast("last"); + + assertEquals(4, deque.size(), "Should handle mixed null and non-null values"); + assertNull(deque.pollFirst(), "Should poll null from front"); + assertEquals("first", deque.pollFirst(), "Should poll non-null value"); + assertNull(deque.pollLast().equals("last") ? null : deque.peekLast(), "Should handle null correctly"); + } + + @Test + void testSymmetricOperations() { + Deque deque = new Deque<>(); + + // Test that addFirst/pollFirst and addLast/pollLast are symmetric + deque.addFirst(1); + deque.addLast(2); + + assertEquals(1, deque.pollFirst(), "addFirst/pollFirst should be symmetric"); + assertEquals(2, deque.pollLast(), "addLast/pollLast should be symmetric"); + org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after symmetric operations"); + } }