ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityQueueTest.java
Revision: 1.21
Committed: Tue Mar 15 19:47:07 2011 UTC (13 years, 1 month ago) by jsr166
Branch: MAIN
CVS Tags: release-1_7_0
Changes since 1.20: +1 -1 lines
Log Message:
Update Creative Commons license URL in legal notices

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 jsr166 1.21 * http://creativecommons.org/publicdomain/zero/1.0/
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.16 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 jsr166 1.19 private PriorityQueue<Integer> populatedQueue(int n) {
33     PriorityQueue<Integer> q = new PriorityQueue<Integer>(n);
34 dl 1.1 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 jsr166 1.17
217 dl 1.5 /**
218 dl 1.6 * addAll of a collection with null elements throws NPE
219 dl 1.5 */
220     public void testAddAll2() {
221 dl 1.1 try {
222 dl 1.3 PriorityQueue q = new PriorityQueue(SIZE);
223     Integer[] ints = new Integer[SIZE];
224 dl 1.1 q.addAll(Arrays.asList(ints));
225 dl 1.5 shouldThrow();
226 jsr166 1.13 } catch (NullPointerException success) {}
227 dl 1.1 }
228 jsr166 1.17
229 dl 1.5 /**
230 dl 1.6 * addAll of a collection with any null elements throws NPE after
231     * possibly adding some elements
232 dl 1.5 */
233     public void testAddAll3() {
234 dl 1.1 try {
235 dl 1.3 PriorityQueue q = new PriorityQueue(SIZE);
236     Integer[] ints = new Integer[SIZE];
237     for (int i = 0; i < SIZE-1; ++i)
238 dl 1.1 ints[i] = new Integer(i);
239     q.addAll(Arrays.asList(ints));
240 dl 1.5 shouldThrow();
241 jsr166 1.13 } catch (NullPointerException success) {}
242 dl 1.1 }
243    
244 dl 1.5 /**
245 dl 1.6 * Queue contains all elements of successful addAll
246 dl 1.5 */
247     public void testAddAll5() {
248 jsr166 1.14 Integer[] empty = new Integer[0];
249     Integer[] ints = new Integer[SIZE];
250     for (int i = 0; i < SIZE; ++i)
251     ints[i] = new Integer(SIZE-1-i);
252     PriorityQueue q = new PriorityQueue(SIZE);
253     assertFalse(q.addAll(Arrays.asList(empty)));
254     assertTrue(q.addAll(Arrays.asList(ints)));
255     for (int i = 0; i < SIZE; ++i)
256     assertEquals(new Integer(i), q.poll());
257 dl 1.1 }
258    
259 dl 1.5 /**
260 dl 1.6 * poll succeeds unless empty
261 dl 1.5 */
262     public void testPoll() {
263 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
264     for (int i = 0; i < SIZE; ++i) {
265 jsr166 1.15 assertEquals(i, q.poll());
266 dl 1.1 }
267 jsr166 1.12 assertNull(q.poll());
268 dl 1.1 }
269    
270 dl 1.5 /**
271 dl 1.6 * peek returns next element, or null if empty
272 dl 1.5 */
273     public void testPeek() {
274 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
275     for (int i = 0; i < SIZE; ++i) {
276 jsr166 1.15 assertEquals(i, q.peek());
277     assertEquals(i, q.poll());
278 dl 1.1 assertTrue(q.peek() == null ||
279 jsr166 1.15 !q.peek().equals(i));
280 dl 1.1 }
281 jsr166 1.12 assertNull(q.peek());
282 dl 1.1 }
283    
284 dl 1.5 /**
285 dl 1.6 * element returns next element, or throws NSEE if empty
286 dl 1.5 */
287     public void testElement() {
288 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
289     for (int i = 0; i < SIZE; ++i) {
290 jsr166 1.15 assertEquals(i, q.element());
291     assertEquals(i, q.poll());
292 dl 1.1 }
293     try {
294     q.element();
295 dl 1.5 shouldThrow();
296 jsr166 1.13 } catch (NoSuchElementException success) {}
297 dl 1.1 }
298    
299 dl 1.5 /**
300 dl 1.6 * remove removes next element, or throws NSEE if empty
301 dl 1.5 */
302     public void testRemove() {
303 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
304     for (int i = 0; i < SIZE; ++i) {
305 jsr166 1.15 assertEquals(i, q.remove());
306 dl 1.1 }
307     try {
308     q.remove();
309 dl 1.5 shouldThrow();
310 jsr166 1.13 } catch (NoSuchElementException success) {}
311 dl 1.1 }
312    
313 dl 1.5 /**
314 dl 1.6 * remove(x) removes x and returns true if present
315 dl 1.5 */
316     public void testRemoveElement() {
317 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
318     for (int i = 1; i < SIZE; i+=2) {
319 jsr166 1.20 assertTrue(q.contains(i));
320     assertTrue(q.remove(i));
321     assertFalse(q.contains(i));
322     assertTrue(q.contains(i-1));
323 dl 1.1 }
324 dl 1.3 for (int i = 0; i < SIZE; i+=2) {
325 jsr166 1.20 assertTrue(q.contains(i));
326     assertTrue(q.remove(i));
327     assertFalse(q.contains(i));
328     assertFalse(q.remove(i+1));
329     assertFalse(q.contains(i+1));
330 dl 1.1 }
331 dl 1.2 assertTrue(q.isEmpty());
332 dl 1.1 }
333 jsr166 1.9
334 dl 1.5 /**
335 dl 1.6 * contains(x) reports true when elements added but not yet removed
336 dl 1.5 */
337     public void testContains() {
338 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
339     for (int i = 0; i < SIZE; ++i) {
340 dl 1.1 assertTrue(q.contains(new Integer(i)));
341     q.poll();
342     assertFalse(q.contains(new Integer(i)));
343     }
344     }
345    
346 dl 1.5 /**
347 dl 1.6 * clear removes all elements
348 dl 1.5 */
349     public void testClear() {
350 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
351 dl 1.1 q.clear();
352     assertTrue(q.isEmpty());
353     assertEquals(0, q.size());
354     q.add(new Integer(1));
355     assertFalse(q.isEmpty());
356     q.clear();
357     assertTrue(q.isEmpty());
358     }
359    
360 dl 1.5 /**
361 dl 1.6 * containsAll(c) is true when c contains a subset of elements
362 dl 1.5 */
363     public void testContainsAll() {
364 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
365     PriorityQueue p = new PriorityQueue(SIZE);
366     for (int i = 0; i < SIZE; ++i) {
367 dl 1.1 assertTrue(q.containsAll(p));
368     assertFalse(p.containsAll(q));
369     p.add(new Integer(i));
370     }
371     assertTrue(p.containsAll(q));
372     }
373    
374 dl 1.5 /**
375 dl 1.6 * retainAll(c) retains only those elements of c and reports true if changed
376 dl 1.5 */
377     public void testRetainAll() {
378 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
379     PriorityQueue p = populatedQueue(SIZE);
380     for (int i = 0; i < SIZE; ++i) {
381 dl 1.1 boolean changed = q.retainAll(p);
382     if (i == 0)
383     assertFalse(changed);
384     else
385     assertTrue(changed);
386    
387     assertTrue(q.containsAll(p));
388 dl 1.3 assertEquals(SIZE-i, q.size());
389 dl 1.1 p.remove();
390     }
391     }
392    
393 dl 1.5 /**
394 dl 1.6 * removeAll(c) removes only those elements of c and reports true if changed
395 dl 1.5 */
396     public void testRemoveAll() {
397 dl 1.3 for (int i = 1; i < SIZE; ++i) {
398     PriorityQueue q = populatedQueue(SIZE);
399     PriorityQueue p = populatedQueue(i);
400 dl 1.1 assertTrue(q.removeAll(p));
401 dl 1.3 assertEquals(SIZE-i, q.size());
402 dl 1.1 for (int j = 0; j < i; ++j) {
403     Integer I = (Integer)(p.remove());
404     assertFalse(q.contains(I));
405     }
406     }
407     }
408    
409 dl 1.5 /**
410 dl 1.6 * toArray contains all elements
411 dl 1.5 */
412     public void testToArray() {
413 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
414 jsr166 1.12 Object[] o = q.toArray();
415 dl 1.1 Arrays.sort(o);
416 jsr166 1.12 for (int i = 0; i < o.length; i++)
417 jsr166 1.18 assertSame(o[i], q.poll());
418 dl 1.1 }
419    
420 dl 1.5 /**
421 dl 1.6 * toArray(a) contains all elements
422 dl 1.5 */
423     public void testToArray2() {
424 jsr166 1.19 PriorityQueue<Integer> q = populatedQueue(SIZE);
425 jsr166 1.12 Integer[] ints = new Integer[SIZE];
426 jsr166 1.19 Integer[] array = q.toArray(ints);
427     assertSame(ints, array);
428 dl 1.1 Arrays.sort(ints);
429 jsr166 1.10 for (int i = 0; i < ints.length; i++)
430 jsr166 1.18 assertSame(ints[i], q.poll());
431 dl 1.1 }
432 jsr166 1.9
433 dl 1.5 /**
434 dl 1.6 * iterator iterates through all elements
435 dl 1.5 */
436     public void testIterator() {
437 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
438 dl 1.1 int i = 0;
439 jsr166 1.12 Iterator it = q.iterator();
440 jsr166 1.10 while (it.hasNext()) {
441 dl 1.1 assertTrue(q.contains(it.next()));
442     ++i;
443     }
444 dl 1.3 assertEquals(i, SIZE);
445 dl 1.1 }
446    
447 dl 1.5 /**
448 dl 1.6 * iterator.remove removes current element
449 dl 1.5 */
450 jsr166 1.16 public void testIteratorRemove() {
451 dl 1.1 final PriorityQueue q = new PriorityQueue(3);
452     q.add(new Integer(2));
453     q.add(new Integer(1));
454     q.add(new Integer(3));
455    
456     Iterator it = q.iterator();
457     it.next();
458     it.remove();
459    
460     it = q.iterator();
461     assertEquals(it.next(), new Integer(2));
462     assertEquals(it.next(), new Integer(3));
463     assertFalse(it.hasNext());
464     }
465    
466    
467 dl 1.5 /**
468 dl 1.6 * toString contains toStrings of elements
469 dl 1.5 */
470     public void testToString() {
471 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
472 dl 1.1 String s = q.toString();
473 dl 1.3 for (int i = 0; i < SIZE; ++i) {
474 dl 1.1 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
475     }
476 jsr166 1.9 }
477 dl 1.1
478 dl 1.5 /**
479 jsr166 1.9 * A deserialized serialized queue has same elements
480 dl 1.5 */
481 jsr166 1.13 public void testSerialization() throws Exception {
482 dl 1.3 PriorityQueue q = populatedQueue(SIZE);
483 jsr166 1.13 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
484     ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
485     out.writeObject(q);
486     out.close();
487    
488     ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
489     ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
490     PriorityQueue r = (PriorityQueue)in.readObject();
491     assertEquals(q.size(), r.size());
492     while (!q.isEmpty())
493     assertEquals(q.remove(), r.remove());
494 dl 1.2 }
495 dl 1.1 }