ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/CopyOnWriteArraySetTest.java
Revision: 1.20
Committed: Sat Nov 26 07:39:02 2011 UTC (12 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.19: +13 -13 lines
Log Message:
improve toArray methods

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