Skip to content

Commit 8c1beaa

Browse files
Merge branch 'master' into my_algorithm
2 parents 5328d9a + 2722b0e commit 8c1beaa

File tree

3 files changed

+120
-64
lines changed

3 files changed

+120
-64
lines changed
Lines changed: 62 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,115 @@
11
package com.thealgorithms.datastructures.lists;
22

3-
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
43
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
55
import static org.junit.jupiter.api.Assertions.assertTrue;
66

77
import java.util.Arrays;
88
import java.util.stream.IntStream;
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.DisplayName;
911
import org.junit.jupiter.api.Test;
1012

1113
class SkipListTest {
1214

15+
private SkipList<String> skipList;
16+
17+
@BeforeEach
18+
void setUp() {
19+
skipList = new SkipList<>();
20+
}
21+
1322
@Test
14-
void add() {
15-
SkipList<String> skipList = new SkipList<>();
23+
@DisplayName("Add element and verify size and retrieval")
24+
void testAdd() {
1625
assertEquals(0, skipList.size());
1726

1827
skipList.add("value");
1928

20-
print(skipList);
2129
assertEquals(1, skipList.size());
30+
assertEquals("value", skipList.get(0));
2231
}
2332

2433
@Test
25-
void get() {
26-
SkipList<String> skipList = new SkipList<>();
34+
@DisplayName("Get retrieves correct element by index")
35+
void testGet() {
2736
skipList.add("value");
28-
29-
String actualValue = skipList.get(0);
30-
31-
print(skipList);
32-
assertEquals("value", actualValue);
37+
assertEquals("value", skipList.get(0));
3338
}
3439

3540
@Test
36-
void contains() {
37-
SkipList<String> skipList = createSkipList();
38-
print(skipList);
39-
40-
boolean contains = skipList.contains("b");
41-
42-
assertTrue(contains);
41+
@DisplayName("Contains returns true if element exists")
42+
void testContains() {
43+
skipList = createSkipList();
44+
assertTrue(skipList.contains("b"));
45+
assertTrue(skipList.contains("a"));
46+
assertFalse(skipList.contains("z")); // negative test
4347
}
4448

4549
@Test
46-
void removeFromHead() {
47-
SkipList<String> skipList = createSkipList();
48-
String mostLeftElement = skipList.get(0);
50+
@DisplayName("Remove element from head and check size and order")
51+
void testRemoveFromHead() {
52+
skipList = createSkipList();
53+
String first = skipList.get(0);
4954
int initialSize = skipList.size();
50-
print(skipList);
5155

52-
skipList.remove(mostLeftElement);
56+
skipList.remove(first);
5357

54-
print(skipList);
5558
assertEquals(initialSize - 1, skipList.size());
59+
assertFalse(skipList.contains(first));
5660
}
5761

5862
@Test
59-
void removeFromTail() {
60-
SkipList<String> skipList = createSkipList();
61-
String mostRightValue = skipList.get(skipList.size() - 1);
63+
@DisplayName("Remove element from tail and check size and order")
64+
void testRemoveFromTail() {
65+
skipList = createSkipList();
66+
String last = skipList.get(skipList.size() - 1);
6267
int initialSize = skipList.size();
63-
print(skipList);
6468

65-
skipList.remove(mostRightValue);
69+
skipList.remove(last);
6670

67-
print(skipList);
6871
assertEquals(initialSize - 1, skipList.size());
72+
assertFalse(skipList.contains(last));
6973
}
7074

7175
@Test
72-
void checkSortedOnLowestLayer() {
73-
SkipList<String> skipList = new SkipList<>();
76+
@DisplayName("Elements should be sorted at base level")
77+
void testSortedOrderOnBaseLevel() {
7478
String[] values = {"d", "b", "a", "c"};
7579
Arrays.stream(values).forEach(skipList::add);
76-
print(skipList);
7780

7881
String[] actualOrder = IntStream.range(0, values.length).mapToObj(skipList::get).toArray(String[] ::new);
7982

80-
assertArrayEquals(new String[] {"a", "b", "c", "d"}, actualOrder);
83+
org.junit.jupiter.api.Assertions.assertArrayEquals(new String[] {"a", "b", "c", "d"}, actualOrder);
8184
}
8285

83-
private SkipList<String> createSkipList() {
84-
SkipList<String> skipList = new SkipList<>();
85-
String[] values = {
86-
"a",
87-
"b",
88-
"c",
89-
"d",
90-
"e",
91-
"f",
92-
"g",
93-
"h",
94-
"i",
95-
"j",
96-
"k",
97-
};
86+
@Test
87+
@DisplayName("Duplicate elements can be added and count correctly")
88+
void testAddDuplicates() {
89+
skipList.add("x");
90+
skipList.add("x");
91+
assertEquals(2, skipList.size());
92+
assertEquals("x", skipList.get(0));
93+
assertEquals("x", skipList.get(1));
94+
}
95+
96+
@Test
97+
@DisplayName("Add multiple and remove all")
98+
void testClearViaRemovals() {
99+
String[] values = {"a", "b", "c"};
98100
Arrays.stream(values).forEach(skipList::add);
99-
return skipList;
101+
102+
for (String v : values) {
103+
skipList.remove(v);
104+
}
105+
106+
assertEquals(0, skipList.size());
100107
}
101108

102-
/**
103-
* Print Skip List representation to console.
104-
* Optional method not involved in testing process. Used only for visualisation purposes.
105-
* @param skipList to print
106-
*/
107-
private void print(SkipList<?> skipList) {
108-
System.out.println(skipList);
109+
private SkipList<String> createSkipList() {
110+
SkipList<String> s = new SkipList<>();
111+
String[] values = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"};
112+
Arrays.stream(values).forEach(s::add);
113+
return s;
109114
}
110115
}

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,38 @@ void testToString() {
8787
deque.addFirst(5);
8888
assertEquals("Head -> 5 <-> 10 <-> 20 <- Tail", deque.toString());
8989
}
90+
91+
@Test
92+
void testAlternatingAddRemove() {
93+
Deque<Integer> deque = new Deque<>();
94+
deque.addFirst(1);
95+
deque.addLast(2);
96+
deque.addFirst(0);
97+
assertEquals(0, deque.pollFirst());
98+
assertEquals(2, deque.pollLast());
99+
assertEquals(1, deque.pollFirst());
100+
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty());
101+
}
102+
103+
@Test
104+
void testSizeAfterOperations() {
105+
Deque<Integer> deque = new Deque<>();
106+
assertEquals(0, deque.size());
107+
deque.addFirst(1);
108+
deque.addLast(2);
109+
deque.addFirst(3);
110+
assertEquals(3, deque.size());
111+
deque.pollFirst();
112+
deque.pollLast();
113+
assertEquals(1, deque.size());
114+
}
115+
116+
@Test
117+
void testNullValues() {
118+
Deque<String> deque = new Deque<>();
119+
deque.addFirst(null);
120+
assertNull(deque.peekFirst());
121+
assertNull(deque.pollFirst());
122+
org.junit.jupiter.api.Assertions.assertTrue(deque.isEmpty());
123+
}
90124
}

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

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,41 @@
44
import static org.junit.jupiter.api.Assertions.assertThrows;
55

66
import java.util.EmptyStackException;
7+
import org.junit.jupiter.api.DisplayName;
78
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.params.ParameterizedTest;
10+
import org.junit.jupiter.params.provider.CsvSource;
811

912
public class PostfixEvaluatorTest {
1013

11-
@Test
12-
public void testValidExpressions() {
13-
assertEquals(22, PostfixEvaluator.evaluatePostfix("5 6 + 2 *"));
14-
assertEquals(27, PostfixEvaluator.evaluatePostfix("7 2 + 3 *"));
15-
assertEquals(3, PostfixEvaluator.evaluatePostfix("10 5 / 1 +"));
14+
@ParameterizedTest(name = "Expression: \"{0}\" → Result: {1}")
15+
@CsvSource({"'5 6 + 2 *', 22", "'7 2 + 3 *', 27", "'10 5 / 1 +', 3", "'8', 8", "'3 4 +', 7"})
16+
@DisplayName("Valid postfix expressions")
17+
void testValidExpressions(String expression, int expected) {
18+
assertEquals(expected, PostfixEvaluator.evaluatePostfix(expression));
1619
}
1720

1821
@Test
19-
public void testInvalidExpression() {
22+
@DisplayName("Should throw EmptyStackException for incomplete expression")
23+
void testInvalidExpression() {
2024
assertThrows(EmptyStackException.class, () -> PostfixEvaluator.evaluatePostfix("5 +"));
2125
}
2226

2327
@Test
24-
public void testMoreThanOneStackSizeAfterEvaluation() {
28+
@DisplayName("Should throw IllegalArgumentException for extra operands")
29+
void testExtraOperands() {
2530
assertThrows(IllegalArgumentException.class, () -> PostfixEvaluator.evaluatePostfix("5 6 + 2 * 3"));
2631
}
32+
33+
@Test
34+
@DisplayName("Should throw ArithmeticException for division by zero")
35+
void testDivisionByZero() {
36+
assertThrows(ArithmeticException.class, () -> PostfixEvaluator.evaluatePostfix("1 0 /"));
37+
}
38+
39+
@Test
40+
@DisplayName("Should throw IllegalArgumentException for invalid characters")
41+
void testInvalidToken() {
42+
assertThrows(IllegalArgumentException.class, () -> PostfixEvaluator.evaluatePostfix("1 a +"));
43+
}
2744
}

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