ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityQueueTest.java
Revision: 1.6
Committed: Thu Sep 25 11:02:41 2003 UTC (20 years, 7 months ago) by dl
Branch: MAIN
Changes since 1.5: +36 -39 lines
Log Message:
improve tck javadocs; rename and add a few tests

File Contents

# Content
1 /*
2 * Written by members of JCP JSR-166 Expert Group and released to the
3 * public domain. Use, modify, and redistribute this code in any way
4 * without acknowledgement. Other contributors include Andrew Wright,
5 * Jeffrey Hayes, Pat Fischer, Mike Judd.
6 */
7
8 import junit.framework.*;
9 import java.util.*;
10 import java.util.concurrent.*;
11 import java.io.*;
12
13 public class PriorityQueueTest extends JSR166TestCase {
14 public static void main(String[] args) {
15 junit.textui.TestRunner.run (suite());
16 }
17 public static Test suite() {
18 return new TestSuite(PriorityQueueTest.class);
19 }
20
21 static class MyReverseComparator implements Comparator {
22 public int compare(Object x, Object y) {
23 int i = ((Integer)x).intValue();
24 int j = ((Integer)y).intValue();
25 if (i < j) return 1;
26 if (i > j) return -1;
27 return 0;
28 }
29 }
30
31 /**
32 * Create a queue of given size containing consecutive
33 * Integers 0 ... n.
34 */
35 private PriorityQueue populatedQueue(int n) {
36 PriorityQueue q = new PriorityQueue(n);
37 assertTrue(q.isEmpty());
38 for(int i = n-1; i >= 0; i-=2)
39 assertTrue(q.offer(new Integer(i)));
40 for(int i = (n & 1); i < n; i+=2)
41 assertTrue(q.offer(new Integer(i)));
42 assertFalse(q.isEmpty());
43 assertEquals(n, q.size());
44 return q;
45 }
46
47 /**
48 * A new queue has unbounded capacity
49 */
50 public void testConstructor1() {
51 assertEquals(0, new PriorityQueue(SIZE).size());
52 }
53
54 /**
55 * Constructor throws IAE if capacity argument nonpositive
56 */
57 public void testConstructor2() {
58 try {
59 PriorityQueue q = new PriorityQueue(0);
60 shouldThrow();
61 }
62 catch (IllegalArgumentException success) {}
63 }
64
65 /**
66 * Initializing from null Collection throws NPE
67 */
68 public void testConstructor3() {
69 try {
70 PriorityQueue q = new PriorityQueue((Collection)null);
71 shouldThrow();
72 }
73 catch (NullPointerException success) {}
74 }
75
76 /**
77 * Initializing from Collection of null elements throws NPE
78 */
79 public void testConstructor4() {
80 try {
81 Integer[] ints = new Integer[SIZE];
82 PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
83 shouldThrow();
84 }
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 PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
97 shouldThrow();
98 }
99 catch (NullPointerException success) {}
100 }
101
102 /**
103 * Queue contains all elements of collection used to initialize
104 */
105 public void testConstructor6() {
106 try {
107 Integer[] ints = new Integer[SIZE];
108 for (int i = 0; i < SIZE; ++i)
109 ints[i] = new Integer(i);
110 PriorityQueue q = new PriorityQueue(Arrays.asList(ints));
111 for (int i = 0; i < SIZE; ++i)
112 assertEquals(ints[i], q.poll());
113 }
114 finally {}
115 }
116
117 /**
118 * The comparator used in constructor is used
119 */
120 public void testConstructor7() {
121 try {
122 MyReverseComparator cmp = new MyReverseComparator();
123 PriorityQueue q = new PriorityQueue(SIZE, cmp);
124 assertEquals(cmp, q.comparator());
125 Integer[] ints = new Integer[SIZE];
126 for (int i = 0; i < SIZE; ++i)
127 ints[i] = new Integer(i);
128 q.addAll(Arrays.asList(ints));
129 for (int i = SIZE-1; i >= 0; --i)
130 assertEquals(ints[i], q.poll());
131 }
132 finally {}
133 }
134
135 /**
136 * isEmpty is true before add, false after
137 */
138 public void testEmpty() {
139 PriorityQueue q = new PriorityQueue(2);
140 assertTrue(q.isEmpty());
141 q.add(new Integer(1));
142 assertFalse(q.isEmpty());
143 q.add(new Integer(2));
144 q.remove();
145 q.remove();
146 assertTrue(q.isEmpty());
147 }
148
149 /**
150 * size changes when elements added and removed
151 */
152 public void testSize() {
153 PriorityQueue q = populatedQueue(SIZE);
154 for (int i = 0; i < SIZE; ++i) {
155 assertEquals(SIZE-i, q.size());
156 q.remove();
157 }
158 for (int i = 0; i < SIZE; ++i) {
159 assertEquals(i, q.size());
160 q.add(new Integer(i));
161 }
162 }
163
164 /**
165 * offer(null) throws NPE
166 */
167 public void testOfferNull() {
168 try {
169 PriorityQueue q = new PriorityQueue(1);
170 q.offer(null);
171 shouldThrow();
172 } catch (NullPointerException success) { }
173 }
174
175 /**
176 * Offer of comparable element succeeds
177 */
178 public void testOffer() {
179 PriorityQueue q = new PriorityQueue(1);
180 assertTrue(q.offer(zero));
181 assertTrue(q.offer(one));
182 }
183
184 /**
185 * Offer of non-Comparable throws CCE
186 */
187 public void testOfferNonComparable() {
188 try {
189 PriorityQueue q = new PriorityQueue(1);
190 q.offer(new Object());
191 q.offer(new Object());
192 q.offer(new Object());
193 shouldThrow();
194 }
195 catch(ClassCastException success) {}
196 }
197
198 /**
199 * add of comparable succeeds
200 */
201 public void testAdd() {
202 PriorityQueue q = new PriorityQueue(SIZE);
203 for (int i = 0; i < SIZE; ++i) {
204 assertEquals(i, q.size());
205 assertTrue(q.add(new Integer(i)));
206 }
207 }
208
209 /**
210 * addAll(null) throws NPE
211 */
212 public void testAddAll1() {
213 try {
214 PriorityQueue q = new PriorityQueue(1);
215 q.addAll(null);
216 shouldThrow();
217 }
218 catch (NullPointerException success) {}
219 }
220 /**
221 * addAll of a collection with null elements throws NPE
222 */
223 public void testAddAll2() {
224 try {
225 PriorityQueue q = new PriorityQueue(SIZE);
226 Integer[] ints = new Integer[SIZE];
227 q.addAll(Arrays.asList(ints));
228 shouldThrow();
229 }
230 catch (NullPointerException success) {}
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 try {
238 PriorityQueue q = new PriorityQueue(SIZE);
239 Integer[] ints = new Integer[SIZE];
240 for (int i = 0; i < SIZE-1; ++i)
241 ints[i] = new Integer(i);
242 q.addAll(Arrays.asList(ints));
243 shouldThrow();
244 }
245 catch (NullPointerException success) {}
246 }
247
248 /**
249 * Queue contains all elements of successful addAll
250 */
251 public void testAddAll5() {
252 try {
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 finally {}
264 }
265
266 /**
267 * poll succeeds unless empty
268 */
269 public void testPoll() {
270 PriorityQueue q = populatedQueue(SIZE);
271 for (int i = 0; i < SIZE; ++i) {
272 assertEquals(i, ((Integer)q.poll()).intValue());
273 }
274 assertNull(q.poll());
275 }
276
277 /**
278 * peek returns next element, or null if empty
279 */
280 public void testPeek() {
281 PriorityQueue q = populatedQueue(SIZE);
282 for (int i = 0; i < SIZE; ++i) {
283 assertEquals(i, ((Integer)q.peek()).intValue());
284 q.poll();
285 assertTrue(q.peek() == null ||
286 i != ((Integer)q.peek()).intValue());
287 }
288 assertNull(q.peek());
289 }
290
291 /**
292 * element returns next element, or throws NSEE if empty
293 */
294 public void testElement() {
295 PriorityQueue q = populatedQueue(SIZE);
296 for (int i = 0; i < SIZE; ++i) {
297 assertEquals(i, ((Integer)q.element()).intValue());
298 q.poll();
299 }
300 try {
301 q.element();
302 shouldThrow();
303 }
304 catch (NoSuchElementException success) {}
305 }
306
307 /**
308 * remove removes next element, or throws NSEE if empty
309 */
310 public void testRemove() {
311 PriorityQueue q = populatedQueue(SIZE);
312 for (int i = 0; i < SIZE; ++i) {
313 assertEquals(i, ((Integer)q.remove()).intValue());
314 }
315 try {
316 q.remove();
317 shouldThrow();
318 } catch (NoSuchElementException success){
319 }
320 }
321
322 /**
323 * remove(x) removes x and returns true if present
324 */
325 public void testRemoveElement() {
326 PriorityQueue q = populatedQueue(SIZE);
327 for (int i = 1; i < SIZE; i+=2) {
328 assertTrue(q.remove(new Integer(i)));
329 }
330 for (int i = 0; i < SIZE; i+=2) {
331 assertTrue(q.remove(new Integer(i)));
332 assertFalse(q.remove(new Integer(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 I = (Integer)(p.remove());
407 assertFalse(q.contains(I));
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 assertEquals(o[i], q.poll());
421 }
422
423 /**
424 * toArray(a) contains all elements
425 */
426 public void testToArray2() {
427 PriorityQueue q = populatedQueue(SIZE);
428 Integer[] ints = new Integer[SIZE];
429 ints = (Integer[])q.toArray(ints);
430 Arrays.sort(ints);
431 for(int i = 0; i < ints.length; i++)
432 assertEquals(ints[i], q.poll());
433 }
434
435 /**
436 * iterator iterates through all elements
437 */
438 public void testIterator() {
439 PriorityQueue q = populatedQueue(SIZE);
440 int i = 0;
441 Iterator it = q.iterator();
442 while(it.hasNext()) {
443 assertTrue(q.contains(it.next()));
444 ++i;
445 }
446 assertEquals(i, SIZE);
447 }
448
449 /**
450 * iterator.remove removes current element
451 */
452 public void testIteratorRemove () {
453 final PriorityQueue q = new PriorityQueue(3);
454 q.add(new Integer(2));
455 q.add(new Integer(1));
456 q.add(new Integer(3));
457
458 Iterator it = q.iterator();
459 it.next();
460 it.remove();
461
462 it = q.iterator();
463 assertEquals(it.next(), new Integer(2));
464 assertEquals(it.next(), new Integer(3));
465 assertFalse(it.hasNext());
466 }
467
468
469 /**
470 * toString contains toStrings of elements
471 */
472 public void testToString() {
473 PriorityQueue q = populatedQueue(SIZE);
474 String s = q.toString();
475 for (int i = 0; i < SIZE; ++i) {
476 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
477 }
478 }
479
480 /**
481 * A deserialized serialized queue has same elements
482 */
483 public void testSerialization() {
484 PriorityQueue q = populatedQueue(SIZE);
485 try {
486 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
487 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
488 out.writeObject(q);
489 out.close();
490
491 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
492 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
493 PriorityQueue r = (PriorityQueue)in.readObject();
494 assertEquals(q.size(), r.size());
495 while (!q.isEmpty())
496 assertEquals(q.remove(), r.remove());
497 } catch(Exception e){
498 unexpectedException();
499 }
500 }
501 }