|
1 | 1 | package com.thealgorithms.stacks;
|
2 | 2 |
|
3 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
| 4 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
4 | 5 |
|
| 6 | +import java.util.EmptyStackException; |
5 | 7 | import org.junit.jupiter.api.Test;
|
6 | 8 |
|
7 | 9 | public class MinStackUsingTwoStacksTest {
|
8 | 10 |
|
9 | 11 | @Test
|
10 |
| - public void testMinStackOperations() { |
| 12 | + public void testBasicOperations() { |
11 | 13 | MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks();
|
12 | 14 | minStack.push(3);
|
13 | 15 | minStack.push(5);
|
14 |
| - assertEquals(3, minStack.getMin()); |
| 16 | + assertEquals(3, minStack.getMin(), "Min should be 3"); |
15 | 17 |
|
16 | 18 | minStack.push(2);
|
17 | 19 | minStack.push(1);
|
18 |
| - assertEquals(1, minStack.getMin()); |
| 20 | + assertEquals(1, minStack.getMin(), "Min should be 1"); |
19 | 21 |
|
20 | 22 | minStack.pop();
|
21 |
| - assertEquals(2, minStack.getMin()); |
| 23 | + assertEquals(2, minStack.getMin(), "Min should be 2 after popping 1"); |
| 24 | + |
| 25 | + assertEquals(2, minStack.top(), "Top should be 2"); |
| 26 | + } |
| 27 | + |
| 28 | + @Test |
| 29 | + public void testPushDuplicateMins() { |
| 30 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 31 | + minStack.push(2); |
| 32 | + minStack.push(2); |
| 33 | + minStack.push(1); |
| 34 | + minStack.push(1); |
| 35 | + assertEquals(1, minStack.getMin(), "Min should be 1"); |
| 36 | + |
| 37 | + minStack.pop(); |
| 38 | + assertEquals(1, minStack.getMin(), "Min should still be 1 after popping one 1"); |
| 39 | + |
| 40 | + minStack.pop(); |
| 41 | + assertEquals(2, minStack.getMin(), "Min should be 2 after popping both 1s"); |
| 42 | + |
| 43 | + minStack.pop(); |
| 44 | + assertEquals(2, minStack.getMin(), "Min should still be 2 after popping one 2"); |
| 45 | + |
| 46 | + minStack.pop(); |
| 47 | + // Now stack is empty, expect exception on getMin |
| 48 | + assertThrows(EmptyStackException.class, minStack::getMin); |
22 | 49 | }
|
23 | 50 |
|
24 | 51 | @Test
|
25 |
| - public void testMinStackOperations2() { |
| 52 | + public void testPopOnEmptyStack() { |
26 | 53 | MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks();
|
| 54 | + assertThrows(EmptyStackException.class, minStack::pop); |
| 55 | + } |
| 56 | + |
| 57 | + @Test |
| 58 | + public void testTopOnEmptyStack() { |
| 59 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 60 | + assertThrows(EmptyStackException.class, minStack::top); |
| 61 | + } |
| 62 | + |
| 63 | + @Test |
| 64 | + public void testGetMinOnEmptyStack() { |
| 65 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 66 | + assertThrows(EmptyStackException.class, minStack::getMin); |
| 67 | + } |
| 68 | + |
| 69 | + @Test |
| 70 | + public void testSingleElementStack() { |
| 71 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 72 | + minStack.push(10); |
| 73 | + assertEquals(10, minStack.getMin()); |
| 74 | + assertEquals(10, minStack.top()); |
| 75 | + |
| 76 | + minStack.pop(); |
| 77 | + assertThrows(EmptyStackException.class, minStack::getMin); |
| 78 | + } |
| 79 | + |
| 80 | + @Test |
| 81 | + public void testIncreasingSequence() { |
| 82 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 83 | + minStack.push(1); |
| 84 | + minStack.push(2); |
27 | 85 | minStack.push(3);
|
28 |
| - minStack.push(5); |
29 |
| - assertEquals(3, minStack.getMin()); |
| 86 | + minStack.push(4); |
| 87 | + |
| 88 | + assertEquals(1, minStack.getMin()); |
| 89 | + assertEquals(4, minStack.top()); |
| 90 | + |
| 91 | + minStack.pop(); |
| 92 | + minStack.pop(); |
| 93 | + assertEquals(1, minStack.getMin()); |
| 94 | + assertEquals(2, minStack.top()); |
| 95 | + } |
30 | 96 |
|
| 97 | + @Test |
| 98 | + public void testDecreasingSequence() { |
| 99 | + MinStackUsingTwoStacks minStack = new MinStackUsingTwoStacks(); |
| 100 | + minStack.push(4); |
| 101 | + minStack.push(3); |
31 | 102 | minStack.push(2);
|
32 | 103 | minStack.push(1);
|
| 104 | + |
33 | 105 | assertEquals(1, minStack.getMin());
|
| 106 | + assertEquals(1, minStack.top()); |
34 | 107 |
|
35 | 108 | minStack.pop();
|
36 | 109 | assertEquals(2, minStack.getMin());
|
| 110 | + assertEquals(2, minStack.top()); |
37 | 111 | }
|
38 | 112 | }
|
0 commit comments