ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ArrayDequeTest.java
Revision: 1.17
Committed: Wed Nov 3 07:54:52 2010 UTC (13 years, 6 months ago) by jsr166
Branch: MAIN
Changes since 1.16: +2 -2 lines
Log Message:
fix javadoc of testToArray1_BadArg

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/licenses/publicdomain
5 */
6
7 import junit.framework.*;
8 import java.io.BufferedInputStream;
9 import java.io.BufferedOutputStream;
10 import java.io.ByteArrayInputStream;
11 import java.io.ByteArrayOutputStream;
12 import java.io.ObjectInputStream;
13 import java.io.ObjectOutputStream;
14 import java.util.*;
15
16 public class ArrayDequeTest extends JSR166TestCase {
17 public static void main(String[] args) {
18 junit.textui.TestRunner.run(suite());
19 }
20
21 public static Test suite() {
22 return new TestSuite(ArrayDequeTest.class);
23 }
24
25 /**
26 * Create a deque of given size containing consecutive
27 * Integers 0 ... n.
28 */
29 private ArrayDeque populatedDeque(int n) {
30 ArrayDeque q = new ArrayDeque();
31 assertTrue(q.isEmpty());
32 for (int i = 0; i < n; ++i)
33 assertTrue(q.offerLast(new Integer(i)));
34 assertFalse(q.isEmpty());
35 assertEquals(n, q.size());
36 return q;
37 }
38
39 /**
40 * new deque is empty
41 */
42 public void testConstructor1() {
43 assertEquals(0, new ArrayDeque().size());
44 }
45
46 /**
47 * Initializing from null Collection throws NPE
48 */
49 public void testConstructor3() {
50 try {
51 ArrayDeque q = new ArrayDeque((Collection)null);
52 shouldThrow();
53 } catch (NullPointerException success) {}
54 }
55
56 /**
57 * Initializing from Collection of null elements throws NPE
58 */
59 public void testConstructor4() {
60 try {
61 Integer[] ints = new Integer[SIZE];
62 ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
63 shouldThrow();
64 } catch (NullPointerException success) {}
65 }
66
67 /**
68 * Initializing from Collection with some null elements throws NPE
69 */
70 public void testConstructor5() {
71 try {
72 Integer[] ints = new Integer[SIZE];
73 for (int i = 0; i < SIZE-1; ++i)
74 ints[i] = new Integer(i);
75 ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
76 shouldThrow();
77 } catch (NullPointerException success) {}
78 }
79
80 /**
81 * Deque contains all elements of collection used to initialize
82 */
83 public void testConstructor6() {
84 Integer[] ints = new Integer[SIZE];
85 for (int i = 0; i < SIZE; ++i)
86 ints[i] = new Integer(i);
87 ArrayDeque q = new ArrayDeque(Arrays.asList(ints));
88 for (int i = 0; i < SIZE; ++i)
89 assertEquals(ints[i], q.pollFirst());
90 }
91
92 /**
93 * isEmpty is true before add, false after
94 */
95 public void testEmpty() {
96 ArrayDeque q = new ArrayDeque();
97 assertTrue(q.isEmpty());
98 q.add(new Integer(1));
99 assertFalse(q.isEmpty());
100 q.add(new Integer(2));
101 q.removeFirst();
102 q.removeFirst();
103 assertTrue(q.isEmpty());
104 }
105
106 /**
107 * size changes when elements added and removed
108 */
109 public void testSize() {
110 ArrayDeque q = populatedDeque(SIZE);
111 for (int i = 0; i < SIZE; ++i) {
112 assertEquals(SIZE-i, q.size());
113 q.removeFirst();
114 }
115 for (int i = 0; i < SIZE; ++i) {
116 assertEquals(i, q.size());
117 q.add(new Integer(i));
118 }
119 }
120
121 /**
122 * push(null) throws NPE
123 */
124 public void testPushNull() {
125 try {
126 ArrayDeque q = new ArrayDeque(1);
127 q.push(null);
128 shouldThrow();
129 } catch (NullPointerException success) {}
130 }
131
132 /**
133 * peekFirst() returns element inserted with push
134 */
135 public void testPush() {
136 ArrayDeque q = populatedDeque(3);
137 q.pollLast();
138 q.push(four);
139 assertSame(four, q.peekFirst());
140 }
141
142 /**
143 * pop() removes next element, or throws NSEE if empty
144 */
145 public void testPop() {
146 ArrayDeque q = populatedDeque(SIZE);
147 for (int i = 0; i < SIZE; ++i) {
148 assertEquals(i, q.pop());
149 }
150 try {
151 q.pop();
152 shouldThrow();
153 } catch (NoSuchElementException success) {}
154 }
155
156 /**
157 * offer(null) throws NPE
158 */
159 public void testOfferNull() {
160 try {
161 ArrayDeque q = new ArrayDeque();
162 q.offer(null);
163 shouldThrow();
164 } catch (NullPointerException success) {}
165 }
166
167 /**
168 * offerFirst(null) throws NPE
169 */
170 public void testOfferFirstNull() {
171 try {
172 ArrayDeque q = new ArrayDeque();
173 q.offerFirst(null);
174 shouldThrow();
175 } catch (NullPointerException success) {}
176 }
177
178 /**
179 * offerLast(null) throws NPE
180 */
181 public void testOfferLastNull() {
182 try {
183 ArrayDeque q = new ArrayDeque();
184 q.offerLast(null);
185 shouldThrow();
186 } catch (NullPointerException success) {}
187 }
188
189 /**
190 * offer(x) succeeds
191 */
192 public void testOffer() {
193 ArrayDeque q = new ArrayDeque();
194 assertTrue(q.offer(zero));
195 assertTrue(q.offer(one));
196 assertSame(zero, q.peekFirst());
197 assertSame(one, q.peekLast());
198 }
199
200 /**
201 * offerFirst(x) succeeds
202 */
203 public void testOfferFirst() {
204 ArrayDeque q = new ArrayDeque();
205 assertTrue(q.offerFirst(zero));
206 assertTrue(q.offerFirst(one));
207 assertSame(one, q.peekFirst());
208 assertSame(zero, q.peekLast());
209 }
210
211 /**
212 * offerLast(x) succeeds
213 */
214 public void testOfferLast() {
215 ArrayDeque q = new ArrayDeque();
216 assertTrue(q.offerLast(zero));
217 assertTrue(q.offerLast(one));
218 assertSame(zero, q.peekFirst());
219 assertSame(one, q.peekLast());
220 }
221
222 /**
223 * add(null) throws NPE
224 */
225 public void testAddNull() {
226 try {
227 ArrayDeque q = new ArrayDeque();
228 q.add(null);
229 shouldThrow();
230 } catch (NullPointerException success) {}
231 }
232
233 /**
234 * addFirst(null) throws NPE
235 */
236 public void testAddFirstNull() {
237 try {
238 ArrayDeque q = new ArrayDeque();
239 q.addFirst(null);
240 shouldThrow();
241 } catch (NullPointerException success) {}
242 }
243
244 /**
245 * addLast(null) throws NPE
246 */
247 public void testAddLastNull() {
248 try {
249 ArrayDeque q = new ArrayDeque();
250 q.addLast(null);
251 shouldThrow();
252 } catch (NullPointerException success) {}
253 }
254
255 /**
256 * add(x) succeeds
257 */
258 public void testAdd() {
259 ArrayDeque q = new ArrayDeque();
260 assertTrue(q.add(zero));
261 assertTrue(q.add(one));
262 assertSame(zero, q.peekFirst());
263 assertSame(one, q.peekLast());
264 }
265
266 /**
267 * addFirst(x) succeeds
268 */
269 public void testAddFirst() {
270 ArrayDeque q = new ArrayDeque();
271 q.addFirst(zero);
272 q.addFirst(one);
273 assertSame(one, q.peekFirst());
274 assertSame(zero, q.peekLast());
275 }
276
277 /**
278 * addLast(x) succeeds
279 */
280 public void testAddLast() {
281 ArrayDeque q = new ArrayDeque();
282 q.addLast(zero);
283 q.addLast(one);
284 assertSame(zero, q.peekFirst());
285 assertSame(one, q.peekLast());
286 }
287
288 /**
289 * addAll(null) throws NPE
290 */
291 public void testAddAll1() {
292 try {
293 ArrayDeque q = new ArrayDeque();
294 q.addAll(null);
295 shouldThrow();
296 } catch (NullPointerException success) {}
297 }
298
299 /**
300 * addAll of a collection with null elements throws NPE
301 */
302 public void testAddAll2() {
303 try {
304 ArrayDeque q = new ArrayDeque();
305 Integer[] ints = new Integer[SIZE];
306 q.addAll(Arrays.asList(ints));
307 shouldThrow();
308 } catch (NullPointerException success) {}
309 }
310
311 /**
312 * addAll of a collection with any null elements throws NPE after
313 * possibly adding some elements
314 */
315 public void testAddAll3() {
316 try {
317 ArrayDeque q = new ArrayDeque();
318 Integer[] ints = new Integer[SIZE];
319 for (int i = 0; i < SIZE-1; ++i)
320 ints[i] = new Integer(i);
321 q.addAll(Arrays.asList(ints));
322 shouldThrow();
323 } catch (NullPointerException success) {}
324 }
325
326 /**
327 * Deque contains all elements, in traversal order, of successful addAll
328 */
329 public void testAddAll5() {
330 Integer[] empty = new Integer[0];
331 Integer[] ints = new Integer[SIZE];
332 for (int i = 0; i < SIZE; ++i)
333 ints[i] = new Integer(i);
334 ArrayDeque q = new ArrayDeque();
335 assertFalse(q.addAll(Arrays.asList(empty)));
336 assertTrue(q.addAll(Arrays.asList(ints)));
337 for (int i = 0; i < SIZE; ++i)
338 assertEquals(ints[i], q.pollFirst());
339 }
340
341 /**
342 * pollFirst() succeeds unless empty
343 */
344 public void testPollFirst() {
345 ArrayDeque q = populatedDeque(SIZE);
346 for (int i = 0; i < SIZE; ++i) {
347 assertEquals(i, q.pollFirst());
348 }
349 assertNull(q.pollFirst());
350 }
351
352 /**
353 * pollLast() succeeds unless empty
354 */
355 public void testPollLast() {
356 ArrayDeque q = populatedDeque(SIZE);
357 for (int i = SIZE-1; i >= 0; --i) {
358 assertEquals(i, q.pollLast());
359 }
360 assertNull(q.pollLast());
361 }
362
363 /**
364 * poll() succeeds unless empty
365 */
366 public void testPoll() {
367 ArrayDeque q = populatedDeque(SIZE);
368 for (int i = 0; i < SIZE; ++i) {
369 assertEquals(i, q.poll());
370 }
371 assertNull(q.poll());
372 }
373
374 /**
375 * remove() removes next element, or throws NSEE if empty
376 */
377 public void testRemove() {
378 ArrayDeque q = populatedDeque(SIZE);
379 for (int i = 0; i < SIZE; ++i) {
380 assertEquals(i, q.remove());
381 }
382 try {
383 q.remove();
384 shouldThrow();
385 } catch (NoSuchElementException success) {}
386 }
387
388 /**
389 * remove(x) removes x and returns true if present
390 */
391 public void testRemoveElement() {
392 ArrayDeque q = populatedDeque(SIZE);
393 for (int i = 1; i < SIZE; i+=2) {
394 assertTrue(q.remove(new Integer(i)));
395 }
396 for (int i = 0; i < SIZE; i+=2) {
397 assertTrue(q.remove(new Integer(i)));
398 assertFalse(q.remove(new Integer(i+1)));
399 }
400 assertTrue(q.isEmpty());
401 }
402
403 /**
404 * peekFirst() returns next element, or null if empty
405 */
406 public void testPeekFirst() {
407 ArrayDeque q = populatedDeque(SIZE);
408 for (int i = 0; i < SIZE; ++i) {
409 assertEquals(i, q.peekFirst());
410 assertEquals(i, q.pollFirst());
411 assertTrue(q.peekFirst() == null ||
412 !q.peekFirst().equals(i));
413 }
414 assertNull(q.peekFirst());
415 }
416
417 /**
418 * peek() returns next element, or null if empty
419 */
420 public void testPeek() {
421 ArrayDeque q = populatedDeque(SIZE);
422 for (int i = 0; i < SIZE; ++i) {
423 assertEquals(i, q.peek());
424 assertEquals(i, q.poll());
425 assertTrue(q.peek() == null ||
426 !q.peek().equals(i));
427 }
428 assertNull(q.peek());
429 }
430
431 /**
432 * peekLast() returns next element, or null if empty
433 */
434 public void testPeekLast() {
435 ArrayDeque q = populatedDeque(SIZE);
436 for (int i = SIZE-1; i >= 0; --i) {
437 assertEquals(i, q.peekLast());
438 assertEquals(i, q.pollLast());
439 assertTrue(q.peekLast() == null ||
440 !q.peekLast().equals(i));
441 }
442 assertNull(q.peekLast());
443 }
444
445 /**
446 * element() returns first element, or throws NSEE if empty
447 */
448 public void testElement() {
449 ArrayDeque q = populatedDeque(SIZE);
450 for (int i = 0; i < SIZE; ++i) {
451 assertEquals(i, q.element());
452 assertEquals(i, q.poll());
453 }
454 try {
455 q.element();
456 shouldThrow();
457 } catch (NoSuchElementException success) {}
458 }
459
460 /**
461 * getFirst() returns first element, or throws NSEE if empty
462 */
463 public void testFirstElement() {
464 ArrayDeque q = populatedDeque(SIZE);
465 for (int i = 0; i < SIZE; ++i) {
466 assertEquals(i, q.getFirst());
467 assertEquals(i, q.pollFirst());
468 }
469 try {
470 q.getFirst();
471 shouldThrow();
472 } catch (NoSuchElementException success) {}
473 }
474
475 /**
476 * getLast() returns last element, or throws NSEE if empty
477 */
478 public void testLastElement() {
479 ArrayDeque q = populatedDeque(SIZE);
480 for (int i = SIZE-1; i >= 0; --i) {
481 assertEquals(i, q.getLast());
482 assertEquals(i, q.pollLast());
483 }
484 try {
485 q.getLast();
486 shouldThrow();
487 } catch (NoSuchElementException success) {}
488 assertNull(q.peekLast());
489 }
490
491
492 /**
493 * removeFirst() removes first element, or throws NSEE if empty
494 */
495 public void testRemoveFirst() {
496 ArrayDeque q = populatedDeque(SIZE);
497 for (int i = 0; i < SIZE; ++i) {
498 assertEquals(i, q.removeFirst());
499 }
500 try {
501 q.removeFirst();
502 shouldThrow();
503 } catch (NoSuchElementException success) {}
504 assertNull(q.peekFirst());
505 }
506
507 /**
508 * removeLast() removes last element, or throws NSEE if empty
509 */
510 public void testRemoveLast() {
511 ArrayDeque q = populatedDeque(SIZE);
512 for (int i = SIZE - 1; i >= 0; --i) {
513 assertEquals(i, q.removeLast());
514 }
515 try {
516 q.removeLast();
517 shouldThrow();
518 } catch (NoSuchElementException success) {}
519 assertNull(q.peekLast());
520 }
521
522 /**
523 * removeFirstOccurrence(x) removes x and returns true if present
524 */
525 public void testRemoveFirstOccurrence() {
526 ArrayDeque q = populatedDeque(SIZE);
527 for (int i = 1; i < SIZE; i+=2) {
528 assertTrue(q.removeFirstOccurrence(new Integer(i)));
529 }
530 for (int i = 0; i < SIZE; i+=2) {
531 assertTrue(q.removeFirstOccurrence(new Integer(i)));
532 assertFalse(q.removeFirstOccurrence(new Integer(i+1)));
533 }
534 assertTrue(q.isEmpty());
535 }
536
537 /**
538 * removeLastOccurrence(x) removes x and returns true if present
539 */
540 public void testRemoveLastOccurrence() {
541 ArrayDeque q = populatedDeque(SIZE);
542 for (int i = 1; i < SIZE; i+=2) {
543 assertTrue(q.removeLastOccurrence(new Integer(i)));
544 }
545 for (int i = 0; i < SIZE; i+=2) {
546 assertTrue(q.removeLastOccurrence(new Integer(i)));
547 assertFalse(q.removeLastOccurrence(new Integer(i+1)));
548 }
549 assertTrue(q.isEmpty());
550 }
551
552 /**
553 * contains(x) reports true when elements added but not yet removed
554 */
555 public void testContains() {
556 ArrayDeque q = populatedDeque(SIZE);
557 for (int i = 0; i < SIZE; ++i) {
558 assertTrue(q.contains(new Integer(i)));
559 assertEquals(i, q.pollFirst());
560 assertFalse(q.contains(new Integer(i)));
561 }
562 }
563
564 /**
565 * clear removes all elements
566 */
567 public void testClear() {
568 ArrayDeque q = populatedDeque(SIZE);
569 q.clear();
570 assertTrue(q.isEmpty());
571 assertEquals(0, q.size());
572 assertTrue(q.add(new Integer(1)));
573 assertFalse(q.isEmpty());
574 q.clear();
575 assertTrue(q.isEmpty());
576 }
577
578 /**
579 * containsAll(c) is true when c contains a subset of elements
580 */
581 public void testContainsAll() {
582 ArrayDeque q = populatedDeque(SIZE);
583 ArrayDeque p = new ArrayDeque();
584 for (int i = 0; i < SIZE; ++i) {
585 assertTrue(q.containsAll(p));
586 assertFalse(p.containsAll(q));
587 assertTrue(p.add(new Integer(i)));
588 }
589 assertTrue(p.containsAll(q));
590 }
591
592 /**
593 * retainAll(c) retains only those elements of c and reports true if changed
594 */
595 public void testRetainAll() {
596 ArrayDeque q = populatedDeque(SIZE);
597 ArrayDeque p = populatedDeque(SIZE);
598 for (int i = 0; i < SIZE; ++i) {
599 boolean changed = q.retainAll(p);
600 assertEquals(changed, (i > 0));
601 assertTrue(q.containsAll(p));
602 assertEquals(SIZE-i, q.size());
603 p.removeFirst();
604 }
605 }
606
607 /**
608 * removeAll(c) removes only those elements of c and reports true if changed
609 */
610 public void testRemoveAll() {
611 for (int i = 1; i < SIZE; ++i) {
612 ArrayDeque q = populatedDeque(SIZE);
613 ArrayDeque p = populatedDeque(i);
614 assertTrue(q.removeAll(p));
615 assertEquals(SIZE-i, q.size());
616 for (int j = 0; j < i; ++j) {
617 assertFalse(q.contains(p.removeFirst()));
618 }
619 }
620 }
621
622 /**
623 * toArray() contains all elements
624 */
625 public void testToArray() {
626 ArrayDeque q = populatedDeque(SIZE);
627 Object[] o = q.toArray();
628 Arrays.sort(o);
629 for (int i = 0; i < o.length; i++)
630 assertEquals(o[i], q.pollFirst());
631 }
632
633 /**
634 * toArray(a) contains all elements
635 */
636 public void testToArray2() {
637 ArrayDeque q = populatedDeque(SIZE);
638 Integer[] ints = new Integer[SIZE];
639 ints = (Integer[])q.toArray(ints);
640 Arrays.sort(ints);
641 for (int i = 0; i < ints.length; i++)
642 assertEquals(ints[i], q.pollFirst());
643 }
644
645 /**
646 * toArray(null) throws NPE
647 */
648 public void testToArray_BadArg() {
649 ArrayDeque l = new ArrayDeque();
650 l.add(new Object());
651 try {
652 Object o[] = l.toArray(null);
653 shouldThrow();
654 } catch (NullPointerException success) {}
655 }
656
657 /**
658 * toArray(incompatible array type) throws ArrayStoreException
659 */
660 public void testToArray1_BadArg() {
661 ArrayDeque l = new ArrayDeque();
662 l.add(new Integer(5));
663 try {
664 l.toArray(new String[10]);
665 shouldThrow();
666 } catch (ArrayStoreException success) {}
667 }
668
669 /**
670 * Iterator iterates through all elements
671 */
672 public void testIterator() {
673 ArrayDeque q = populatedDeque(SIZE);
674 int i = 0;
675 Iterator it = q.iterator();
676 while (it.hasNext()) {
677 assertTrue(q.contains(it.next()));
678 ++i;
679 }
680 assertEquals(i, SIZE);
681 }
682
683 /**
684 * Iterator ordering is FIFO
685 */
686 public void testIteratorOrdering() {
687 final ArrayDeque q = new ArrayDeque();
688 q.add(one);
689 q.add(two);
690 q.add(three);
691 int k = 0;
692 for (Iterator it = q.iterator(); it.hasNext();) {
693 assertEquals(++k, it.next());
694 }
695
696 assertEquals(3, k);
697 }
698
699 /**
700 * iterator.remove() removes current element
701 */
702 public void testIteratorRemove() {
703 final ArrayDeque q = new ArrayDeque();
704 final Random rng = new Random();
705 for (int iters = 0; iters < 100; ++iters) {
706 int max = rng.nextInt(5) + 2;
707 int split = rng.nextInt(max-1) + 1;
708 for (int j = 1; j <= max; ++j)
709 q.add(new Integer(j));
710 Iterator it = q.iterator();
711 for (int j = 1; j <= split; ++j)
712 assertEquals(it.next(), new Integer(j));
713 it.remove();
714 assertEquals(it.next(), new Integer(split+1));
715 for (int j = 1; j <= split; ++j)
716 q.remove(new Integer(j));
717 it = q.iterator();
718 for (int j = split+1; j <= max; ++j) {
719 assertEquals(it.next(), new Integer(j));
720 it.remove();
721 }
722 assertFalse(it.hasNext());
723 assertTrue(q.isEmpty());
724 }
725 }
726
727 /**
728 * Descending iterator iterates through all elements
729 */
730 public void testDescendingIterator() {
731 ArrayDeque q = populatedDeque(SIZE);
732 int i = 0;
733 Iterator it = q.descendingIterator();
734 while (it.hasNext()) {
735 assertTrue(q.contains(it.next()));
736 ++i;
737 }
738 assertEquals(i, SIZE);
739 assertFalse(it.hasNext());
740 try {
741 it.next();
742 shouldThrow();
743 } catch (NoSuchElementException success) {}
744 }
745
746 /**
747 * Descending iterator ordering is reverse FIFO
748 */
749 public void testDescendingIteratorOrdering() {
750 final ArrayDeque q = new ArrayDeque();
751 for (int iters = 0; iters < 100; ++iters) {
752 q.add(new Integer(3));
753 q.add(new Integer(2));
754 q.add(new Integer(1));
755 int k = 0;
756 for (Iterator it = q.descendingIterator(); it.hasNext();) {
757 assertEquals(++k, it.next());
758 }
759
760 assertEquals(3, k);
761 q.remove();
762 q.remove();
763 q.remove();
764 }
765 }
766
767 /**
768 * descendingIterator.remove() removes current element
769 */
770 public void testDescendingIteratorRemove() {
771 final ArrayDeque q = new ArrayDeque();
772 final Random rng = new Random();
773 for (int iters = 0; iters < 100; ++iters) {
774 int max = rng.nextInt(5) + 2;
775 int split = rng.nextInt(max-1) + 1;
776 for (int j = max; j >= 1; --j)
777 q.add(new Integer(j));
778 Iterator it = q.descendingIterator();
779 for (int j = 1; j <= split; ++j)
780 assertEquals(it.next(), new Integer(j));
781 it.remove();
782 assertEquals(it.next(), new Integer(split+1));
783 for (int j = 1; j <= split; ++j)
784 q.remove(new Integer(j));
785 it = q.descendingIterator();
786 for (int j = split+1; j <= max; ++j) {
787 assertEquals(it.next(), new Integer(j));
788 it.remove();
789 }
790 assertFalse(it.hasNext());
791 assertTrue(q.isEmpty());
792 }
793 }
794
795
796 /**
797 * toString() contains toStrings of elements
798 */
799 public void testToString() {
800 ArrayDeque q = populatedDeque(SIZE);
801 String s = q.toString();
802 for (int i = 0; i < SIZE; ++i) {
803 assertTrue(s.indexOf(String.valueOf(i)) >= 0);
804 }
805 }
806
807 /**
808 * A deserialized serialized deque has same elements in same order
809 */
810 public void testSerialization() throws Exception {
811 ArrayDeque q = populatedDeque(SIZE);
812 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
813 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
814 out.writeObject(q);
815 out.close();
816
817 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
818 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
819 ArrayDeque r = (ArrayDeque)in.readObject();
820 assertEquals(q.size(), r.size());
821 while (!q.isEmpty())
822 assertEquals(q.remove(), r.remove());
823 }
824
825 }