Skip to content

Commit 7e3fbae

Browse files
testing: improve SortStackTest (TheAlgorithms#6422)
testing: improve SortStackTest Co-authored-by: Deniz Altunkapan <93663085+DenizAltunkapan@users.noreply.github.com>
1 parent 073b6f1 commit 7e3fbae

File tree

1 file changed

+183
-0
lines changed

1 file changed

+183
-0
lines changed

src/test/java/com/thealgorithms/stacks/SortStackTest.java

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,187 @@ public void testSortWithDuplicateElements() {
7474
assertEquals(2, (int) stack.pop());
7575
assertEquals(1, (int) stack.pop());
7676
}
77+
78+
@Test
79+
public void testSortReverseSortedStack() {
80+
// Test worst case scenario - completely reverse sorted
81+
stack.push(5);
82+
stack.push(4);
83+
stack.push(3);
84+
stack.push(2);
85+
stack.push(1);
86+
SortStack.sortStack(stack);
87+
88+
assertEquals(5, stack.size());
89+
assertEquals(5, (int) stack.pop());
90+
assertEquals(4, (int) stack.pop());
91+
assertEquals(3, (int) stack.pop());
92+
assertEquals(2, (int) stack.pop());
93+
assertEquals(1, (int) stack.pop());
94+
}
95+
96+
@Test
97+
public void testSortWithAllSameElements() {
98+
// Test stack with all identical elements
99+
stack.push(7);
100+
stack.push(7);
101+
stack.push(7);
102+
stack.push(7);
103+
SortStack.sortStack(stack);
104+
105+
assertEquals(4, stack.size());
106+
assertEquals(7, (int) stack.pop());
107+
assertEquals(7, (int) stack.pop());
108+
assertEquals(7, (int) stack.pop());
109+
assertEquals(7, (int) stack.pop());
110+
}
111+
112+
@Test
113+
public void testSortWithNegativeNumbers() {
114+
// Test with negative numbers
115+
stack.push(-3);
116+
stack.push(1);
117+
stack.push(-5);
118+
stack.push(2);
119+
stack.push(-1);
120+
SortStack.sortStack(stack);
121+
122+
assertEquals(5, stack.size());
123+
assertEquals(2, (int) stack.pop());
124+
assertEquals(1, (int) stack.pop());
125+
assertEquals(-1, (int) stack.pop());
126+
assertEquals(-3, (int) stack.pop());
127+
assertEquals(-5, (int) stack.pop());
128+
}
129+
130+
@Test
131+
public void testSortWithAllNegativeNumbers() {
132+
// Test with only negative numbers
133+
stack.push(-10);
134+
stack.push(-5);
135+
stack.push(-15);
136+
stack.push(-1);
137+
SortStack.sortStack(stack);
138+
139+
assertEquals(4, stack.size());
140+
assertEquals(-1, (int) stack.pop());
141+
assertEquals(-5, (int) stack.pop());
142+
assertEquals(-10, (int) stack.pop());
143+
assertEquals(-15, (int) stack.pop());
144+
}
145+
146+
@Test
147+
public void testSortWithZero() {
148+
// Test with zero included
149+
stack.push(3);
150+
stack.push(0);
151+
stack.push(-2);
152+
stack.push(1);
153+
SortStack.sortStack(stack);
154+
155+
assertEquals(4, stack.size());
156+
assertEquals(3, (int) stack.pop());
157+
assertEquals(1, (int) stack.pop());
158+
assertEquals(0, (int) stack.pop());
159+
assertEquals(-2, (int) stack.pop());
160+
}
161+
162+
@Test
163+
public void testSortLargerStack() {
164+
// Test with a larger number of elements
165+
int[] values = {15, 3, 9, 1, 12, 6, 18, 4, 11, 8};
166+
for (int value : values) {
167+
stack.push(value);
168+
}
169+
170+
SortStack.sortStack(stack);
171+
172+
assertEquals(10, stack.size());
173+
174+
// Verify sorted order (largest to smallest when popping)
175+
int[] expectedOrder = {18, 15, 12, 11, 9, 8, 6, 4, 3, 1};
176+
for (int expected : expectedOrder) {
177+
assertEquals(expected, (int) stack.pop());
178+
}
179+
}
180+
181+
@Test
182+
public void testSortTwoElements() {
183+
// Test edge case with exactly two elements
184+
stack.push(5);
185+
stack.push(2);
186+
SortStack.sortStack(stack);
187+
188+
assertEquals(2, stack.size());
189+
assertEquals(5, (int) stack.pop());
190+
assertEquals(2, (int) stack.pop());
191+
}
192+
193+
@Test
194+
public void testSortTwoElementsAlreadySorted() {
195+
// Test two elements already in correct order
196+
stack.push(2);
197+
stack.push(5);
198+
SortStack.sortStack(stack);
199+
200+
assertEquals(2, stack.size());
201+
assertEquals(5, (int) stack.pop());
202+
assertEquals(2, (int) stack.pop());
203+
}
204+
205+
@Test
206+
public void testSortStackWithMinAndMaxValues() {
207+
// Test with Integer.MAX_VALUE and Integer.MIN_VALUE
208+
stack.push(0);
209+
stack.push(Integer.MAX_VALUE);
210+
stack.push(Integer.MIN_VALUE);
211+
stack.push(100);
212+
SortStack.sortStack(stack);
213+
214+
assertEquals(4, stack.size());
215+
assertEquals(Integer.MAX_VALUE, (int) stack.pop());
216+
assertEquals(100, (int) stack.pop());
217+
assertEquals(0, (int) stack.pop());
218+
assertEquals(Integer.MIN_VALUE, (int) stack.pop());
219+
}
220+
221+
@Test
222+
public void testSortWithManyDuplicates() {
223+
// Test with multiple sets of duplicates
224+
stack.push(3);
225+
stack.push(1);
226+
stack.push(3);
227+
stack.push(1);
228+
stack.push(2);
229+
stack.push(2);
230+
stack.push(3);
231+
SortStack.sortStack(stack);
232+
233+
assertEquals(7, stack.size());
234+
assertEquals(3, (int) stack.pop());
235+
assertEquals(3, (int) stack.pop());
236+
assertEquals(3, (int) stack.pop());
237+
assertEquals(2, (int) stack.pop());
238+
assertEquals(2, (int) stack.pop());
239+
assertEquals(1, (int) stack.pop());
240+
assertEquals(1, (int) stack.pop());
241+
}
242+
243+
@Test
244+
public void testOriginalStackIsModified() {
245+
// Verify that the original stack is modified, not a copy
246+
Stack<Integer> originalReference = stack;
247+
stack.push(3);
248+
stack.push(1);
249+
stack.push(2);
250+
251+
SortStack.sortStack(stack);
252+
253+
// Verify it's the same object reference
254+
assertTrue(stack == originalReference);
255+
assertEquals(3, stack.size());
256+
assertEquals(3, (int) stack.pop());
257+
assertEquals(2, (int) stack.pop());
258+
assertEquals(1, (int) stack.pop());
259+
}
77260
}

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