ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityQueueTest.java
Revision: 1.33
Committed: Sat Apr 25 04:55:31 2015 UTC (9 years ago) by jsr166
Branch: MAIN
Changes since 1.32: +1 -1 lines
Log Message:
improve main methods; respect system properties; actually fail if a test fails

File Contents

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