ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArraySetTest.java
Revision: 1.22
Committed: Tue Nov 29 05:23:56 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.21: +5 -4 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.22 import java.util.Collection;
12 jsr166 1.21 import java.util.Collections;
13 jsr166 1.19 import java.util.Iterator;
14     import java.util.Set;
15     import java.util.Vector;
16     import java.util.concurrent.CopyOnWriteArraySet;
17 dl 1.1
18 dl 1.3 public class CopyOnWriteArraySetTest extends JSR166TestCase {
19 dl 1.1 public static void main(String[] args) {
20 jsr166 1.15 junit.textui.TestRunner.run(suite());
21 dl 1.1 }
22     public static Test suite() {
23 jsr166 1.11 return new TestSuite(CopyOnWriteArraySetTest.class);
24 dl 1.1 }
25    
26 jsr166 1.21 static CopyOnWriteArraySet<Integer> populatedSet(int n) {
27     CopyOnWriteArraySet<Integer> a = new CopyOnWriteArraySet<Integer>();
28 dl 1.1 assertTrue(a.isEmpty());
29 jsr166 1.22 for (int i = 0; i < n; i++)
30 jsr166 1.21 a.add(i);
31 dl 1.1 assertFalse(a.isEmpty());
32     assertEquals(n, a.size());
33     return a;
34     }
35    
36 jsr166 1.21 static CopyOnWriteArraySet populatedSet(Integer[] elements) {
37     CopyOnWriteArraySet<Integer> a = new CopyOnWriteArraySet<Integer>();
38     assertTrue(a.isEmpty());
39     for (int i = 0; i < elements.length; i++)
40     a.add(elements[i]);
41     assertFalse(a.isEmpty());
42     assertEquals(elements.length, a.size());
43     return a;
44     }
45    
46 dl 1.4 /**
47     * Default-constructed set is empty
48     */
49 dl 1.3 public void testConstructor() {
50 jsr166 1.11 CopyOnWriteArraySet a = new CopyOnWriteArraySet();
51 dl 1.3 assertTrue(a.isEmpty());
52     }
53    
54 dl 1.4 /**
55 dl 1.5 * Collection-constructed set holds all of its elements
56 dl 1.4 */
57 dl 1.3 public void testConstructor3() {
58     Integer[] ints = new Integer[SIZE];
59     for (int i = 0; i < SIZE-1; ++i)
60     ints[i] = new Integer(i);
61 jsr166 1.11 CopyOnWriteArraySet a = new CopyOnWriteArraySet(Arrays.asList(ints));
62 jsr166 1.8 for (int i = 0; i < SIZE; ++i)
63 dl 1.3 assertTrue(a.contains(ints[i]));
64     }
65 jsr166 1.8
66 dl 1.1 /**
67 jsr166 1.16 * addAll adds each element from the given collection
68 dl 1.1 */
69 dl 1.4 public void testAddAll() {
70 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
71     Vector v = new Vector();
72     v.add(three);
73     v.add(four);
74     v.add(five);
75     full.addAll(v);
76     assertEquals(6, full.size());
77 dl 1.1 }
78    
79     /**
80 jsr166 1.16 * addAll adds each element from the given collection that did not
81     * already exist in the set
82 dl 1.1 */
83 dl 1.4 public void testAddAll2() {
84 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
85     Vector v = new Vector();
86     v.add(three);
87     v.add(four);
88     v.add(one); // will not add this element
89     full.addAll(v);
90     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     Vector v = new Vector();
153     v.add(one);
154     v.add(two);
155     assertTrue(full.containsAll(v));
156     v.add(six);
157     assertFalse(full.containsAll(v));
158 dl 1.1 }
159    
160     /**
161 jsr166 1.16 * isEmpty is true when empty, else false
162 dl 1.1 */
163 dl 1.4 public void testIsEmpty() {
164 jsr166 1.11 CopyOnWriteArraySet empty = new CopyOnWriteArraySet();
165     CopyOnWriteArraySet full = populatedSet(3);
166     assertTrue(empty.isEmpty());
167     assertFalse(full.isEmpty());
168 dl 1.1 }
169    
170     /**
171 jsr166 1.16 * iterator() returns an iterator containing the elements of the set
172 dl 1.1 */
173 dl 1.4 public void testIterator() {
174 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
175     Iterator i = full.iterator();
176     int j;
177     for (j = 0; i.hasNext(); j++)
178 jsr166 1.14 assertEquals(j, i.next());
179 jsr166 1.11 assertEquals(3, j);
180 dl 1.1 }
181    
182 dl 1.4 /**
183     * iterator remove is unsupported
184     */
185 jsr166 1.15 public void testIteratorRemove() {
186 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
187 dl 1.1 Iterator it = full.iterator();
188     it.next();
189     try {
190     it.remove();
191 dl 1.4 shouldThrow();
192 jsr166 1.12 } catch (UnsupportedOperationException success) {}
193 dl 1.1 }
194    
195 dl 1.4 /**
196     * toString holds toString of elements
197     */
198     public void testToString() {
199 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
200 dl 1.1 String s = full.toString();
201     for (int i = 0; i < 3; ++i) {
202 jsr166 1.18 assertTrue(s.contains(String.valueOf(i)));
203 dl 1.1 }
204 jsr166 1.8 }
205 dl 1.1
206     /**
207 jsr166 1.16 * removeAll removes all elements from the given collection
208 dl 1.1 */
209 dl 1.4 public void testRemoveAll() {
210 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
211     Vector v = new Vector();
212     v.add(one);
213     v.add(two);
214     full.removeAll(v);
215     assertEquals(1, full.size());
216 dl 1.1 }
217    
218 dl 1.4 /**
219     * remove removes an element
220     */
221     public void testRemove() {
222 jsr166 1.11 CopyOnWriteArraySet full = populatedSet(3);
223     full.remove(one);
224 dl 1.3 assertFalse(full.contains(one));
225 jsr166 1.11 assertEquals(2, full.size());
226 dl 1.1 }
227    
228     /**
229 jsr166 1.16 * size returns the number of elements
230 dl 1.1 */
231 dl 1.4 public void testSize() {
232 jsr166 1.11 CopyOnWriteArraySet empty = new CopyOnWriteArraySet();
233     CopyOnWriteArraySet full = populatedSet(3);
234     assertEquals(3, full.size());
235     assertEquals(0, empty.size());
236 dl 1.1 }
237    
238     /**
239 jsr166 1.21 * toArray() returns an Object array containing all elements from
240     * the set in insertion order
241 dl 1.1 */
242 dl 1.4 public void testToArray() {
243 jsr166 1.21 Object[] a = new CopyOnWriteArraySet().toArray();
244     assertTrue(Arrays.equals(new Object[0], a));
245     assertSame(Object[].class, a.getClass());
246    
247     Integer[] elements = new Integer[SIZE];
248 jsr166 1.20 for (int i = 0; i < SIZE; i++)
249 jsr166 1.21 elements[i] = i;
250     Collections.shuffle(Arrays.asList(elements));
251 jsr166 1.22 Collection<Integer> full = populatedSet(elements);
252 jsr166 1.21
253     assertTrue(Arrays.equals(elements, full.toArray()));
254     assertSame(Object[].class, full.toArray().getClass());
255 dl 1.1 }
256    
257     /**
258 jsr166 1.21 * toArray(Integer array) returns an Integer array containing all
259     * elements from the set in insertion order
260 dl 1.1 */
261 dl 1.4 public void testToArray2() {
262 jsr166 1.22 Collection empty = new CopyOnWriteArraySet();
263 jsr166 1.21 Integer[] a;
264    
265     a = new Integer[0];
266     assertSame(a, empty.toArray(a));
267    
268     a = new Integer[SIZE/2];
269     Arrays.fill(a, 42);
270     assertSame(a, empty.toArray(a));
271     assertNull(a[0]);
272     for (int i = 1; i < a.length; i++)
273     assertEquals(42, (int) a[i]);
274    
275     Integer[] elements = new Integer[SIZE];
276 jsr166 1.20 for (int i = 0; i < SIZE; i++)
277 jsr166 1.21 elements[i] = i;
278     Collections.shuffle(Arrays.asList(elements));
279 jsr166 1.22 Collection<Integer> full = populatedSet(elements);
280 jsr166 1.21
281     Arrays.fill(a, 42);
282     assertTrue(Arrays.equals(elements, full.toArray(a)));
283     for (int i = 0; i < a.length; i++)
284     assertEquals(42, (int) a[i]);
285     assertSame(Integer[].class, full.toArray(a).getClass());
286    
287     a = new Integer[SIZE];
288     Arrays.fill(a, 42);
289     assertSame(a, full.toArray(a));
290     assertTrue(Arrays.equals(elements, a));
291    
292     a = new Integer[2*SIZE];
293     Arrays.fill(a, 42);
294     assertSame(a, full.toArray(a));
295     assertTrue(Arrays.equals(elements, Arrays.copyOf(a, SIZE)));
296     assertNull(a[SIZE]);
297     for (int i = SIZE + 1; i < a.length; i++)
298     assertEquals(42, (int) a[i]);
299 dl 1.1 }
300    
301     /**
302 jsr166 1.16 * toArray throws an ArrayStoreException when the given array can
303     * not store the objects inside the set
304 dl 1.1 */
305 dl 1.4 public void testToArray_ArrayStoreException() {
306     try {
307 dl 1.1 CopyOnWriteArraySet c = new CopyOnWriteArraySet();
308     c.add("zfasdfsdf");
309     c.add("asdadasd");
310     c.toArray(new Long[5]);
311 jsr166 1.11 shouldThrow();
312 jsr166 1.13 } catch (ArrayStoreException success) {}
313 dl 1.2 }
314    
315 dl 1.4 /**
316 dl 1.7 * A deserialized serialized set is equal
317 dl 1.4 */
318 jsr166 1.12 public void testSerialization() throws Exception {
319 jsr166 1.19 Set x = populatedSet(SIZE);
320     Set y = serialClone(x);
321 dl 1.2
322 jsr166 1.19 assertTrue(x != y);
323     assertEquals(x.size(), y.size());
324     assertEquals(x, y);
325     assertEquals(y, x);
326 dl 1.1 }
327    
328     }