ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ArrayDequeTest.java
Revision: 1.26
Committed: Tue Feb 21 02:04:17 2012 UTC (12 years, 2 months ago) by jsr166
Branch: MAIN
Changes since 1.25: +1 -1 lines
Log Message:
slightly clearer javadoc

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