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)
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