ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityQueueTest.java
Revision: 1.15
Committed: Sun Nov 22 18:57:17 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.14: +8 -12 lines
Log Message:
use autoboxing judiciously for readability

File Contents

# User Rev Content
1 dl 1.1 /*
2 dl 1.8 * 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     * http://creativecommons.org/licenses/publicdomain
5 jsr166 1.9 * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 dl 1.1 */
8    
9     import junit.framework.*;
10     import java.util.*;
11     import java.util.concurrent.*;
12 dl 1.2 import java.io.*;
13 dl 1.1
14 dl 1.3 public class PriorityQueueTest extends JSR166TestCase {
15 dl 1.1 public static void main(String[] args) {
16 jsr166 1.12 junit.textui.TestRunner.run (suite());
17 dl 1.1 }
18     public static Test suite() {
19 jsr166 1.12 return new TestSuite(PriorityQueueTest.class);
20 dl 1.1 }
21    
22 jsr166 1.9 static class MyReverseComparator implements Comparator {
23 dl 1.1 public int compare(Object x, Object y) {
24 jsr166 1.15 return ((Comparable)y).compareTo(x);
25 dl 1.1 }
26     }
27    
28     /**
29     * Create a queue of given size containing consecutive
30     * Integers 0 ... n.
31     */
32 dl 1.3 private PriorityQueue populatedQueue(int n) {
33 dl 1.1 PriorityQueue q = new PriorityQueue(n);
34     assertTrue(q.isEmpty());
35 jsr166 1.12 for (int i = n-1; i >= 0; i-=2)
36     assertTrue(q.offer(new Integer(i)));
37     for (int i = (n & 1); i < n; i+=2)
38     assertTrue(q.offer(new Integer(i)));
39 dl 1.1 assertFalse(q.isEmpty());
40 jsr166 1.12 assertEquals(n, q.size());
41 dl 1.1 return q;
42     }
43 jsr166 1.9
44 dl 1.5 /**
45 dl 1.6 * A new queue has unbounded capacity
46 dl 1.5 */
47     public void testConstructor1() {
48 dl 1.3 assertEquals(0, new PriorityQueue(SIZE).size());
49 dl 1.1 }
50    
51 dl 1.5 /**
52 jsr166 1.13 * Constructor throws IAE if capacity argument nonpositive
53 dl 1.5 */
54     public void testConstructor2() {
55 dl 1.1 try {
56     PriorityQueue q = new PriorityQueue(0);
57 dl 1.5 shouldThrow();
58 jsr166 1.13 } catch (IllegalArgumentException success) {}
59 dl 1.1 }
60    
61 dl 1.5 /**
62 dl 1.6 * Initializing from null Collection throws NPE
63 dl 1.5 */
64 dl 1.1 public void testConstructor3() {
65     try {
66     PriorityQueue q = new PriorityQueue((Collection)null);
67 dl 1.5 shouldThrow();
68 jsr166 1.13 } catch (NullPointerException success) {}
69 dl 1.1 }
70    
71 dl 1.5 /**
72 dl 1.6 * Initializing from Collection of null elements throws NPE
73 dl 1.5 */
74     public void testConstructor4() {
75 dl 1.1 try {
76 dl 1.3 Integer[] ints = new Integer[SIZE];
77 dl 1.1 PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
78 dl 1.5 shouldThrow();
79 jsr166 1.13 } catch (NullPointerException success) {}
80 dl 1.1 }
81    
82 dl 1.5 /**
83 dl 1.6 * Initializing from Collection with some null elements throws NPE
84 dl 1.5 */
85     public void testConstructor5() {
86 dl 1.1 try {
87 dl 1.3 Integer[] ints = new Integer[SIZE];
88     for (int i = 0; i < SIZE-1; ++i)
89 dl 1.1 ints[i] = new Integer(i);
90     PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
91 dl 1.5 shouldThrow();
92 jsr166 1.13 } catch (NullPointerException success) {}
93 dl 1.1 }
94    
95 dl 1.5 /**
96 dl 1.6 * Queue contains all elements of collection used to initialize
97 dl 1.5 */
98     public void testConstructor6() {
99 jsr166 1.14 Integer[] ints = new Integer[SIZE];
100     for (int i = 0; i < SIZE; ++i)
101     ints[i] = new Integer(i);
102     PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
103     for (int i = 0; i < SIZE; ++i)
104     assertEquals(ints[i], q.poll());
105 dl 1.1 }
106    
107 dl 1.5 /**
108 dl 1.6 * The comparator used in constructor is used
109 dl 1.5 */
110     public void testConstructor7() {
111 jsr166 1.14 MyReverseComparator cmp = new MyReverseComparator();
112     PriorityQueue q = new PriorityQueue(SIZE, cmp);
113     assertEquals(cmp, q.comparator());
114     Integer[] ints = new Integer[SIZE];
115     for (int i = 0; i < SIZE; ++i)
116     ints[i] = new Integer(i);
117     q.addAll(Arrays.asList(ints));
118     for (int i = SIZE-1; i >= 0; --i)
119     assertEquals(ints[i], q.poll());
120 dl 1.1 }
121    
122 dl 1.5 /**
123 dl 1.6 * isEmpty is true before add, false after
124 dl 1.5 */
125 dl 1.1 public void testEmpty() {
126     PriorityQueue q = new PriorityQueue(2);
127     assertTrue(q.isEmpty());
128     q.add(new Integer(1));
129     assertFalse(q.isEmpty());
130     q.add(new Integer(2));
131     q.remove();
132     q.remove();
133     assertTrue(q.isEmpty());
134     }
135    
136 dl 1.5 /**
137 dl 1.6 * size changes when elements added and removed
138 dl 1.5 */
139 dl 1.1 public void testSize() {
140 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
141     for (int i = 0; i < SIZE; ++i) {
142     assertEquals(SIZE-i, q.size());
143 dl 1.1 q.remove();
144     }
145 dl 1.3 for (int i = 0; i < SIZE; ++i) {
146 dl 1.1 assertEquals(i, q.size());
147     q.add(new Integer(i));
148     }
149     }
150    
151 dl 1.5 /**
152 dl 1.6 * offer(null) throws NPE
153 dl 1.5 */
154     public void testOfferNull() {
155 jsr166 1.12 try {
156 dl 1.1 PriorityQueue q = new PriorityQueue(1);
157     q.offer(null);
158 dl 1.5 shouldThrow();
159 jsr166 1.13 } catch (NullPointerException success) {}
160 dl 1.1 }
161    
162 dl 1.5 /**
163 dl 1.7 * add(null) throws NPE
164     */
165     public void testAddNull() {
166 jsr166 1.12 try {
167 dl 1.7 PriorityQueue q = new PriorityQueue(1);
168     q.add(null);
169     shouldThrow();
170 jsr166 1.13 } catch (NullPointerException success) {}
171 dl 1.7 }
172    
173     /**
174 dl 1.6 * Offer of comparable element succeeds
175 dl 1.5 */
176 dl 1.1 public void testOffer() {
177     PriorityQueue q = new PriorityQueue(1);
178 dl 1.6 assertTrue(q.offer(zero));
179     assertTrue(q.offer(one));
180 dl 1.1 }
181    
182 dl 1.5 /**
183 dl 1.6 * Offer of non-Comparable throws CCE
184 dl 1.5 */
185 dl 1.1 public void testOfferNonComparable() {
186     try {
187     PriorityQueue q = new PriorityQueue(1);
188     q.offer(new Object());
189     q.offer(new Object());
190     q.offer(new Object());
191 dl 1.5 shouldThrow();
192 jsr166 1.13 } catch (ClassCastException success) {}
193 dl 1.1 }
194    
195 dl 1.5 /**
196 dl 1.6 * add of comparable succeeds
197 dl 1.5 */
198     public void testAdd() {
199 dl 1.3 PriorityQueue q = new PriorityQueue(SIZE);
200     for (int i = 0; i < SIZE; ++i) {
201 dl 1.1 assertEquals(i, q.size());
202     assertTrue(q.add(new Integer(i)));
203     }
204     }
205    
206 dl 1.5 /**
207 dl 1.6 * addAll(null) throws NPE
208 dl 1.5 */
209     public void testAddAll1() {
210 dl 1.1 try {
211     PriorityQueue q = new PriorityQueue(1);
212     q.addAll(null);
213 dl 1.5 shouldThrow();
214 jsr166 1.13 } catch (NullPointerException success) {}
215 dl 1.1 }
216 dl 1.5 /**
217 dl 1.6 * addAll of a collection with null elements throws NPE
218 dl 1.5 */
219     public void testAddAll2() {
220 dl 1.1 try {
221 dl 1.3 PriorityQueue q = new PriorityQueue(SIZE);
222     Integer[] ints = new Integer[SIZE];
223 dl 1.1 q.addAll(Arrays.asList(ints));
224 dl 1.5 shouldThrow();
225 jsr166 1.13 } catch (NullPointerException success) {}
226 dl 1.1 }
227 dl 1.5 /**
228 dl 1.6 * addAll of a collection with any null elements throws NPE after
229     * possibly adding some elements
230 dl 1.5 */
231     public void testAddAll3() {
232 dl 1.1 try {
233 dl 1.3 PriorityQueue q = new PriorityQueue(SIZE);
234     Integer[] ints = new Integer[SIZE];
235     for (int i = 0; i < SIZE-1; ++i)
236 dl 1.1 ints[i] = new Integer(i);
237     q.addAll(Arrays.asList(ints));
238 dl 1.5 shouldThrow();
239 jsr166 1.13 } catch (NullPointerException success) {}
240 dl 1.1 }
241    
242 dl 1.5 /**
243 dl 1.6 * Queue contains all elements of successful addAll
244 dl 1.5 */
245     public void testAddAll5() {
246 jsr166 1.14 Integer[] empty = new Integer[0];
247     Integer[] ints = new Integer[SIZE];
248     for (int i = 0; i < SIZE; ++i)
249     ints[i] = new Integer(SIZE-1-i);
250     PriorityQueue q = new PriorityQueue(SIZE);
251     assertFalse(q.addAll(Arrays.asList(empty)));
252     assertTrue(q.addAll(Arrays.asList(ints)));
253     for (int i = 0; i < SIZE; ++i)
254     assertEquals(new Integer(i), q.poll());
255 dl 1.1 }
256    
257 dl 1.5 /**
258 dl 1.6 * poll succeeds unless empty
259 dl 1.5 */
260     public void testPoll() {
261 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
262     for (int i = 0; i < SIZE; ++i) {
263 jsr166 1.15 assertEquals(i, q.poll());
264 dl 1.1 }
265 jsr166 1.12 assertNull(q.poll());
266 dl 1.1 }
267    
268 dl 1.5 /**
269 dl 1.6 * peek returns next element, or null if empty
270 dl 1.5 */
271     public void testPeek() {
272 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
273     for (int i = 0; i < SIZE; ++i) {
274 jsr166 1.15 assertEquals(i, q.peek());
275     assertEquals(i, q.poll());
276 dl 1.1 assertTrue(q.peek() == null ||
277 jsr166 1.15 !q.peek().equals(i));
278 dl 1.1 }
279 jsr166 1.12 assertNull(q.peek());
280 dl 1.1 }
281    
282 dl 1.5 /**
283 dl 1.6 * element returns next element, or throws NSEE if empty
284 dl 1.5 */
285     public void testElement() {
286 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
287     for (int i = 0; i < SIZE; ++i) {
288 jsr166 1.15 assertEquals(i, q.element());
289     assertEquals(i, q.poll());
290 dl 1.1 }
291     try {
292     q.element();
293 dl 1.5 shouldThrow();
294 jsr166 1.13 } catch (NoSuchElementException success) {}
295 dl 1.1 }
296    
297 dl 1.5 /**
298 dl 1.6 * remove removes next element, or throws NSEE if empty
299 dl 1.5 */
300     public void testRemove() {
301 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
302     for (int i = 0; i < SIZE; ++i) {
303 jsr166 1.15 assertEquals(i, q.remove());
304 dl 1.1 }
305     try {
306     q.remove();
307 dl 1.5 shouldThrow();
308 jsr166 1.13 } catch (NoSuchElementException success) {}
309 dl 1.1 }
310    
311 dl 1.5 /**
312 dl 1.6 * remove(x) removes x and returns true if present
313 dl 1.5 */
314     public void testRemoveElement() {
315 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
316     for (int i = 1; i < SIZE; i+=2) {
317 dl 1.1 assertTrue(q.remove(new Integer(i)));
318     }
319 dl 1.3 for (int i = 0; i < SIZE; i+=2) {
320 dl 1.1 assertTrue(q.remove(new Integer(i)));
321     assertFalse(q.remove(new Integer(i+1)));
322     }
323 dl 1.2 assertTrue(q.isEmpty());
324 dl 1.1 }
325 jsr166 1.9
326 dl 1.5 /**
327 dl 1.6 * contains(x) reports true when elements added but not yet removed
328 dl 1.5 */
329     public void testContains() {
330 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
331     for (int i = 0; i < SIZE; ++i) {
332 dl 1.1 assertTrue(q.contains(new Integer(i)));
333     q.poll();
334     assertFalse(q.contains(new Integer(i)));
335     }
336     }
337    
338 dl 1.5 /**
339 dl 1.6 * clear removes all elements
340 dl 1.5 */
341     public void testClear() {
342 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
343 dl 1.1 q.clear();
344     assertTrue(q.isEmpty());
345     assertEquals(0, q.size());
346     q.add(new Integer(1));
347     assertFalse(q.isEmpty());
348     q.clear();
349     assertTrue(q.isEmpty());
350     }
351    
352 dl 1.5 /**
353 dl 1.6 * containsAll(c) is true when c contains a subset of elements
354 dl 1.5 */
355     public void testContainsAll() {
356 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
357     PriorityQueue p = new PriorityQueue(SIZE);
358     for (int i = 0; i < SIZE; ++i) {
359 dl 1.1 assertTrue(q.containsAll(p));
360     assertFalse(p.containsAll(q));
361     p.add(new Integer(i));
362     }
363     assertTrue(p.containsAll(q));
364     }
365    
366 dl 1.5 /**
367 dl 1.6 * retainAll(c) retains only those elements of c and reports true if changed
368 dl 1.5 */
369     public void testRetainAll() {
370 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
371     PriorityQueue p = populatedQueue(SIZE);
372     for (int i = 0; i < SIZE; ++i) {
373 dl 1.1 boolean changed = q.retainAll(p);
374     if (i == 0)
375     assertFalse(changed);
376     else
377     assertTrue(changed);
378    
379     assertTrue(q.containsAll(p));
380 dl 1.3 assertEquals(SIZE-i, q.size());
381 dl 1.1 p.remove();
382     }
383     }
384    
385 dl 1.5 /**
386 dl 1.6 * removeAll(c) removes only those elements of c and reports true if changed
387 dl 1.5 */
388     public void testRemoveAll() {
389 dl 1.3 for (int i = 1; i < SIZE; ++i) {
390     PriorityQueue q = populatedQueue(SIZE);
391     PriorityQueue p = populatedQueue(i);
392 dl 1.1 assertTrue(q.removeAll(p));
393 dl 1.3 assertEquals(SIZE-i, q.size());
394 dl 1.1 for (int j = 0; j < i; ++j) {
395     Integer I = (Integer)(p.remove());
396     assertFalse(q.contains(I));
397     }
398     }
399     }
400    
401 dl 1.5 /**
402 dl 1.6 * toArray contains all elements
403 dl 1.5 */
404     public void testToArray() {
405 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
406 jsr166 1.12 Object[] o = q.toArray();
407 dl 1.1 Arrays.sort(o);
408 jsr166 1.12 for (int i = 0; i < o.length; i++)
409     assertEquals(o[i], q.poll());
410 dl 1.1 }
411    
412 dl 1.5 /**
413 dl 1.6 * toArray(a) contains all elements
414 dl 1.5 */
415     public void testToArray2() {
416 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
417 jsr166 1.12 Integer[] ints = new Integer[SIZE];
418     ints = (Integer[])q.toArray(ints);
419 dl 1.1 Arrays.sort(ints);
420 jsr166 1.10 for (int i = 0; i < ints.length; i++)
421 dl 1.1 assertEquals(ints[i], q.poll());
422     }
423 jsr166 1.9
424 dl 1.5 /**
425 dl 1.6 * iterator iterates through all elements
426 dl 1.5 */
427     public void testIterator() {
428 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
429 dl 1.1 int i = 0;
430 jsr166 1.12 Iterator it = q.iterator();
431 jsr166 1.10 while (it.hasNext()) {
432 dl 1.1 assertTrue(q.contains(it.next()));
433     ++i;
434     }
435 dl 1.3 assertEquals(i, SIZE);
436 dl 1.1 }
437    
438 dl 1.5 /**
439 dl 1.6 * iterator.remove removes current element
440 dl 1.5 */
441 dl 1.1 public void testIteratorRemove () {
442     final PriorityQueue q = new PriorityQueue(3);
443     q.add(new Integer(2));
444     q.add(new Integer(1));
445     q.add(new Integer(3));
446    
447     Iterator it = q.iterator();
448     it.next();
449     it.remove();
450    
451     it = q.iterator();
452     assertEquals(it.next(), new Integer(2));
453     assertEquals(it.next(), new Integer(3));
454     assertFalse(it.hasNext());
455     }
456    
457    
458 dl 1.5 /**
459 dl 1.6 * toString contains toStrings of elements
460 dl 1.5 */
461     public void testToString() {
462 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
463 dl 1.1 String s = q.toString();
464 dl 1.3 for (int i = 0; i < SIZE; ++i) {
465 dl 1.1 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
466     }
467 jsr166 1.9 }
468 dl 1.1
469 dl 1.5 /**
470 jsr166 1.9 * A deserialized serialized queue has same elements
471 dl 1.5 */
472 jsr166 1.13 public void testSerialization() throws Exception {
473 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
474 jsr166 1.13 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
475     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
476     out.writeObject(q);
477     out.close();
478    
479     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
480     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
481     PriorityQueue r = (PriorityQueue)in.readObject();
482     assertEquals(q.size(), r.size());
483     while (!q.isEmpty())
484     assertEquals(q.remove(), r.remove());
485 dl 1.2 }
486 dl 1.1 }