ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArrayListTest.java
Revision: 1.27
Committed: Wed Nov 30 05:42:38 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.26: +31 -9 lines
Log Message:
improve testIterator, testToString

File Contents

# User Rev Content
1 dl 1.1 /*
2 dl 1.6 * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain, as explained at
4 jsr166 1.19 * http://creativecommons.org/publicdomain/zero/1.0/
5 jsr166 1.8 * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 dl 1.1 */
8    
9     import junit.framework.*;
10 jsr166 1.27 import java.util.ArrayList;
11 jsr166 1.22 import java.util.Arrays;
12 jsr166 1.26 import java.util.Collection;
13     import java.util.Collections;
14 jsr166 1.22 import java.util.Iterator;
15     import java.util.LinkedList;
16     import java.util.List;
17     import java.util.ListIterator;
18 jsr166 1.27 import java.util.NoSuchElementException;
19 jsr166 1.22 import java.util.Vector;
20     import java.util.concurrent.CopyOnWriteArrayList;
21 dl 1.1
22 jsr166 1.10 public class CopyOnWriteArrayListTest extends JSR166TestCase {
23 jsr166 1.8
24 dl 1.1 public static void main(String[] args) {
25 jsr166 1.17 junit.textui.TestRunner.run(suite());
26 dl 1.1 }
27    
28     public static Test suite() {
29 jsr166 1.11 return new TestSuite(CopyOnWriteArrayListTest.class);
30 dl 1.1 }
31    
32 jsr166 1.25 static CopyOnWriteArrayList<Integer> populatedArray(int n) {
33 jsr166 1.26 CopyOnWriteArrayList<Integer> a = new CopyOnWriteArrayList<Integer>();
34 dl 1.1 assertTrue(a.isEmpty());
35 jsr166 1.26 for (int i = 0; i < n; i++)
36 jsr166 1.25 a.add(i);
37 dl 1.1 assertFalse(a.isEmpty());
38     assertEquals(n, a.size());
39     return a;
40     }
41    
42 jsr166 1.26 static CopyOnWriteArrayList<Integer> populatedArray(Integer[] elements) {
43     CopyOnWriteArrayList<Integer> a = new CopyOnWriteArrayList<Integer>();
44     assertTrue(a.isEmpty());
45     for (int i = 0; i < elements.length; i++)
46     a.add(elements[i]);
47     assertFalse(a.isEmpty());
48     assertEquals(elements.length, a.size());
49     return a;
50     }
51    
52 dl 1.4 /**
53 dl 1.5 * a new list is empty
54 dl 1.4 */
55 dl 1.3 public void testConstructor() {
56 jsr166 1.11 CopyOnWriteArrayList a = new CopyOnWriteArrayList();
57 dl 1.3 assertTrue(a.isEmpty());
58     }
59    
60 dl 1.4 /**
61 dl 1.5 * new list contains all elements of initializing array
62 dl 1.4 */
63 dl 1.3 public void testConstructor2() {
64     Integer[] ints = new Integer[SIZE];
65     for (int i = 0; i < SIZE-1; ++i)
66     ints[i] = new Integer(i);
67 jsr166 1.11 CopyOnWriteArrayList a = new CopyOnWriteArrayList(ints);
68 jsr166 1.8 for (int i = 0; i < SIZE; ++i)
69 dl 1.3 assertEquals(ints[i], a.get(i));
70     }
71    
72 dl 1.4 /**
73 dl 1.5 * new list contains all elements of initializing collection
74 dl 1.4 */
75 dl 1.3 public void testConstructor3() {
76     Integer[] ints = new Integer[SIZE];
77     for (int i = 0; i < SIZE-1; ++i)
78     ints[i] = new Integer(i);
79 jsr166 1.11 CopyOnWriteArrayList a = new CopyOnWriteArrayList(Arrays.asList(ints));
80 jsr166 1.8 for (int i = 0; i < SIZE; ++i)
81 dl 1.3 assertEquals(ints[i], a.get(i));
82     }
83 jsr166 1.8
84 dl 1.1 /**
85 jsr166 1.18 * addAll adds each element from the given collection
86 dl 1.1 */
87 dl 1.4 public void testAddAll() {
88 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
89     Vector v = new Vector();
90     v.add(three);
91     v.add(four);
92     v.add(five);
93     full.addAll(v);
94     assertEquals(6, full.size());
95 dl 1.1 }
96    
97     /**
98 jsr166 1.18 * addAllAbsent adds each element from the given collection that did not
99     * already exist in the List
100 dl 1.1 */
101 dl 1.4 public void testAddAllAbsent() {
102 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
103     Vector v = new Vector();
104     v.add(three);
105     v.add(four);
106     v.add(one); // will not add this element
107     full.addAllAbsent(v);
108     assertEquals(5, full.size());
109 dl 1.1 }
110    
111     /**
112 jsr166 1.18 * addIfAbsent will not add the element if it already exists in the list
113 dl 1.1 */
114 dl 1.4 public void testAddIfAbsent() {
115 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(SIZE);
116     full.addIfAbsent(one);
117     assertEquals(SIZE, full.size());
118 dl 1.1 }
119    
120     /**
121 jsr166 1.18 * addIfAbsent adds the element when it does not exist in the list
122 dl 1.1 */
123 dl 1.4 public void testAddIfAbsent2() {
124 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(SIZE);
125 dl 1.3 full.addIfAbsent(three);
126     assertTrue(full.contains(three));
127 dl 1.1 }
128    
129     /**
130 jsr166 1.18 * clear removes all elements from the list
131 dl 1.1 */
132 dl 1.4 public void testClear() {
133 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(SIZE);
134     full.clear();
135     assertEquals(0, full.size());
136 dl 1.1 }
137    
138 dl 1.4 /**
139 jsr166 1.18 * Cloned list is equal
140 dl 1.4 */
141     public void testClone() {
142 jsr166 1.11 CopyOnWriteArrayList l1 = populatedArray(SIZE);
143     CopyOnWriteArrayList l2 = (CopyOnWriteArrayList)(l1.clone());
144 dl 1.4 assertEquals(l1, l2);
145 jsr166 1.11 l1.clear();
146 dl 1.4 assertFalse(l1.equals(l2));
147     }
148    
149 dl 1.1 /**
150 jsr166 1.18 * contains is true for added elements
151 dl 1.1 */
152 dl 1.4 public void testContains() {
153 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
154     assertTrue(full.contains(one));
155     assertFalse(full.contains(five));
156 dl 1.1 }
157    
158 dl 1.4 /**
159 dl 1.7 * adding at an index places it in the indicated index
160 dl 1.4 */
161 dl 1.1 public void testAddIndex() {
162 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
163 dl 1.3 full.add(0, m1);
164 dl 1.1 assertEquals(4, full.size());
165 dl 1.3 assertEquals(m1, full.get(0));
166     assertEquals(zero, full.get(1));
167 dl 1.1
168 dl 1.3 full.add(2, m2);
169 dl 1.1 assertEquals(5, full.size());
170 dl 1.3 assertEquals(m2, full.get(2));
171     assertEquals(two, full.get(4));
172 dl 1.1 }
173    
174 dl 1.4 /**
175 dl 1.5 * lists with same elements are equal and have same hashCode
176 dl 1.4 */
177 dl 1.1 public void testEquals() {
178 jsr166 1.11 CopyOnWriteArrayList a = populatedArray(3);
179     CopyOnWriteArrayList b = populatedArray(3);
180 dl 1.1 assertTrue(a.equals(b));
181     assertTrue(b.equals(a));
182     assertEquals(a.hashCode(), b.hashCode());
183 dl 1.3 a.add(m1);
184 dl 1.1 assertFalse(a.equals(b));
185     assertFalse(b.equals(a));
186 dl 1.3 b.add(m1);
187 dl 1.1 assertTrue(a.equals(b));
188     assertTrue(b.equals(a));
189     assertEquals(a.hashCode(), b.hashCode());
190     }
191    
192     /**
193 jsr166 1.18 * containsAll returns true for collection with subset of elements
194 dl 1.1 */
195 dl 1.4 public void testContainsAll() {
196 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
197     Vector v = new Vector();
198     v.add(one);
199     v.add(two);
200     assertTrue(full.containsAll(v));
201     v.add(six);
202     assertFalse(full.containsAll(v));
203 dl 1.1 }
204    
205     /**
206 jsr166 1.18 * get returns the value at the given index
207 dl 1.1 */
208 dl 1.4 public void testGet() {
209 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
210 jsr166 1.14 assertEquals(0, full.get(0));
211 dl 1.1 }
212    
213     /**
214 jsr166 1.18 * indexOf gives the index for the given object
215 dl 1.1 */
216 dl 1.4 public void testIndexOf() {
217 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
218     assertEquals(1, full.indexOf(one));
219     assertEquals(-1, full.indexOf("puppies"));
220 dl 1.1 }
221    
222     /**
223 jsr166 1.18 * indexOf gives the index based on the given index
224     * at which to start searching
225 dl 1.1 */
226 dl 1.4 public void testIndexOf2() {
227 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
228     assertEquals(1, full.indexOf(one, 0));
229     assertEquals(-1, full.indexOf(one, 2));
230 dl 1.1 }
231    
232     /**
233 jsr166 1.18 * isEmpty returns true when empty, else false
234 dl 1.1 */
235 dl 1.4 public void testIsEmpty() {
236 jsr166 1.11 CopyOnWriteArrayList empty = new CopyOnWriteArrayList();
237     CopyOnWriteArrayList full = populatedArray(SIZE);
238     assertTrue(empty.isEmpty());
239     assertFalse(full.isEmpty());
240 dl 1.1 }
241    
242     /**
243 jsr166 1.27 * iterator() returns an iterator containing the elements of the
244     * list in insertion order
245 dl 1.1 */
246 dl 1.4 public void testIterator() {
247 jsr166 1.27 Collection empty = new CopyOnWriteArrayList();
248     assertFalse(empty.iterator().hasNext());
249     try {
250     empty.iterator().next();
251     shouldThrow();
252     } catch (NoSuchElementException success) {}
253    
254     Integer[] elements = new Integer[SIZE];
255     for (int i = 0; i < SIZE; i++)
256     elements[i] = i;
257     Collections.shuffle(Arrays.asList(elements));
258     Collection<Integer> full = populatedArray(elements);
259    
260     Iterator it = full.iterator();
261     for (int j = 0; j < SIZE; j++) {
262     assertTrue(it.hasNext());
263     assertEquals(elements[j], it.next());
264     }
265     assertFalse(it.hasNext());
266     try {
267     it.next();
268     shouldThrow();
269     } catch (NoSuchElementException success) {}
270 dl 1.1 }
271    
272 dl 1.4 /**
273 dl 1.5 * iterator.remove throws UnsupportedOperationException
274 dl 1.4 */
275 jsr166 1.17 public void testIteratorRemove() {
276 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(SIZE);
277 dl 1.1 Iterator it = full.iterator();
278     it.next();
279     try {
280     it.remove();
281 dl 1.4 shouldThrow();
282 jsr166 1.12 } catch (UnsupportedOperationException success) {}
283 dl 1.1 }
284    
285 dl 1.4 /**
286 dl 1.5 * toString contains toString of elements
287 dl 1.4 */
288     public void testToString() {
289 jsr166 1.27 assertEquals("[]", new CopyOnWriteArrayList().toString());
290 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
291 dl 1.1 String s = full.toString();
292 jsr166 1.27 for (int i = 0; i < 3; ++i)
293 jsr166 1.20 assertTrue(s.contains(String.valueOf(i)));
294 jsr166 1.27 assertEquals(new ArrayList(full).toString(),
295     full.toString());
296 jsr166 1.8 }
297 dl 1.1
298     /**
299 jsr166 1.18 * lastIndexOf returns the index for the given object
300 dl 1.1 */
301 dl 1.4 public void testLastIndexOf1() {
302 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
303     full.add(one);
304     full.add(three);
305     assertEquals(3, full.lastIndexOf(one));
306     assertEquals(-1, full.lastIndexOf(six));
307 dl 1.1 }
308    
309     /**
310 jsr166 1.18 * lastIndexOf returns the index from the given starting point
311 dl 1.1 */
312 jsr166 1.21 public void testLastIndexOf2() {
313 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
314     full.add(one);
315     full.add(three);
316     assertEquals(3, full.lastIndexOf(one, 4));
317     assertEquals(-1, full.lastIndexOf(three, 3));
318 dl 1.1 }
319    
320     /**
321 jsr166 1.18 * listIterator traverses all elements
322 dl 1.1 */
323 dl 1.4 public void testListIterator1() {
324 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(SIZE);
325     ListIterator i = full.listIterator();
326     int j;
327     for (j = 0; i.hasNext(); j++)
328 jsr166 1.14 assertEquals(j, i.next());
329 jsr166 1.11 assertEquals(SIZE, j);
330 dl 1.1 }
331    
332     /**
333 jsr166 1.18 * listIterator only returns those elements after the given index
334 dl 1.1 */
335 dl 1.4 public void testListIterator2() {
336 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
337     ListIterator i = full.listIterator(1);
338     int j;
339     for (j = 0; i.hasNext(); j++)
340 jsr166 1.14 assertEquals(j+1, i.next());
341 jsr166 1.11 assertEquals(2, j);
342 dl 1.1 }
343    
344     /**
345 jsr166 1.18 * remove removes and returns the object at the given index
346 dl 1.1 */
347 dl 1.4 public void testRemove() {
348 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
349 jsr166 1.15 assertEquals(2, full.remove(2));
350 jsr166 1.11 assertEquals(2, full.size());
351 dl 1.1 }
352    
353     /**
354 jsr166 1.18 * removeAll removes all elements from the given collection
355 dl 1.1 */
356 dl 1.4 public void testRemoveAll() {
357 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
358     Vector v = new Vector();
359     v.add(one);
360     v.add(two);
361     full.removeAll(v);
362     assertEquals(1, full.size());
363 dl 1.1 }
364    
365     /**
366 jsr166 1.18 * set changes the element at the given index
367 dl 1.1 */
368 dl 1.4 public void testSet() {
369 jsr166 1.11 CopyOnWriteArrayList full = populatedArray(3);
370 jsr166 1.15 assertEquals(2, full.set(2, four));
371 jsr166 1.14 assertEquals(4, full.get(2));
372 dl 1.1 }
373    
374     /**
375 jsr166 1.18 * size returns the number of elements
376 dl 1.1 */
377 dl 1.4 public void testSize() {
378 jsr166 1.11 CopyOnWriteArrayList empty = new CopyOnWriteArrayList();
379     CopyOnWriteArrayList full = populatedArray(SIZE);
380     assertEquals(SIZE, full.size());
381     assertEquals(0, empty.size());
382 dl 1.1 }
383    
384     /**
385 jsr166 1.26 * toArray() returns an Object array containing all elements from
386     * the list in insertion order
387 dl 1.1 */
388 dl 1.4 public void testToArray() {
389 jsr166 1.26 Object[] a = new CopyOnWriteArrayList().toArray();
390     assertTrue(Arrays.equals(new Object[0], a));
391     assertSame(Object[].class, a.getClass());
392    
393     Integer[] elements = new Integer[SIZE];
394     for (int i = 0; i < SIZE; i++)
395     elements[i] = i;
396     Collections.shuffle(Arrays.asList(elements));
397     Collection<Integer> full = populatedArray(elements);
398    
399     assertTrue(Arrays.equals(elements, full.toArray()));
400     assertSame(Object[].class, full.toArray().getClass());
401 dl 1.1 }
402    
403     /**
404 jsr166 1.26 * toArray(Integer array) returns an Integer array containing all
405     * elements from the list in insertion order
406 dl 1.1 */
407 dl 1.4 public void testToArray2() {
408 jsr166 1.26 Collection empty = new CopyOnWriteArrayList();
409     Integer[] a;
410    
411     a = new Integer[0];
412     assertSame(a, empty.toArray(a));
413    
414     a = new Integer[SIZE/2];
415     Arrays.fill(a, 42);
416     assertSame(a, empty.toArray(a));
417     assertNull(a[0]);
418     for (int i = 1; i < a.length; i++)
419     assertEquals(42, (int) a[i]);
420    
421     Integer[] elements = new Integer[SIZE];
422     for (int i = 0; i < SIZE; i++)
423     elements[i] = i;
424     Collections.shuffle(Arrays.asList(elements));
425     Collection<Integer> full = populatedArray(elements);
426    
427     Arrays.fill(a, 42);
428     assertTrue(Arrays.equals(elements, full.toArray(a)));
429     for (int i = 0; i < a.length; i++)
430     assertEquals(42, (int) a[i]);
431     assertSame(Integer[].class, full.toArray(a).getClass());
432    
433     a = new Integer[SIZE];
434     Arrays.fill(a, 42);
435     assertSame(a, full.toArray(a));
436     assertTrue(Arrays.equals(elements, a));
437    
438     a = new Integer[2*SIZE];
439     Arrays.fill(a, 42);
440     assertSame(a, full.toArray(a));
441     assertTrue(Arrays.equals(elements, Arrays.copyOf(a, SIZE)));
442     assertNull(a[SIZE]);
443     for (int i = SIZE + 1; i < a.length; i++)
444     assertEquals(42, (int) a[i]);
445 dl 1.1 }
446    
447 dl 1.4 /**
448 dl 1.5 * sublists contains elements at indexes offset from their base
449 dl 1.4 */
450 dl 1.1 public void testSubList() {
451 jsr166 1.11 CopyOnWriteArrayList a = populatedArray(10);
452 dl 1.1 assertTrue(a.subList(1,1).isEmpty());
453 jsr166 1.11 for (int j = 0; j < 9; ++j) {
454     for (int i = j ; i < 10; ++i) {
455     List b = a.subList(j,i);
456     for (int k = j; k < i; ++k) {
457     assertEquals(new Integer(k), b.get(k-j));
458     }
459     }
460     }
461 dl 1.1
462 jsr166 1.11 List s = a.subList(2, 5);
463 jsr166 1.24 assertEquals(3, s.size());
464 dl 1.3 s.set(2, m1);
465 dl 1.1 assertEquals(a.get(4), m1);
466 jsr166 1.11 s.clear();
467 jsr166 1.24 assertEquals(7, a.size());
468 dl 1.1 }
469    
470     // Exception tests
471    
472     /**
473 jsr166 1.18 * toArray throws an ArrayStoreException when the given array
474     * can not store the objects inside the list
475 dl 1.1 */
476 dl 1.4 public void testToArray_ArrayStoreException() {
477     try {
478 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
479     c.add("zfasdfsdf");
480     c.add("asdadasd");
481     c.toArray(new Long[5]);
482 jsr166 1.11 shouldThrow();
483 jsr166 1.13 } catch (ArrayStoreException success) {}
484 dl 1.1 }
485    
486     /**
487 jsr166 1.18 * get throws an IndexOutOfBoundsException on a negative index
488 dl 1.1 */
489 dl 1.4 public void testGet1_IndexOutOfBoundsException() {
490     try {
491 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
492     c.get(-1);
493 dl 1.4 shouldThrow();
494 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
495 dl 1.1 }
496 jsr166 1.8
497 dl 1.1 /**
498 jsr166 1.18 * get throws an IndexOutOfBoundsException on a too high index
499 dl 1.1 */
500 dl 1.4 public void testGet2_IndexOutOfBoundsException() {
501     try {
502 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
503     c.add("asdasd");
504     c.add("asdad");
505     c.get(100);
506 dl 1.4 shouldThrow();
507 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
508 dl 1.1 }
509    
510     /**
511 jsr166 1.18 * set throws an IndexOutOfBoundsException on a negative index
512 dl 1.1 */
513 dl 1.4 public void testSet1_IndexOutOfBoundsException() {
514     try {
515 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
516     c.set(-1,"qwerty");
517 dl 1.4 shouldThrow();
518 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
519 dl 1.1 }
520 jsr166 1.8
521 dl 1.1 /**
522 jsr166 1.18 * set throws an IndexOutOfBoundsException on a too high index
523 dl 1.1 */
524 dl 1.4 public void testSet2() {
525     try {
526 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
527     c.add("asdasd");
528     c.add("asdad");
529     c.set(100, "qwerty");
530 dl 1.4 shouldThrow();
531 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
532 dl 1.1 }
533    
534     /**
535 jsr166 1.18 * add throws an IndexOutOfBoundsException on a negative index
536 dl 1.1 */
537 dl 1.4 public void testAdd1_IndexOutOfBoundsException() {
538     try {
539 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
540     c.add(-1,"qwerty");
541 dl 1.4 shouldThrow();
542 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
543 dl 1.1 }
544 jsr166 1.8
545 dl 1.1 /**
546 jsr166 1.18 * add throws an IndexOutOfBoundsException on a too high index
547 dl 1.1 */
548 dl 1.4 public void testAdd2_IndexOutOfBoundsException() {
549     try {
550 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
551     c.add("asdasd");
552     c.add("asdasdasd");
553     c.add(100, "qwerty");
554 dl 1.4 shouldThrow();
555 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
556 dl 1.1 }
557    
558     /**
559 jsr166 1.18 * remove throws an IndexOutOfBoundsException on a negative index
560 dl 1.1 */
561 dl 1.4 public void testRemove1_IndexOutOfBounds() {
562     try {
563 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
564     c.remove(-1);
565 dl 1.4 shouldThrow();
566 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
567 dl 1.1 }
568    
569     /**
570 jsr166 1.18 * remove throws an IndexOutOfBoundsException on a too high index
571 dl 1.1 */
572 dl 1.4 public void testRemove2_IndexOutOfBounds() {
573     try {
574 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
575     c.add("asdasd");
576     c.add("adasdasd");
577     c.remove(100);
578 dl 1.4 shouldThrow();
579 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
580 dl 1.1 }
581 jsr166 1.8
582 dl 1.1 /**
583 jsr166 1.18 * addAll throws an IndexOutOfBoundsException on a negative index
584 dl 1.1 */
585 dl 1.4 public void testAddAll1_IndexOutOfBoundsException() {
586     try {
587 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
588     c.addAll(-1,new LinkedList());
589 dl 1.4 shouldThrow();
590 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
591 dl 1.1 }
592 jsr166 1.8
593 dl 1.1 /**
594 jsr166 1.18 * addAll throws an IndexOutOfBoundsException on a too high index
595 dl 1.1 */
596 dl 1.4 public void testAddAll2_IndexOutOfBoundsException() {
597     try {
598 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
599     c.add("asdasd");
600     c.add("asdasdasd");
601     c.addAll(100, new LinkedList());
602 dl 1.4 shouldThrow();
603 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
604 dl 1.1 }
605    
606     /**
607 jsr166 1.18 * listIterator throws an IndexOutOfBoundsException on a negative index
608 dl 1.1 */
609 dl 1.4 public void testListIterator1_IndexOutOfBoundsException() {
610     try {
611 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
612     c.listIterator(-1);
613 dl 1.4 shouldThrow();
614 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
615 dl 1.1 }
616    
617     /**
618 jsr166 1.18 * listIterator throws an IndexOutOfBoundsException on a too high index
619 dl 1.1 */
620 dl 1.4 public void testListIterator2_IndexOutOfBoundsException() {
621     try {
622 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
623     c.add("adasd");
624     c.add("asdasdas");
625     c.listIterator(100);
626 dl 1.4 shouldThrow();
627 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
628 dl 1.1 }
629    
630     /**
631 jsr166 1.18 * subList throws an IndexOutOfBoundsException on a negative index
632 dl 1.1 */
633 dl 1.4 public void testSubList1_IndexOutOfBoundsException() {
634     try {
635 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
636     c.subList(-1,100);
637 dl 1.4 shouldThrow();
638 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
639 dl 1.1 }
640    
641     /**
642 jsr166 1.18 * subList throws an IndexOutOfBoundsException on a too high index
643 dl 1.1 */
644 dl 1.4 public void testSubList2_IndexOutOfBoundsException() {
645     try {
646 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
647     c.add("asdasd");
648     c.subList(1,100);
649 dl 1.4 shouldThrow();
650 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
651 dl 1.1 }
652    
653     /**
654 jsr166 1.18 * subList throws IndexOutOfBoundsException when the second index
655     * is lower then the first
656 dl 1.1 */
657 dl 1.4 public void testSubList3_IndexOutOfBoundsException() {
658     try {
659 dl 1.1 CopyOnWriteArrayList c = new CopyOnWriteArrayList();
660     c.subList(3,1);
661 dl 1.4 shouldThrow();
662 jsr166 1.13 } catch (IndexOutOfBoundsException success) {}
663 dl 1.2 }
664    
665 dl 1.4 /**
666 jsr166 1.16 * a deserialized serialized list is equal
667 dl 1.4 */
668 jsr166 1.12 public void testSerialization() throws Exception {
669 jsr166 1.22 List x = populatedArray(SIZE);
670     List y = serialClone(x);
671 dl 1.2
672 jsr166 1.22 assertTrue(x != y);
673     assertEquals(x.size(), y.size());
674     assertEquals(x.toString(), y.toString());
675     assertTrue(Arrays.equals(x.toArray(), y.toArray()));
676     assertEquals(x, y);
677     assertEquals(y, x);
678     while (!x.isEmpty()) {
679     assertFalse(y.isEmpty());
680     assertEquals(x.remove(0), y.remove(0));
681     }
682     assertTrue(y.isEmpty());
683 dl 1.1 }
684 jsr166 1.8
685 dl 1.1 }