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

# 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 new PriorityQueue(Arrays.asList(new Integer[SIZE]));
83 shouldThrow();
84 } catch (NullPointerException success) {}
85 }
86
87 /**
88 * Initializing from Collection with some null elements throws NPE
89 */
90 public void testConstructor5() {
91 Integer[] ints = new Integer[SIZE];
92 for (int i = 0; i < SIZE - 1; ++i)
93 ints[i] = new Integer(i);
94 try {
95 new PriorityQueue(Arrays.asList(ints));
96 shouldThrow();
97 } catch (NullPointerException success) {}
98 }
99
100 /**
101 * Queue contains all elements of collection used to initialize
102 */
103 public void testConstructor6() {
104 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 }
111
112 /**
113 * The comparator used in constructor is used
114 */
115 public void testConstructor7() {
116 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 for (int i = SIZE - 1; i >= 0; --i)
124 assertEquals(ints[i], q.poll());
125 }
126
127 /**
128 * isEmpty is true before add, false after
129 */
130 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 /**
142 * size changes when elements added and removed
143 */
144 public void testSize() {
145 PriorityQueue q = populatedQueue(SIZE);
146 for (int i = 0; i < SIZE; ++i) {
147 assertEquals(SIZE - i, q.size());
148 q.remove();
149 }
150 for (int i = 0; i < SIZE; ++i) {
151 assertEquals(i, q.size());
152 q.add(new Integer(i));
153 }
154 }
155
156 /**
157 * offer(null) throws NPE
158 */
159 public void testOfferNull() {
160 PriorityQueue q = new PriorityQueue(1);
161 try {
162 q.offer(null);
163 shouldThrow();
164 } catch (NullPointerException success) {}
165 }
166
167 /**
168 * add(null) throws NPE
169 */
170 public void testAddNull() {
171 PriorityQueue q = new PriorityQueue(1);
172 try {
173 q.add(null);
174 shouldThrow();
175 } catch (NullPointerException success) {}
176 }
177
178 /**
179 * Offer of comparable element succeeds
180 */
181 public void testOffer() {
182 PriorityQueue q = new PriorityQueue(1);
183 assertTrue(q.offer(zero));
184 assertTrue(q.offer(one));
185 }
186
187 /**
188 * Offer of non-Comparable throws CCE
189 */
190 public void testOfferNonComparable() {
191 PriorityQueue q = new PriorityQueue(1);
192 try {
193 q.offer(new Object());
194 q.offer(new Object());
195 shouldThrow();
196 } catch (ClassCastException success) {}
197 }
198
199 /**
200 * add of comparable succeeds
201 */
202 public void testAdd() {
203 PriorityQueue q = new PriorityQueue(SIZE);
204 for (int i = 0; i < SIZE; ++i) {
205 assertEquals(i, q.size());
206 assertTrue(q.add(new Integer(i)));
207 }
208 }
209
210 /**
211 * addAll(null) throws NPE
212 */
213 public void testAddAll1() {
214 PriorityQueue q = new PriorityQueue(1);
215 try {
216 q.addAll(null);
217 shouldThrow();
218 } catch (NullPointerException success) {}
219 }
220
221 /**
222 * addAll of a collection with null elements throws NPE
223 */
224 public void testAddAll2() {
225 PriorityQueue q = new PriorityQueue(SIZE);
226 try {
227 q.addAll(Arrays.asList(new Integer[SIZE]));
228 shouldThrow();
229 } catch (NullPointerException success) {}
230 }
231
232 /**
233 * addAll of a collection with any null elements throws NPE after
234 * possibly adding some elements
235 */
236 public void testAddAll3() {
237 PriorityQueue q = new PriorityQueue(SIZE);
238 Integer[] ints = new Integer[SIZE];
239 for (int i = 0; i < SIZE - 1; ++i)
240 ints[i] = new Integer(i);
241 try {
242 q.addAll(Arrays.asList(ints));
243 shouldThrow();
244 } catch (NullPointerException success) {}
245 }
246
247 /**
248 * Queue contains all elements of successful addAll
249 */
250 public void testAddAll5() {
251 Integer[] empty = new Integer[0];
252 Integer[] ints = new Integer[SIZE];
253 for (int i = 0; i < SIZE; ++i)
254 ints[i] = new Integer(SIZE - 1 - i);
255 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 }
261
262 /**
263 * poll succeeds unless empty
264 */
265 public void testPoll() {
266 PriorityQueue q = populatedQueue(SIZE);
267 for (int i = 0; i < SIZE; ++i) {
268 assertEquals(i, q.poll());
269 }
270 assertNull(q.poll());
271 }
272
273 /**
274 * peek returns next element, or null if empty
275 */
276 public void testPeek() {
277 PriorityQueue q = populatedQueue(SIZE);
278 for (int i = 0; i < SIZE; ++i) {
279 assertEquals(i, q.peek());
280 assertEquals(i, q.poll());
281 assertTrue(q.peek() == null ||
282 !q.peek().equals(i));
283 }
284 assertNull(q.peek());
285 }
286
287 /**
288 * element returns next element, or throws NSEE if empty
289 */
290 public void testElement() {
291 PriorityQueue q = populatedQueue(SIZE);
292 for (int i = 0; i < SIZE; ++i) {
293 assertEquals(i, q.element());
294 assertEquals(i, q.poll());
295 }
296 try {
297 q.element();
298 shouldThrow();
299 } catch (NoSuchElementException success) {}
300 }
301
302 /**
303 * remove removes next element, or throws NSEE if empty
304 */
305 public void testRemove() {
306 PriorityQueue q = populatedQueue(SIZE);
307 for (int i = 0; i < SIZE; ++i) {
308 assertEquals(i, q.remove());
309 }
310 try {
311 q.remove();
312 shouldThrow();
313 } catch (NoSuchElementException success) {}
314 }
315
316 /**
317 * remove(x) removes x and returns true if present
318 */
319 public void testRemoveElement() {
320 PriorityQueue q = populatedQueue(SIZE);
321 for (int i = 1; i < SIZE; i += 2) {
322 assertTrue(q.contains(i));
323 assertTrue(q.remove(i));
324 assertFalse(q.contains(i));
325 assertTrue(q.contains(i-1));
326 }
327 for (int i = 0; i < SIZE; i += 2) {
328 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 }
334 assertTrue(q.isEmpty());
335 }
336
337 /**
338 * contains(x) reports true when elements added but not yet removed
339 */
340 public void testContains() {
341 PriorityQueue q = populatedQueue(SIZE);
342 for (int i = 0; i < SIZE; ++i) {
343 assertTrue(q.contains(new Integer(i)));
344 q.poll();
345 assertFalse(q.contains(new Integer(i)));
346 }
347 }
348
349 /**
350 * clear removes all elements
351 */
352 public void testClear() {
353 PriorityQueue q = populatedQueue(SIZE);
354 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 /**
364 * containsAll(c) is true when c contains a subset of elements
365 */
366 public void testContainsAll() {
367 PriorityQueue q = populatedQueue(SIZE);
368 PriorityQueue p = new PriorityQueue(SIZE);
369 for (int i = 0; i < SIZE; ++i) {
370 assertTrue(q.containsAll(p));
371 assertFalse(p.containsAll(q));
372 p.add(new Integer(i));
373 }
374 assertTrue(p.containsAll(q));
375 }
376
377 /**
378 * retainAll(c) retains only those elements of c and reports true if changed
379 */
380 public void testRetainAll() {
381 PriorityQueue q = populatedQueue(SIZE);
382 PriorityQueue p = populatedQueue(SIZE);
383 for (int i = 0; i < SIZE; ++i) {
384 boolean changed = q.retainAll(p);
385 if (i == 0)
386 assertFalse(changed);
387 else
388 assertTrue(changed);
389
390 assertTrue(q.containsAll(p));
391 assertEquals(SIZE - i, q.size());
392 p.remove();
393 }
394 }
395
396 /**
397 * removeAll(c) removes only those elements of c and reports true if changed
398 */
399 public void testRemoveAll() {
400 for (int i = 1; i < SIZE; ++i) {
401 PriorityQueue q = populatedQueue(SIZE);
402 PriorityQueue p = populatedQueue(i);
403 assertTrue(q.removeAll(p));
404 assertEquals(SIZE - i, q.size());
405 for (int j = 0; j < i; ++j) {
406 Integer x = (Integer)(p.remove());
407 assertFalse(q.contains(x));
408 }
409 }
410 }
411
412 /**
413 * toArray contains all elements
414 */
415 public void testToArray() {
416 PriorityQueue q = populatedQueue(SIZE);
417 Object[] o = q.toArray();
418 Arrays.sort(o);
419 for (int i = 0; i < o.length; i++)
420 assertSame(o[i], q.poll());
421 }
422
423 /**
424 * toArray(a) contains all elements
425 */
426 public void testToArray2() {
427 PriorityQueue<Integer> q = populatedQueue(SIZE);
428 Integer[] ints = new Integer[SIZE];
429 Integer[] array = q.toArray(ints);
430 assertSame(ints, array);
431 Arrays.sort(ints);
432 for (int i = 0; i < ints.length; i++)
433 assertSame(ints[i], q.poll());
434 }
435
436 /**
437 * iterator iterates through all elements
438 */
439 public void testIterator() {
440 PriorityQueue q = populatedQueue(SIZE);
441 Iterator it = q.iterator();
442 int i;
443 for (i = 0; it.hasNext(); i++)
444 assertTrue(q.contains(it.next()));
445 assertEquals(i, SIZE);
446 assertIteratorExhausted(it);
447 }
448
449 /**
450 * iterator of empty collection has no elements
451 */
452 public void testEmptyIterator() {
453 assertIteratorExhausted(new PriorityQueue().iterator());
454 }
455
456 /**
457 * iterator.remove removes current element
458 */
459 public void testIteratorRemove() {
460 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 /**
476 * toString contains toStrings of elements
477 */
478 public void testToString() {
479 PriorityQueue q = populatedQueue(SIZE);
480 String s = q.toString();
481 for (int i = 0; i < SIZE; ++i) {
482 assertTrue(s.contains(String.valueOf(i)));
483 }
484 }
485
486 /**
487 * A deserialized serialized queue has same elements
488 */
489 public void testSerialization() throws Exception {
490 Queue x = populatedQueue(SIZE);
491 Queue y = serialClone(x);
492
493 assertNotSame(x, y);
494 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 }
501 }