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