ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArraySetTest.java
Revision: 1.21
Committed: Tue Nov 29 05:09:05 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.20: +65 -17 lines
Log Message:
improve toArray tests

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.17 * 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.19 import java.util.Arrays;
11 jsr166 1.21 import java.util.Collections;
12 jsr166 1.19 import java.util.Iterator;
13     import java.util.Set;
14     import java.util.Vector;
15     import java.util.concurrent.CopyOnWriteArraySet;
16 dl 1.1
17 dl 1.3 public class CopyOnWriteArraySetTest extends JSR166TestCase {
18 dl 1.1 public static void main(String[] args) {
19 jsr166 1.15 junit.textui.TestRunner.run(suite());
20 dl 1.1 }
21     public static Test suite() {
22 jsr166 1.11 return new TestSuite(CopyOnWriteArraySetTest.class);
23 dl 1.1 }
24    
25 jsr166 1.21 static CopyOnWriteArraySet<Integer> populatedSet(int n) {
26     CopyOnWriteArraySet<Integer> a = new CopyOnWriteArraySet<Integer>();
27 dl 1.1 assertTrue(a.isEmpty());
28 jsr166 1.8 for (int i = 0; i < n; ++i)
29 jsr166 1.21 a.add(i);
30 dl 1.1 assertFalse(a.isEmpty());
31     assertEquals(n, a.size());
32     return a;
33     }
34    
35 jsr166 1.21 static CopyOnWriteArraySet populatedSet(Integer[] elements) {
36     CopyOnWriteArraySet<Integer> a = new CopyOnWriteArraySet<Integer>();
37     assertTrue(a.isEmpty());
38     for (int i = 0; i < elements.length; i++)
39     a.add(elements[i]);
40     assertFalse(a.isEmpty());
41     assertEquals(elements.length, a.size());
42     return a;
43     }
44    
45 dl 1.4 /**
46     * Default-constructed set is empty
47     */
48 dl 1.3 public void testConstructor() {
49 jsr166 1.11 CopyOnWriteArraySet a = new CopyOnWriteArraySet();
50 dl 1.3 assertTrue(a.isEmpty());
51     }
52    
53 dl 1.4 /**
54 dl 1.5 * Collection-constructed set holds all of its elements
55 dl 1.4 */
56 dl 1.3 public void testConstructor3() {
57     Integer[] ints = new Integer[SIZE];
58     for (int i = 0; i < SIZE-1; ++i)
59     ints[i] = new Integer(i);
60 jsr166 1.11 CopyOnWriteArraySet a = new CopyOnWriteArraySet(Arrays.asList(ints));
61 jsr166 1.8 for (int i = 0; i < SIZE; ++i)
62 dl 1.3 assertTrue(a.contains(ints[i]));
63     }
64 jsr166 1.8
65 dl 1.1 /**
66 jsr166 1.16 * addAll adds each element from the given collection
67 dl 1.1 */
68 dl 1.4 public void testAddAll() {
69 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
70     Vector v = new Vector();
71     v.add(three);
72     v.add(four);
73     v.add(five);
74     full.addAll(v);
75     assertEquals(6, full.size());
76 dl 1.1 }
77    
78     /**
79 jsr166 1.16 * addAll adds each element from the given collection that did not
80     * already exist in the set
81 dl 1.1 */
82 dl 1.4 public void testAddAll2() {
83 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
84     Vector v = new Vector();
85     v.add(three);
86     v.add(four);
87     v.add(one); // will not add this element
88     full.addAll(v);
89     assertEquals(5, full.size());
90 dl 1.1 }
91    
92     /**
93 jsr166 1.16 * add will not add the element if it already exists in the set
94 dl 1.1 */
95 dl 1.4 public void testAdd2() {
96 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
97     full.add(one);
98     assertEquals(3, full.size());
99 dl 1.1 }
100    
101     /**
102 jsr166 1.16 * add adds the element when it does not exist in the set
103 dl 1.1 */
104 dl 1.4 public void testAdd3() {
105 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
106 dl 1.3 full.add(three);
107     assertTrue(full.contains(three));
108 dl 1.1 }
109    
110     /**
111 jsr166 1.16 * clear removes all elements from the set
112 dl 1.1 */
113 dl 1.4 public void testClear() {
114 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
115     full.clear();
116     assertEquals(0, full.size());
117 dl 1.1 }
118    
119     /**
120 jsr166 1.16 * contains returns true for added elements
121 dl 1.1 */
122 dl 1.4 public void testContains() {
123 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
124     assertTrue(full.contains(one));
125     assertFalse(full.contains(five));
126 dl 1.1 }
127    
128 dl 1.4 /**
129     * Sets with equal elements are equal
130     */
131 dl 1.1 public void testEquals() {
132 jsr166 1.11 CopyOnWriteArraySet a = populatedSet(3);
133     CopyOnWriteArraySet b = populatedSet(3);
134 dl 1.1 assertTrue(a.equals(b));
135     assertTrue(b.equals(a));
136     assertEquals(a.hashCode(), b.hashCode());
137 dl 1.3 a.add(m1);
138 dl 1.1 assertFalse(a.equals(b));
139     assertFalse(b.equals(a));
140 dl 1.3 b.add(m1);
141 dl 1.1 assertTrue(a.equals(b));
142     assertTrue(b.equals(a));
143     assertEquals(a.hashCode(), b.hashCode());
144     }
145    
146     /**
147 jsr166 1.16 * containsAll returns true for collections with subset of elements
148 dl 1.1 */
149 dl 1.4 public void testContainsAll() {
150 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
151     Vector v = new Vector();
152     v.add(one);
153     v.add(two);
154     assertTrue(full.containsAll(v));
155     v.add(six);
156     assertFalse(full.containsAll(v));
157 dl 1.1 }
158    
159     /**
160 jsr166 1.16 * isEmpty is true when empty, else false
161 dl 1.1 */
162 dl 1.4 public void testIsEmpty() {
163 jsr166 1.11 CopyOnWriteArraySet empty = new CopyOnWriteArraySet();
164     CopyOnWriteArraySet full = populatedSet(3);
165     assertTrue(empty.isEmpty());
166     assertFalse(full.isEmpty());
167 dl 1.1 }
168    
169     /**
170 jsr166 1.16 * iterator() returns an iterator containing the elements of the set
171 dl 1.1 */
172 dl 1.4 public void testIterator() {
173 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
174     Iterator i = full.iterator();
175     int j;
176     for (j = 0; i.hasNext(); j++)
177 jsr166 1.14 assertEquals(j, i.next());
178 jsr166 1.11 assertEquals(3, j);
179 dl 1.1 }
180    
181 dl 1.4 /**
182     * iterator remove is unsupported
183     */
184 jsr166 1.15 public void testIteratorRemove() {
185 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
186 dl 1.1 Iterator it = full.iterator();
187     it.next();
188     try {
189     it.remove();
190 dl 1.4 shouldThrow();
191 jsr166 1.12 } catch (UnsupportedOperationException success) {}
192 dl 1.1 }
193    
194 dl 1.4 /**
195     * toString holds toString of elements
196     */
197     public void testToString() {
198 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
199 dl 1.1 String s = full.toString();
200     for (int i = 0; i < 3; ++i) {
201 jsr166 1.18 assertTrue(s.contains(String.valueOf(i)));
202 dl 1.1 }
203 jsr166 1.8 }
204 dl 1.1
205     /**
206 jsr166 1.16 * removeAll removes all elements from the given collection
207 dl 1.1 */
208 dl 1.4 public void testRemoveAll() {
209 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
210     Vector v = new Vector();
211     v.add(one);
212     v.add(two);
213     full.removeAll(v);
214     assertEquals(1, full.size());
215 dl 1.1 }
216    
217 dl 1.4 /**
218     * remove removes an element
219     */
220     public void testRemove() {
221 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
222     full.remove(one);
223 dl 1.3 assertFalse(full.contains(one));
224 jsr166 1.11 assertEquals(2, full.size());
225 dl 1.1 }
226    
227     /**
228 jsr166 1.16 * size returns the number of elements
229 dl 1.1 */
230 dl 1.4 public void testSize() {
231 jsr166 1.11 CopyOnWriteArraySet empty = new CopyOnWriteArraySet();
232     CopyOnWriteArraySet full = populatedSet(3);
233     assertEquals(3, full.size());
234     assertEquals(0, empty.size());
235 dl 1.1 }
236    
237     /**
238 jsr166 1.21 * toArray() returns an Object array containing all elements from
239     * the set in insertion order
240 dl 1.1 */
241 dl 1.4 public void testToArray() {
242 jsr166 1.21 Object[] a = new CopyOnWriteArraySet().toArray();
243     assertTrue(Arrays.equals(new Object[0], a));
244     assertSame(Object[].class, a.getClass());
245    
246     Integer[] elements = new Integer[SIZE];
247 jsr166 1.20 for (int i = 0; i < SIZE; i++)
248 jsr166 1.21 elements[i] = i;
249     Collections.shuffle(Arrays.asList(elements));
250     CopyOnWriteArraySet<Integer> full = populatedSet(elements);
251    
252     assertTrue(Arrays.equals(elements, full.toArray()));
253     assertSame(Object[].class, full.toArray().getClass());
254 dl 1.1 }
255    
256     /**
257 jsr166 1.21 * toArray(Integer array) returns an Integer array containing all
258     * elements from the set in insertion order
259 dl 1.1 */
260 dl 1.4 public void testToArray2() {
261 jsr166 1.21 CopyOnWriteArraySet empty = new CopyOnWriteArraySet();
262     Integer[] a;
263    
264     a = new Integer[0];
265     assertSame(a, empty.toArray(a));
266    
267     a = new Integer[SIZE/2];
268     Arrays.fill(a, 42);
269     assertSame(a, empty.toArray(a));
270     assertNull(a[0]);
271     for (int i = 1; i < a.length; i++)
272     assertEquals(42, (int) a[i]);
273    
274     Integer[] elements = new Integer[SIZE];
275 jsr166 1.20 for (int i = 0; i < SIZE; i++)
276 jsr166 1.21 elements[i] = i;
277     Collections.shuffle(Arrays.asList(elements));
278     CopyOnWriteArraySet<Integer> full = populatedSet(elements);
279    
280     Arrays.fill(a, 42);
281     assertTrue(Arrays.equals(elements, full.toArray(a)));
282     for (int i = 0; i < a.length; i++)
283     assertEquals(42, (int) a[i]);
284     assertSame(Integer[].class, full.toArray(a).getClass());
285    
286     a = new Integer[SIZE];
287     Arrays.fill(a, 42);
288     assertSame(a, full.toArray(a));
289     assertTrue(Arrays.equals(elements, a));
290    
291     a = new Integer[2*SIZE];
292     Arrays.fill(a, 42);
293     assertSame(a, full.toArray(a));
294     assertTrue(Arrays.equals(elements, Arrays.copyOf(a, SIZE)));
295     assertNull(a[SIZE]);
296     for (int i = SIZE + 1; i < a.length; i++)
297     assertEquals(42, (int) a[i]);
298 dl 1.1 }
299    
300     /**
301 jsr166 1.16 * toArray throws an ArrayStoreException when the given array can
302     * not store the objects inside the set
303 dl 1.1 */
304 dl 1.4 public void testToArray_ArrayStoreException() {
305     try {
306 dl 1.1 CopyOnWriteArraySet c = new CopyOnWriteArraySet();
307     c.add("zfasdfsdf");
308     c.add("asdadasd");
309     c.toArray(new Long[5]);
310 jsr166 1.11 shouldThrow();
311 jsr166 1.13 } catch (ArrayStoreException success) {}
312 dl 1.2 }
313    
314 dl 1.4 /**
315 dl 1.7 * A deserialized serialized set is equal
316 dl 1.4 */
317 jsr166 1.12 public void testSerialization() throws Exception {
318 jsr166 1.19 Set x = populatedSet(SIZE);
319     Set y = serialClone(x);
320 dl 1.2
321 jsr166 1.19 assertTrue(x != y);
322     assertEquals(x.size(), y.size());
323     assertEquals(x, y);
324     assertEquals(y, x);
325 dl 1.1 }
326    
327     }