ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArraySetTest.java
Revision: 1.30
Committed: Fri Feb 27 19:28:23 2015 UTC (9 years, 2 months ago) by jsr166
Branch: MAIN
Changes since 1.29: +15 -21 lines
Log Message:
replace Vector with Arrays.asList; add more assertions

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