@@ -109,4 +109,189 @@ void testMemoryLimitExceeded() {
109
109
}
110
110
});
111
111
}
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
+ }
112
297
}
0 commit comments