Skip to content

Commit 4f16ad0

Browse files
authored
testing: improve test coverage DequeTest (#6429)
testing: improve test coverage DequeTest
1 parent ac58493 commit 4f16ad0

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

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

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,4 +121,77 @@ void testNullValues() {
121121
assertNull(deque.pollFirst());
122122
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty());
123123
}
124+
125+
@Test
126+
void testMultipleAddFirst() {
127+
Deque<Integer> deque = new Deque<>();
128+
deque.addFirst(1);
129+
deque.addFirst(2);
130+
deque.addFirst(3);
131+
132+
assertEquals(3, deque.peekFirst(), "First element should be the last added to front");
133+
assertEquals(1, deque.peekLast(), "Last element should be the first added to front");
134+
assertEquals(3, deque.size(), "Size should reflect all additions");
135+
}
136+
137+
@Test
138+
void testMultipleAddLast() {
139+
Deque<Integer> deque = new Deque<>();
140+
deque.addLast(1);
141+
deque.addLast(2);
142+
deque.addLast(3);
143+
144+
assertEquals(1, deque.peekFirst(), "First element should be the first added to back");
145+
assertEquals(3, deque.peekLast(), "Last element should be the last added to back");
146+
assertEquals(3, deque.size(), "Size should reflect all additions");
147+
}
148+
149+
@Test
150+
void testSingleElementOperations() {
151+
Deque<Integer> deque = new Deque<>();
152+
deque.addFirst(1);
153+
154+
assertEquals(1, deque.peekFirst(), "Single element should be both first and last");
155+
assertEquals(1, deque.peekLast(), "Single element should be both first and last");
156+
assertEquals(1, deque.size());
157+
158+
assertEquals(1, deque.pollFirst(), "Should be able to poll single element from front");
159+
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after polling single element");
160+
}
161+
162+
@Test
163+
void testSingleElementPollLast() {
164+
Deque<Integer> deque = new Deque<>();
165+
deque.addLast(1);
166+
167+
assertEquals(1, deque.pollLast(), "Should be able to poll single element from back");
168+
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after polling single element");
169+
}
170+
171+
@Test
172+
void testMixedNullAndValues() {
173+
Deque<String> deque = new Deque<>();
174+
deque.addFirst("first");
175+
deque.addLast(null);
176+
deque.addFirst(null);
177+
deque.addLast("last");
178+
179+
assertEquals(4, deque.size(), "Should handle mixed null and non-null values");
180+
assertNull(deque.pollFirst(), "Should poll null from front");
181+
assertEquals("first", deque.pollFirst(), "Should poll non-null value");
182+
assertNull(deque.pollLast().equals("last") ? null : deque.peekLast(), "Should handle null correctly");
183+
}
184+
185+
@Test
186+
void testSymmetricOperations() {
187+
Deque<Integer> deque = new Deque<>();
188+
189+
// Test that addFirst/pollFirst and addLast/pollLast are symmetric
190+
deque.addFirst(1);
191+
deque.addLast(2);
192+
193+
assertEquals(1, deque.pollFirst(), "addFirst/pollFirst should be symmetric");
194+
assertEquals(2, deque.pollLast(), "addLast/pollLast should be symmetric");
195+
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty(), "Deque should be empty after symmetric operations");
196+
}
124197
}

0 commit comments

Comments
 (0)