ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ArrayDequeTest.java
Revision: 1.23
Committed: Fri May 27 19:26:42 2011 UTC (12 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.22: +1 -3 lines
Log Message:
indexOf => contains

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 */
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<Integer> populatedDeque(int n) {
30 ArrayDeque<Integer> q = new ArrayDeque<Integer>();
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.contains(i));
395 assertTrue(q.remove(i));
396 assertFalse(q.contains(i));
397 assertTrue(q.contains(i-1));
398 }
399 for (int i = 0; i < SIZE; i+=2) {
400 assertTrue(q.contains(i));
401 assertTrue(q.remove(i));
402 assertFalse(q.contains(i));
403 assertFalse(q.remove(i+1));
404 assertFalse(q.contains(i+1));
405 }
406 assertTrue(q.isEmpty());
407 }
408
409 /**
410 * peekFirst() returns next element, or null if empty
411 */
412 public void testPeekFirst() {
413 ArrayDeque q = populatedDeque(SIZE);
414 for (int i = 0; i < SIZE; ++i) {
415 assertEquals(i, q.peekFirst());
416 assertEquals(i, q.pollFirst());
417 assertTrue(q.peekFirst() == null ||
418 !q.peekFirst().equals(i));
419 }
420 assertNull(q.peekFirst());
421 }
422
423 /**
424 * peek() returns next element, or null if empty
425 */
426 public void testPeek() {
427 ArrayDeque q = populatedDeque(SIZE);
428 for (int i = 0; i < SIZE; ++i) {
429 assertEquals(i, q.peek());
430 assertEquals(i, q.poll());
431 assertTrue(q.peek() == null ||
432 !q.peek().equals(i));
433 }
434 assertNull(q.peek());
435 }
436
437 /**
438 * peekLast() returns next element, or null if empty
439 */
440 public void testPeekLast() {
441 ArrayDeque q = populatedDeque(SIZE);
442 for (int i = SIZE-1; i >= 0; --i) {
443 assertEquals(i, q.peekLast());
444 assertEquals(i, q.pollLast());
445 assertTrue(q.peekLast() == null ||
446 !q.peekLast().equals(i));
447 }
448 assertNull(q.peekLast());
449 }
450
451 /**
452 * element() returns first element, or throws NSEE if empty
453 */
454 public void testElement() {
455 ArrayDeque q = populatedDeque(SIZE);
456 for (int i = 0; i < SIZE; ++i) {
457 assertEquals(i, q.element());
458 assertEquals(i, q.poll());
459 }
460 try {
461 q.element();
462 shouldThrow();
463 } catch (NoSuchElementException success) {}
464 }
465
466 /**
467 * getFirst() returns first element, or throws NSEE if empty
468 */
469 public void testFirstElement() {
470 ArrayDeque q = populatedDeque(SIZE);
471 for (int i = 0; i < SIZE; ++i) {
472 assertEquals(i, q.getFirst());
473 assertEquals(i, q.pollFirst());
474 }
475 try {
476 q.getFirst();
477 shouldThrow();
478 } catch (NoSuchElementException success) {}
479 }
480
481 /**
482 * getLast() returns last element, or throws NSEE if empty
483 */
484 public void testLastElement() {
485 ArrayDeque q = populatedDeque(SIZE);
486 for (int i = SIZE-1; i >= 0; --i) {
487 assertEquals(i, q.getLast());
488 assertEquals(i, q.pollLast());
489 }
490 try {
491 q.getLast();
492 shouldThrow();
493 } catch (NoSuchElementException success) {}
494 assertNull(q.peekLast());
495 }
496
497 /**
498 * removeFirst() removes first element, or throws NSEE if empty
499 */
500 public void testRemoveFirst() {
501 ArrayDeque q = populatedDeque(SIZE);
502 for (int i = 0; i < SIZE; ++i) {
503 assertEquals(i, q.removeFirst());
504 }
505 try {
506 q.removeFirst();
507 shouldThrow();
508 } catch (NoSuchElementException success) {}
509 assertNull(q.peekFirst());
510 }
511
512 /**
513 * removeLast() removes last element, or throws NSEE if empty
514 */
515 public void testRemoveLast() {
516 ArrayDeque q = populatedDeque(SIZE);
517 for (int i = SIZE - 1; i >= 0; --i) {
518 assertEquals(i, q.removeLast());
519 }
520 try {
521 q.removeLast();
522 shouldThrow();
523 } catch (NoSuchElementException success) {}
524 assertNull(q.peekLast());
525 }
526
527 /**
528 * removeFirstOccurrence(x) removes x and returns true if present
529 */
530 public void testRemoveFirstOccurrence() {
531 ArrayDeque q = populatedDeque(SIZE);
532 for (int i = 1; i < SIZE; i+=2) {
533 assertTrue(q.removeFirstOccurrence(new Integer(i)));
534 }
535 for (int i = 0; i < SIZE; i+=2) {
536 assertTrue(q.removeFirstOccurrence(new Integer(i)));
537 assertFalse(q.removeFirstOccurrence(new Integer(i+1)));
538 }
539 assertTrue(q.isEmpty());
540 }
541
542 /**
543 * removeLastOccurrence(x) removes x and returns true if present
544 */
545 public void testRemoveLastOccurrence() {
546 ArrayDeque q = populatedDeque(SIZE);
547 for (int i = 1; i < SIZE; i+=2) {
548 assertTrue(q.removeLastOccurrence(new Integer(i)));
549 }
550 for (int i = 0; i < SIZE; i+=2) {
551 assertTrue(q.removeLastOccurrence(new Integer(i)));
552 assertFalse(q.removeLastOccurrence(new Integer(i+1)));
553 }
554 assertTrue(q.isEmpty());
555 }
556
557 /**
558 * contains(x) reports true when elements added but not yet removed
559 */
560 public void testContains() {
561 ArrayDeque q = populatedDeque(SIZE);
562 for (int i = 0; i < SIZE; ++i) {
563 assertTrue(q.contains(new Integer(i)));
564 assertEquals(i, q.pollFirst());
565 assertFalse(q.contains(new Integer(i)));
566 }
567 }
568
569 /**
570 * clear removes all elements
571 */
572 public void testClear() {
573 ArrayDeque q = populatedDeque(SIZE);
574 q.clear();
575 assertTrue(q.isEmpty());
576 assertEquals(0, q.size());
577 assertTrue(q.add(new Integer(1)));
578 assertFalse(q.isEmpty());
579 q.clear();
580 assertTrue(q.isEmpty());
581 }
582
583 /**
584 * containsAll(c) is true when c contains a subset of elements
585 */
586 public void testContainsAll() {
587 ArrayDeque q = populatedDeque(SIZE);
588 ArrayDeque p = new ArrayDeque();
589 for (int i = 0; i < SIZE; ++i) {
590 assertTrue(q.containsAll(p));
591 assertFalse(p.containsAll(q));
592 assertTrue(p.add(new Integer(i)));
593 }
594 assertTrue(p.containsAll(q));
595 }
596
597 /**
598 * retainAll(c) retains only those elements of c and reports true if changed
599 */
600 public void testRetainAll() {
601 ArrayDeque q = populatedDeque(SIZE);
602 ArrayDeque p = populatedDeque(SIZE);
603 for (int i = 0; i < SIZE; ++i) {
604 boolean changed = q.retainAll(p);
605 assertEquals(changed, (i > 0));
606 assertTrue(q.containsAll(p));
607 assertEquals(SIZE-i, q.size());
608 p.removeFirst();
609 }
610 }
611
612 /**
613 * removeAll(c) removes only those elements of c and reports true if changed
614 */
615 public void testRemoveAll() {
616 for (int i = 1; i < SIZE; ++i) {
617 ArrayDeque q = populatedDeque(SIZE);
618 ArrayDeque p = populatedDeque(i);
619 assertTrue(q.removeAll(p));
620 assertEquals(SIZE-i, q.size());
621 for (int j = 0; j < i; ++j) {
622 assertFalse(q.contains(p.removeFirst()));
623 }
624 }
625 }
626
627 /**
628 * toArray() contains all elements in FIFO order
629 */
630 public void testToArray() {
631 ArrayDeque q = populatedDeque(SIZE);
632 Object[] o = q.toArray();
633 for (int i = 0; i < o.length; i++)
634 assertSame(o[i], q.pollFirst());
635 }
636
637 /**
638 * toArray(a) contains all elements in FIFO order
639 */
640 public void testToArray2() {
641 ArrayDeque<Integer> q = populatedDeque(SIZE);
642 Integer[] ints = new Integer[SIZE];
643 Integer[] array = q.toArray(ints);
644 assertSame(ints, array);
645 for (int i = 0; i < ints.length; i++)
646 assertSame(ints[i], q.remove());
647 }
648
649 /**
650 * toArray(null) throws NullPointerException
651 */
652 public void testToArray_NullArg() {
653 ArrayDeque l = new ArrayDeque();
654 l.add(new Object());
655 try {
656 l.toArray(null);
657 shouldThrow();
658 } catch (NullPointerException success) {}
659 }
660
661 /**
662 * toArray(incompatible array type) throws ArrayStoreException
663 */
664 public void testToArray1_BadArg() {
665 ArrayDeque l = new ArrayDeque();
666 l.add(new Integer(5));
667 try {
668 l.toArray(new String[10]);
669 shouldThrow();
670 } catch (ArrayStoreException success) {}
671 }
672
673 /**
674 * Iterator iterates through all elements
675 */
676 public void testIterator() {
677 ArrayDeque q = populatedDeque(SIZE);
678 int i = 0;
679 Iterator it = q.iterator();
680 while (it.hasNext()) {
681 assertTrue(q.contains(it.next()));
682 ++i;
683 }
684 assertEquals(i, SIZE);
685 }
686
687 /**
688 * Iterator ordering is FIFO
689 */
690 public void testIteratorOrdering() {
691 final ArrayDeque q = new ArrayDeque();
692 q.add(one);
693 q.add(two);
694 q.add(three);
695 int k = 0;
696 for (Iterator it = q.iterator(); it.hasNext();) {
697 assertEquals(++k, it.next());
698 }
699
700 assertEquals(3, k);
701 }
702
703 /**
704 * iterator.remove() removes current element
705 */
706 public void testIteratorRemove() {
707 final ArrayDeque q = new ArrayDeque();
708 final Random rng = new Random();
709 for (int iters = 0; iters < 100; ++iters) {
710 int max = rng.nextInt(5) + 2;
711 int split = rng.nextInt(max-1) + 1;
712 for (int j = 1; j <= max; ++j)
713 q.add(new Integer(j));
714 Iterator it = q.iterator();
715 for (int j = 1; j <= split; ++j)
716 assertEquals(it.next(), new Integer(j));
717 it.remove();
718 assertEquals(it.next(), new Integer(split+1));
719 for (int j = 1; j <= split; ++j)
720 q.remove(new Integer(j));
721 it = q.iterator();
722 for (int j = split+1; j <= max; ++j) {
723 assertEquals(it.next(), new Integer(j));
724 it.remove();
725 }
726 assertFalse(it.hasNext());
727 assertTrue(q.isEmpty());
728 }
729 }
730
731 /**
732 * Descending iterator iterates through all elements
733 */
734 public void testDescendingIterator() {
735 ArrayDeque q = populatedDeque(SIZE);
736 int i = 0;
737 Iterator it = q.descendingIterator();
738 while (it.hasNext()) {
739 assertTrue(q.contains(it.next()));
740 ++i;
741 }
742 assertEquals(i, SIZE);
743 assertFalse(it.hasNext());
744 try {
745 it.next();
746 shouldThrow();
747 } catch (NoSuchElementException success) {}
748 }
749
750 /**
751 * Descending iterator ordering is reverse FIFO
752 */
753 public void testDescendingIteratorOrdering() {
754 final ArrayDeque q = new ArrayDeque();
755 for (int iters = 0; iters < 100; ++iters) {
756 q.add(new Integer(3));
757 q.add(new Integer(2));
758 q.add(new Integer(1));
759 int k = 0;
760 for (Iterator it = q.descendingIterator(); it.hasNext();) {
761 assertEquals(++k, it.next());
762 }
763
764 assertEquals(3, k);
765 q.remove();
766 q.remove();
767 q.remove();
768 }
769 }
770
771 /**
772 * descendingIterator.remove() removes current element
773 */
774 public void testDescendingIteratorRemove() {
775 final ArrayDeque q = new ArrayDeque();
776 final Random rng = new Random();
777 for (int iters = 0; iters < 100; ++iters) {
778 int max = rng.nextInt(5) + 2;
779 int split = rng.nextInt(max-1) + 1;
780 for (int j = max; j >= 1; --j)
781 q.add(new Integer(j));
782 Iterator it = q.descendingIterator();
783 for (int j = 1; j <= split; ++j)
784 assertEquals(it.next(), new Integer(j));
785 it.remove();
786 assertEquals(it.next(), new Integer(split+1));
787 for (int j = 1; j <= split; ++j)
788 q.remove(new Integer(j));
789 it = q.descendingIterator();
790 for (int j = split+1; j <= max; ++j) {
791 assertEquals(it.next(), new Integer(j));
792 it.remove();
793 }
794 assertFalse(it.hasNext());
795 assertTrue(q.isEmpty());
796 }
797 }
798
799 /**
800 * toString() contains toStrings of elements
801 */
802 public void testToString() {
803 ArrayDeque q = populatedDeque(SIZE);
804 String s = q.toString();
805 for (int i = 0; i < SIZE; ++i) {
806 assertTrue(s.contains(String.valueOf(i)));
807 }
808 }
809
810 /**
811 * A deserialized serialized deque has same elements in same order
812 */
813 public void testSerialization() throws Exception {
814 ArrayDeque q = populatedDeque(SIZE);
815 ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
816 ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
817 out.writeObject(q);
818 out.close();
819
820 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
821 ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
822 ArrayDeque r = (ArrayDeque)in.readObject();
823 assertEquals(q.size(), r.size());
824 while (!q.isEmpty())
825 assertEquals(q.remove(), r.remove());
826 }
827
828 }