Skip to content

Commit ac58493

Browse files
authored
testing: improve test coverage CursorLinkedListTest (#6428)
* testing: improve test coverage CursorLinkedListTest * style: fix checkstyle formatting
1 parent ec7b654 commit ac58493

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed

src/test/java/com/thealgorithms/datastructures/lists/CursorLinkedListTest.java

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,189 @@ void testMemoryLimitExceeded() {
109109
}
110110
});
111111
}
112+
113+
@Test
114+
void testSingleElementOperations() {
115+
// Test operations with just one element
116+
list.append("Only");
117+
assertEquals("Only", list.get(0));
118+
assertEquals(0, list.indexOf("Only"));
119+
120+
list.remove("Only");
121+
assertNull(list.get(0));
122+
assertEquals(-1, list.indexOf("Only"));
123+
}
124+
125+
@Test
126+
void testDuplicateElements() {
127+
// Test handling of duplicate elements
128+
list.append("Duplicate");
129+
list.append("Other");
130+
list.append("Duplicate");
131+
132+
assertEquals(0, list.indexOf("Duplicate")); // Should return first occurrence
133+
assertEquals("Duplicate", list.get(0));
134+
assertEquals("Duplicate", list.get(2));
135+
136+
list.remove("Duplicate"); // Should remove first occurrence
137+
assertEquals("Other", list.get(0));
138+
assertEquals("Duplicate", list.get(1));
139+
}
140+
141+
@Test
142+
void testRemoveByIndexEdgeCases() {
143+
list.append("First");
144+
list.append("Second");
145+
list.append("Third");
146+
147+
// Test removing invalid indices
148+
list.removeByIndex(-1); // Should not crash
149+
list.removeByIndex(10); // Should not crash
150+
151+
// Verify list unchanged
152+
assertEquals("First", list.get(0));
153+
assertEquals("Second", list.get(1));
154+
assertEquals("Third", list.get(2));
155+
156+
// Test removing first element by index
157+
list.removeByIndex(0);
158+
assertEquals("Second", list.get(0));
159+
assertEquals("Third", list.get(1));
160+
}
161+
162+
@Test
163+
void testRemoveByIndexLastElement() {
164+
list.append("First");
165+
list.append("Second");
166+
list.append("Third");
167+
168+
// Remove last element by index
169+
list.removeByIndex(2);
170+
assertEquals("First", list.get(0));
171+
assertEquals("Second", list.get(1));
172+
assertNull(list.get(2));
173+
}
174+
175+
@Test
176+
void testConsecutiveOperations() {
177+
// Test multiple consecutive operations
178+
list.append("A");
179+
list.append("B");
180+
list.append("C");
181+
list.append("D");
182+
183+
list.remove("B");
184+
list.remove("D");
185+
186+
assertEquals("A", list.get(0));
187+
assertEquals("C", list.get(1));
188+
assertNull(list.get(2));
189+
190+
list.append("E");
191+
assertEquals("E", list.get(2));
192+
}
193+
194+
@Test
195+
void testMemoryReclamation() {
196+
// Test that removed elements free up memory space
197+
for (int i = 0; i < 50; i++) {
198+
list.append("Element" + i);
199+
}
200+
201+
// Remove some elements
202+
for (int i = 0; i < 25; i++) {
203+
list.remove("Element" + i);
204+
}
205+
206+
// Should be able to add more elements (testing memory reclamation)
207+
for (int i = 100; i < 150; i++) {
208+
list.append("New" + i);
209+
}
210+
211+
// Verify some elements exist
212+
assertEquals("Element25", list.get(0));
213+
assertEquals("New100", list.get(25));
214+
}
215+
216+
@Test
217+
void testSpecialCharacters() {
218+
// Test with strings containing special characters
219+
list.append("Hello World!");
220+
list.append("Test@123");
221+
list.append("Special#$%");
222+
list.append(""); // Empty string
223+
224+
assertEquals("Hello World!", list.get(0));
225+
assertEquals("Test@123", list.get(1));
226+
assertEquals("Special#$%", list.get(2));
227+
assertEquals("", list.get(3));
228+
229+
assertEquals(3, list.indexOf(""));
230+
}
231+
232+
@Test
233+
void testLargeIndices() {
234+
list.append("Test");
235+
236+
// Test very large indices
237+
assertNull(list.get(Integer.MAX_VALUE));
238+
assertNull(list.get(1000));
239+
}
240+
241+
@Test
242+
void testSequentialRemovalByIndex() {
243+
list.append("A");
244+
list.append("B");
245+
list.append("C");
246+
list.append("D");
247+
248+
// Remove elements sequentially by index
249+
list.removeByIndex(1); // Remove "B"
250+
assertEquals("A", list.get(0));
251+
assertEquals("C", list.get(1));
252+
assertEquals("D", list.get(2));
253+
254+
list.removeByIndex(1); // Remove "C"
255+
assertEquals("A", list.get(0));
256+
assertEquals("D", list.get(1));
257+
assertNull(list.get(2));
258+
}
259+
260+
@Test
261+
void testAppendAfterRemoval() {
262+
list.append("First");
263+
list.append("Second");
264+
265+
list.remove("First");
266+
list.append("Third");
267+
268+
assertEquals("Second", list.get(0));
269+
assertEquals("Third", list.get(1));
270+
assertEquals(1, list.indexOf("Third"));
271+
}
272+
273+
@Test
274+
void testPerformanceWithManyOperations() {
275+
// Test with many mixed operations
276+
for (int i = 0; i < 50; i++) {
277+
list.append("Item" + i);
278+
}
279+
280+
// Remove every other element
281+
for (int i = 0; i < 50; i += 2) {
282+
list.remove("Item" + i);
283+
}
284+
285+
// Verify remaining elements
286+
assertEquals("Item1", list.get(0));
287+
assertEquals("Item3", list.get(1));
288+
assertEquals("Item5", list.get(2));
289+
290+
// Add more elements
291+
for (int i = 100; i < 110; i++) {
292+
list.append("New" + i);
293+
}
294+
295+
assertEquals("New100", list.get(25));
296+
}
112297
}

0 commit comments

Comments
 (0)