ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityQueueTest.java
Revision: 1.35
Committed: Sat May 23 00:53:08 2015 UTC (8 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.34: +7 -7 lines
Log Message:
whitespace

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