Skip to content

Commit fc07cd8

Browse files
authored
testing: improve test coverage StackOfLinkedListTest (#6430)
* testing: improve test coverage StackOfLinkedListTest * testing: fix spotbugs
1 parent 4f16ad0 commit fc07cd8

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

src/test/java/com/thealgorithms/datastructures/stacks/StackOfLinkedListTest.java

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,104 @@ public void testSequentialPushAndPop() {
118118
}
119119
assertTrue(stack.isEmpty(), "Stack should be empty after popping all elements");
120120
}
121+
122+
@Test
123+
public void testPushZeroAndNegativeValues() {
124+
stack.push(0);
125+
stack.push(-1);
126+
stack.push(-1);
127+
128+
assertEquals(-1, stack.pop(), "Should handle negative values correctly");
129+
assertEquals(-1, stack.pop(), "Should handle negative values correctly");
130+
assertEquals(0, stack.pop(), "Should handle zero value correctly");
131+
}
132+
133+
@Test
134+
public void testPushDuplicateValues() {
135+
stack.push(1);
136+
stack.push(1);
137+
stack.push(1);
138+
139+
assertEquals(3, stack.getSize(), "Should allow duplicate values");
140+
assertEquals(1, stack.pop());
141+
assertEquals(1, stack.pop());
142+
assertEquals(1, stack.pop());
143+
}
144+
145+
@Test
146+
public void testPushAfterEmptyingStack() {
147+
stack.push(1);
148+
stack.push(2);
149+
stack.pop();
150+
stack.pop();
151+
152+
assertTrue(stack.isEmpty(), "Stack should be empty");
153+
154+
stack.push(10);
155+
assertEquals(10, stack.peek(), "Should work correctly after emptying and refilling");
156+
assertEquals(1, stack.getSize(), "Size should be correct after refilling");
157+
}
158+
159+
@Test
160+
public void testPeekDoesNotModifyStack() {
161+
stack.push(1);
162+
163+
int firstPeek = stack.peek();
164+
int secondPeek = stack.peek();
165+
int thirdPeek = stack.peek();
166+
167+
assertEquals(firstPeek, secondPeek, "Multiple peeks should return same value");
168+
assertEquals(secondPeek, thirdPeek, "Multiple peeks should return same value");
169+
assertEquals(1, stack.getSize(), "Peek should not modify stack size");
170+
assertEquals(1, stack.pop(), "Element should still be poppable after peeking");
171+
}
172+
173+
@Test
174+
public void testAlternatingPushAndPop() {
175+
stack.push(1);
176+
assertEquals(1, stack.pop());
177+
178+
stack.push(2);
179+
stack.push(3);
180+
assertEquals(3, stack.pop());
181+
182+
stack.push(4);
183+
assertEquals(4, stack.pop());
184+
assertEquals(2, stack.pop());
185+
186+
assertTrue(stack.isEmpty(), "Stack should be empty after alternating operations");
187+
}
188+
189+
@Test
190+
public void testToStringWithSingleElement() {
191+
stack.push(42);
192+
assertEquals("42", stack.toString(), "String representation with single element should not have arrows");
193+
}
194+
195+
@Test
196+
public void testStackIntegrity() {
197+
// Test that internal state remains consistent
198+
for (int i = 0; i < 10; i++) {
199+
stack.push(i);
200+
assertEquals(i + 1, stack.getSize(), "Size should be consistent during pushes");
201+
assertEquals(i, stack.peek(), "Peek should return last pushed value");
202+
}
203+
204+
for (int i = 9; i >= 0; i--) {
205+
assertEquals(i, stack.peek(), "Peek should return correct value before pop");
206+
assertEquals(i, stack.pop(), "Pop should return values in LIFO order");
207+
assertEquals(i, stack.getSize(), "Size should be consistent during pops");
208+
}
209+
}
210+
211+
@Test
212+
public void testMixedDataTypes() {
213+
// If your stack supports Object types, test with different data types
214+
215+
stack.push(1);
216+
stack.push(2);
217+
218+
assertEquals(Integer.valueOf(2), stack.pop());
219+
assertEquals(Integer.valueOf(1), stack.pop());
220+
}
121221
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy