--- jsr166/src/test/tck/CopyOnWriteArrayListTest.java 2011/11/26 07:39:02 1.25 +++ jsr166/src/test/tck/CopyOnWriteArrayListTest.java 2011/11/29 05:23:56 1.26 @@ -8,6 +8,8 @@ import junit.framework.*; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -26,16 +28,25 @@ public class CopyOnWriteArrayListTest ex } static CopyOnWriteArrayList populatedArray(int n) { - CopyOnWriteArrayList a - = new CopyOnWriteArrayList(); + CopyOnWriteArrayList a = new CopyOnWriteArrayList(); assertTrue(a.isEmpty()); - for (int i = 0; i < n; ++i) + for (int i = 0; i < n; i++) a.add(i); assertFalse(a.isEmpty()); assertEquals(n, a.size()); return a; } + static CopyOnWriteArrayList populatedArray(Integer[] elements) { + CopyOnWriteArrayList a = new CopyOnWriteArrayList(); + assertTrue(a.isEmpty()); + for (int i = 0; i < elements.length; i++) + a.add(elements[i]); + assertFalse(a.isEmpty()); + assertEquals(elements.length, a.size()); + return a; + } + /** * a new list is empty */ @@ -349,30 +360,66 @@ public class CopyOnWriteArrayListTest ex } /** - * toArray returns an Object array containing all elements from the list + * toArray() returns an Object array containing all elements from + * the list in insertion order */ public void testToArray() { - CopyOnWriteArrayList full = populatedArray(3); - Object[] o = full.toArray(); - assertEquals(3, o.length); - assertEquals(0, o[0]); - assertEquals(1, o[1]); - assertEquals(2, o[2]); + Object[] a = new CopyOnWriteArrayList().toArray(); + assertTrue(Arrays.equals(new Object[0], a)); + assertSame(Object[].class, a.getClass()); + + Integer[] elements = new Integer[SIZE]; + for (int i = 0; i < SIZE; i++) + elements[i] = i; + Collections.shuffle(Arrays.asList(elements)); + Collection full = populatedArray(elements); + + assertTrue(Arrays.equals(elements, full.toArray())); + assertSame(Object[].class, full.toArray().getClass()); } /** - * toArray returns an Integer array containing all elements from - * the list + * toArray(Integer array) returns an Integer array containing all + * elements from the list in insertion order */ public void testToArray2() { - final int size = 3; - CopyOnWriteArrayList full = populatedArray(size); - Integer[] ints = new Integer[size]; - assertSame(ints, full.toArray(ints)); - Iterator it = full.iterator(); - for (int i = 0; i < size; i++) - assertSame(ints[i], it.next()); - assertFalse(it.hasNext()); + Collection empty = new CopyOnWriteArrayList(); + Integer[] a; + + a = new Integer[0]; + assertSame(a, empty.toArray(a)); + + a = new Integer[SIZE/2]; + Arrays.fill(a, 42); + assertSame(a, empty.toArray(a)); + assertNull(a[0]); + for (int i = 1; i < a.length; i++) + assertEquals(42, (int) a[i]); + + Integer[] elements = new Integer[SIZE]; + for (int i = 0; i < SIZE; i++) + elements[i] = i; + Collections.shuffle(Arrays.asList(elements)); + Collection full = populatedArray(elements); + + Arrays.fill(a, 42); + assertTrue(Arrays.equals(elements, full.toArray(a))); + for (int i = 0; i < a.length; i++) + assertEquals(42, (int) a[i]); + assertSame(Integer[].class, full.toArray(a).getClass()); + + a = new Integer[SIZE]; + Arrays.fill(a, 42); + assertSame(a, full.toArray(a)); + assertTrue(Arrays.equals(elements, a)); + + a = new Integer[2*SIZE]; + Arrays.fill(a, 42); + assertSame(a, full.toArray(a)); + assertTrue(Arrays.equals(elements, Arrays.copyOf(a, SIZE))); + assertNull(a[SIZE]); + for (int i = SIZE + 1; i < a.length; i++) + assertEquals(42, (int) a[i]); } /**