Skip to content

Commit 2722b0e

Browse files
testing: improving SkipListTest (#6411)
* testing: improving SkipListTest * style: fixed formatting --------- Co-authored-by: Deniz Altunkapan <93663085+DenizAltunkapan@users.noreply.github.com>
1 parent 75298bb commit 2722b0e

File tree

1 file changed

+62
-57
lines changed

1 file changed

+62
-57
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
}

0 commit comments

Comments
 (0)