ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/PriorityBlockingQueueTest.java
Revision: 1.1
Committed: Sun Aug 31 19:24:55 2003 UTC (20 years, 8 months ago) by dl
Branch: MAIN
Log Message:
First check-in of tests to be in tck

File Contents

# User Rev Content
1 dl 1.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    
12     public class PriorityBlockingQueueTest extends TestCase {
13    
14     private static final int N = 10;
15     private static final long SHORT_DELAY_MS = 100;
16     private static final long MEDIUM_DELAY_MS = 1000;
17     private static final long LONG_DELAY_MS = 10000;
18     private static final int NOCAP = Integer.MAX_VALUE;
19    
20     public static void main(String[] args) {
21     junit.textui.TestRunner.run (suite());
22     }
23    
24     public static Test suite() {
25     return new TestSuite(PriorityBlockingQueueTest.class);
26     }
27    
28     static class MyReverseComparator implements Comparator {
29     public int compare(Object x, Object y) {
30     int i = ((Integer)x).intValue();
31     int j = ((Integer)y).intValue();
32     if (i < j) return 1;
33     if (i > j) return -1;
34     return 0;
35     }
36     }
37    
38    
39     /**
40     * Create a queue of given size containing consecutive
41     * Integers 0 ... n.
42     */
43     private PriorityBlockingQueue fullQueue(int n) {
44     PriorityBlockingQueue q = new PriorityBlockingQueue(n);
45     assertTrue(q.isEmpty());
46     for(int i = n-1; i >= 0; i-=2)
47     assertTrue(q.offer(new Integer(i)));
48     for(int i = (n & 1); i < n; i+=2)
49     assertTrue(q.offer(new Integer(i)));
50     assertFalse(q.isEmpty());
51     assertEquals(NOCAP, q.remainingCapacity());
52     assertEquals(n, q.size());
53     return q;
54     }
55    
56     public void testConstructor1(){
57     assertEquals(NOCAP, new PriorityBlockingQueue(N).remainingCapacity());
58     }
59    
60     public void testConstructor2(){
61     try {
62     PriorityBlockingQueue q = new PriorityBlockingQueue(0);
63     fail("Cannot make zero-sized");
64     }
65     catch (IllegalArgumentException success) {}
66     }
67    
68     public void testConstructor3(){
69    
70     try {
71     PriorityBlockingQueue q = new PriorityBlockingQueue(null);
72     fail("Cannot make from null collection");
73     }
74     catch (NullPointerException success) {}
75     }
76    
77     public void testConstructor4(){
78     try {
79     Integer[] ints = new Integer[N];
80     PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
81     fail("Cannot make with null elements");
82     }
83     catch (NullPointerException success) {}
84     }
85    
86     public void testConstructor5(){
87     try {
88     Integer[] ints = new Integer[N];
89     for (int i = 0; i < N-1; ++i)
90     ints[i] = new Integer(i);
91     PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
92     fail("Cannot make with null elements");
93     }
94     catch (NullPointerException success) {}
95     }
96    
97     public void testConstructor6(){
98     try {
99     Integer[] ints = new Integer[N];
100     for (int i = 0; i < N; ++i)
101     ints[i] = new Integer(i);
102     PriorityBlockingQueue q = new PriorityBlockingQueue(Arrays.asList(ints));
103     for (int i = 0; i < N; ++i)
104     assertEquals(ints[i], q.poll());
105     }
106     finally {}
107     }
108    
109     public void testConstructor7(){
110     try {
111     PriorityBlockingQueue q = new PriorityBlockingQueue(N, new MyReverseComparator());
112     Integer[] ints = new Integer[N];
113     for (int i = 0; i < N; ++i)
114     ints[i] = new Integer(i);
115     q.addAll(Arrays.asList(ints));
116     for (int i = N-1; i >= 0; --i)
117     assertEquals(ints[i], q.poll());
118     }
119     finally {}
120     }
121    
122     public void testEmpty() {
123     PriorityBlockingQueue q = new PriorityBlockingQueue(2);
124     assertTrue(q.isEmpty());
125     assertEquals(NOCAP, q.remainingCapacity());
126     q.add(new Integer(1));
127     assertFalse(q.isEmpty());
128     q.add(new Integer(2));
129     q.remove();
130     q.remove();
131     assertTrue(q.isEmpty());
132     }
133    
134     public void testRemainingCapacity(){
135     PriorityBlockingQueue q = fullQueue(N);
136     for (int i = 0; i < N; ++i) {
137     assertEquals(NOCAP, q.remainingCapacity());
138     assertEquals(N-i, q.size());
139     q.remove();
140     }
141     for (int i = 0; i < N; ++i) {
142     assertEquals(NOCAP, q.remainingCapacity());
143     assertEquals(i, q.size());
144     q.add(new Integer(i));
145     }
146     }
147    
148     public void testOfferNull(){
149     try {
150     PriorityBlockingQueue q = new PriorityBlockingQueue(1);
151     q.offer(null);
152     fail("should throw NPE");
153     } catch (NullPointerException success) { }
154     }
155    
156     public void testOffer() {
157     PriorityBlockingQueue q = new PriorityBlockingQueue(1);
158     assertTrue(q.offer(new Integer(0)));
159     assertTrue(q.offer(new Integer(1)));
160     }
161    
162     public void testOfferNonComparable() {
163     try {
164     PriorityBlockingQueue q = new PriorityBlockingQueue(1);
165     q.offer(new Object());
166     q.offer(new Object());
167     q.offer(new Object());
168     fail("should throw CCE");
169     }
170     catch(ClassCastException success) {}
171     }
172    
173     public void testAdd(){
174     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
175     for (int i = 0; i < N; ++i) {
176     assertEquals(i, q.size());
177     assertTrue(q.add(new Integer(i)));
178     }
179     }
180    
181     public void testAddAll1(){
182     try {
183     PriorityBlockingQueue q = new PriorityBlockingQueue(1);
184     q.addAll(null);
185     fail("Cannot add null collection");
186     }
187     catch (NullPointerException success) {}
188     }
189     public void testAddAll2(){
190     try {
191     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
192     Integer[] ints = new Integer[N];
193     q.addAll(Arrays.asList(ints));
194     fail("Cannot add null elements");
195     }
196     catch (NullPointerException success) {}
197     }
198     public void testAddAll3(){
199     try {
200     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
201     Integer[] ints = new Integer[N];
202     for (int i = 0; i < N-1; ++i)
203     ints[i] = new Integer(i);
204     q.addAll(Arrays.asList(ints));
205     fail("Cannot add null elements");
206     }
207     catch (NullPointerException success) {}
208     }
209    
210     public void testAddAll5(){
211     try {
212     Integer[] empty = new Integer[0];
213     Integer[] ints = new Integer[N];
214     for (int i = N-1; i >= 0; --i)
215     ints[i] = new Integer(i);
216     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
217     assertFalse(q.addAll(Arrays.asList(empty)));
218     assertTrue(q.addAll(Arrays.asList(ints)));
219     for (int i = 0; i < N; ++i)
220     assertEquals(ints[i], q.poll());
221     }
222     finally {}
223     }
224    
225     public void testPutNull() {
226     try {
227     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
228     q.put(null);
229     fail("put should throw NPE");
230     }
231     catch (NullPointerException success){
232     }
233     }
234    
235     public void testPut() {
236     try {
237     PriorityBlockingQueue q = new PriorityBlockingQueue(N);
238     for (int i = 0; i < N; ++i) {
239     Integer I = new Integer(i);
240     q.put(I);
241     assertTrue(q.contains(I));
242     }
243     assertEquals(N, q.size());
244     }
245     finally {
246     }
247     }
248    
249     public void testPutWithTake() {
250     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
251     Thread t = new Thread(new Runnable() {
252     public void run(){
253     int added = 0;
254     try {
255     q.put(new Integer(0));
256     ++added;
257     q.put(new Integer(0));
258     ++added;
259     q.put(new Integer(0));
260     ++added;
261     q.put(new Integer(0));
262     ++added;
263     assertTrue(added == 4);
264     } finally {
265     }
266     }
267     });
268     try {
269     t.start();
270     Thread.sleep(SHORT_DELAY_MS);
271     q.take();
272     t.interrupt();
273     t.join();
274     } catch (Exception e){
275     fail("Unexpected exception");
276     }
277     }
278    
279     public void testTimedOffer() {
280     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
281     Thread t = new Thread(new Runnable() {
282     public void run(){
283     try {
284     q.put(new Integer(0));
285     q.put(new Integer(0));
286     assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS/2, TimeUnit.MILLISECONDS));
287     assertTrue(q.offer(new Integer(0), LONG_DELAY_MS, TimeUnit.MILLISECONDS));
288     } finally { }
289     }
290     });
291    
292     try {
293     t.start();
294     Thread.sleep(SHORT_DELAY_MS);
295     t.interrupt();
296     t.join();
297     } catch (Exception e){
298     fail("Unexpected exception");
299     }
300     }
301    
302     public void testTake(){
303     try {
304     PriorityBlockingQueue q = fullQueue(N);
305     for (int i = 0; i < N; ++i) {
306     assertEquals(i, ((Integer)q.take()).intValue());
307     }
308     } catch (InterruptedException e){
309     fail("Unexpected exception");
310     }
311     }
312    
313     public void testTakeFromEmpty() {
314     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
315     Thread t = new Thread(new Runnable() {
316     public void run(){
317     try {
318     q.take();
319     fail("Should block");
320     } catch (InterruptedException success){ }
321     }
322     });
323     try {
324     t.start();
325     Thread.sleep(SHORT_DELAY_MS);
326     t.interrupt();
327     t.join();
328     } catch (Exception e){
329     fail("Unexpected exception");
330     }
331     }
332    
333     public void testBlockingTake(){
334     Thread t = new Thread(new Runnable() {
335     public void run() {
336     try {
337     PriorityBlockingQueue q = fullQueue(N);
338     for (int i = 0; i < N; ++i) {
339     assertEquals(i, ((Integer)q.take()).intValue());
340     }
341     q.take();
342     fail("take should block");
343     } catch (InterruptedException success){
344     }
345     }});
346     t.start();
347     try {
348     Thread.sleep(SHORT_DELAY_MS);
349     t.interrupt();
350     t.join();
351     }
352     catch (InterruptedException ie) {
353     fail("Unexpected exception");
354     }
355     }
356    
357    
358     public void testPoll(){
359     PriorityBlockingQueue q = fullQueue(N);
360     for (int i = 0; i < N; ++i) {
361     assertEquals(i, ((Integer)q.poll()).intValue());
362     }
363     assertNull(q.poll());
364     }
365    
366     public void testTimedPoll0() {
367     try {
368     PriorityBlockingQueue q = fullQueue(N);
369     for (int i = 0; i < N; ++i) {
370     assertEquals(i, ((Integer)q.poll(0, TimeUnit.MILLISECONDS)).intValue());
371     }
372     assertNull(q.poll(0, TimeUnit.MILLISECONDS));
373     } catch (InterruptedException e){
374     fail("Unexpected exception");
375     }
376     }
377    
378     public void testTimedPoll() {
379     try {
380     PriorityBlockingQueue q = fullQueue(N);
381     for (int i = 0; i < N; ++i) {
382     assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
383     }
384     assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
385     } catch (InterruptedException e){
386     fail("Unexpected exception");
387     }
388     }
389    
390     public void testInterruptedTimedPoll(){
391     Thread t = new Thread(new Runnable() {
392     public void run() {
393     try {
394     PriorityBlockingQueue q = fullQueue(N);
395     for (int i = 0; i < N; ++i) {
396     assertEquals(i, ((Integer)q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS)).intValue());
397     }
398     assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
399     } catch (InterruptedException success){
400     }
401     }});
402     t.start();
403     try {
404     Thread.sleep(SHORT_DELAY_MS);
405     t.interrupt();
406     t.join();
407     }
408     catch (InterruptedException ie) {
409     fail("Unexpected exception");
410     }
411     }
412    
413     public void testTimedPollWithOffer(){
414     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
415     Thread t = new Thread(new Runnable() {
416     public void run(){
417     try {
418     assertNull(q.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
419     q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
420     q.poll(LONG_DELAY_MS, TimeUnit.MILLISECONDS);
421     fail("Should block");
422     } catch (InterruptedException success) { }
423     }
424     });
425     try {
426     t.start();
427     Thread.sleep(SHORT_DELAY_MS * 2);
428     assertTrue(q.offer(new Integer(0), SHORT_DELAY_MS, TimeUnit.MILLISECONDS));
429     t.interrupt();
430     t.join();
431     } catch (Exception e){
432     fail("Unexpected exception");
433     }
434     }
435    
436    
437     public void testPeek(){
438     PriorityBlockingQueue q = fullQueue(N);
439     for (int i = 0; i < N; ++i) {
440     assertEquals(i, ((Integer)q.peek()).intValue());
441     q.poll();
442     assertTrue(q.peek() == null ||
443     i != ((Integer)q.peek()).intValue());
444     }
445     assertNull(q.peek());
446     }
447    
448     public void testElement(){
449     PriorityBlockingQueue q = fullQueue(N);
450     for (int i = 0; i < N; ++i) {
451     assertEquals(i, ((Integer)q.element()).intValue());
452     q.poll();
453     }
454     try {
455     q.element();
456     fail("no such element");
457     }
458     catch (NoSuchElementException success) {}
459     }
460    
461     public void testRemove(){
462     PriorityBlockingQueue q = fullQueue(N);
463     for (int i = 0; i < N; ++i) {
464     assertEquals(i, ((Integer)q.remove()).intValue());
465     }
466     try {
467     q.remove();
468     fail("remove should throw");
469     } catch (NoSuchElementException success){
470     }
471     }
472    
473     public void testRemoveElement(){
474     PriorityBlockingQueue q = fullQueue(N);
475     for (int i = 1; i < N; i+=2) {
476     assertTrue(q.remove(new Integer(i)));
477     }
478     for (int i = 0; i < N; i+=2) {
479     assertTrue(q.remove(new Integer(i)));
480     assertFalse(q.remove(new Integer(i+1)));
481     }
482     assert(q.isEmpty());
483     }
484    
485     public void testContains(){
486     PriorityBlockingQueue q = fullQueue(N);
487     for (int i = 0; i < N; ++i) {
488     assertTrue(q.contains(new Integer(i)));
489     q.poll();
490     assertFalse(q.contains(new Integer(i)));
491     }
492     }
493    
494     public void testClear(){
495     PriorityBlockingQueue q = fullQueue(N);
496     q.clear();
497     assertTrue(q.isEmpty());
498     assertEquals(0, q.size());
499     assertEquals(NOCAP, q.remainingCapacity());
500     q.add(new Integer(1));
501     assertFalse(q.isEmpty());
502     q.clear();
503     assertTrue(q.isEmpty());
504     }
505    
506     public void testContainsAll(){
507     PriorityBlockingQueue q = fullQueue(N);
508     PriorityBlockingQueue p = new PriorityBlockingQueue(N);
509     for (int i = 0; i < N; ++i) {
510     assertTrue(q.containsAll(p));
511     assertFalse(p.containsAll(q));
512     p.add(new Integer(i));
513     }
514     assertTrue(p.containsAll(q));
515     }
516    
517     public void testRetainAll(){
518     PriorityBlockingQueue q = fullQueue(N);
519     PriorityBlockingQueue p = fullQueue(N);
520     for (int i = 0; i < N; ++i) {
521     boolean changed = q.retainAll(p);
522     if (i == 0)
523     assertFalse(changed);
524     else
525     assertTrue(changed);
526    
527     assertTrue(q.containsAll(p));
528     assertEquals(N-i, q.size());
529     p.remove();
530     }
531     }
532    
533     public void testRemoveAll(){
534     for (int i = 1; i < N; ++i) {
535     PriorityBlockingQueue q = fullQueue(N);
536     PriorityBlockingQueue p = fullQueue(i);
537     assertTrue(q.removeAll(p));
538     assertEquals(N-i, q.size());
539     for (int j = 0; j < i; ++j) {
540     Integer I = (Integer)(p.remove());
541     assertFalse(q.contains(I));
542     }
543     }
544     }
545    
546     public void testToArray(){
547     PriorityBlockingQueue q = fullQueue(N);
548     Object[] o = q.toArray();
549     Arrays.sort(o);
550     try {
551     for(int i = 0; i < o.length; i++)
552     assertEquals(o[i], q.take());
553     } catch (InterruptedException e){
554     fail("Unexpected exception");
555     }
556     }
557    
558     public void testToArray2(){
559     PriorityBlockingQueue q = fullQueue(N);
560     Integer[] ints = new Integer[N];
561     ints = (Integer[])q.toArray(ints);
562     Arrays.sort(ints);
563     try {
564     for(int i = 0; i < ints.length; i++)
565     assertEquals(ints[i], q.take());
566     } catch (InterruptedException e){
567     fail("Unexpected exception");
568     }
569     }
570    
571     public void testIterator(){
572     PriorityBlockingQueue q = fullQueue(N);
573     int i = 0;
574     Iterator it = q.iterator();
575     while(it.hasNext()) {
576     assertTrue(q.contains(it.next()));
577     ++i;
578     }
579     assertEquals(i, N);
580     }
581    
582     public void testIteratorRemove () {
583    
584     final PriorityBlockingQueue q = new PriorityBlockingQueue(3);
585    
586     q.add(new Integer(2));
587     q.add(new Integer(1));
588     q.add(new Integer(3));
589    
590     Iterator it = q.iterator();
591     it.next();
592     it.remove();
593    
594     it = q.iterator();
595     assertEquals(it.next(), new Integer(2));
596     assertEquals(it.next(), new Integer(3));
597     assertFalse(it.hasNext());
598     }
599    
600    
601     public void testToString(){
602     PriorityBlockingQueue q = fullQueue(N);
603     String s = q.toString();
604     for (int i = 0; i < N; ++i) {
605     assertTrue(s.indexOf(String.valueOf(i)) >= 0);
606     }
607     }
608    
609     public void testPollInExecutor() {
610    
611     final PriorityBlockingQueue q = new PriorityBlockingQueue(2);
612    
613     ExecutorService executor = Executors.newFixedThreadPool(2);
614    
615     executor.execute(new Runnable() {
616     public void run() {
617     assertNull("poll should fail", q.poll());
618     try {
619     assertTrue(null != q.poll(MEDIUM_DELAY_MS * 2, TimeUnit.MILLISECONDS));
620     assertTrue(q.isEmpty());
621     }
622     catch (InterruptedException e) {
623     fail("should not be interrupted");
624     }
625     }
626     });
627    
628     executor.execute(new Runnable() {
629     public void run() {
630     try {
631     Thread.sleep(MEDIUM_DELAY_MS);
632     q.put(new Integer(1));
633     }
634     catch (InterruptedException e) {
635     fail("should not be interrupted");
636     }
637     }
638     });
639    
640     executor.shutdown();
641    
642     }
643    
644     }