ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArrayListTest.java
Revision: 1.24
Committed: Sat Nov 26 05:19:17 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.23: +2 -2 lines
Log Message:
assertEquals argument order

File Contents

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