ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ArrayDequeTest.java
(Generate patch)

Comparing jsr166/src/test/tck/ArrayDequeTest.java (file contents):
Revision 1.26 by jsr166, Tue Feb 21 02:04:17 2012 UTC vs.
Revision 1.27 by jsr166, Wed Feb 20 12:07:45 2013 UTC

# Line 625 | Line 625 | public class ArrayDequeTest extends JSR1
625          }
626      }
627  
628 +    void checkToArray(ArrayDeque q) {
629 +        int size = q.size();
630 +        Object[] o = q.toArray();
631 +        assertEquals(size, o.length);
632 +        Iterator it = q.iterator();
633 +        for (int i = 0; i < size; i++) {
634 +            Integer x = (Integer) it.next();
635 +            assertEquals((Integer)o[0] + i, (int) x);
636 +            assertSame(o[i], x);
637 +        }
638 +    }
639 +
640      /**
641       * toArray() contains all elements in FIFO order
642       */
643      public void testToArray() {
644 <        ArrayDeque q = populatedDeque(SIZE);
645 <        Object[] o = q.toArray();
646 <        for (int i = 0; i < o.length; i++)
647 <            assertSame(o[i], q.pollFirst());
644 >        ArrayDeque q = new ArrayDeque();
645 >        for (int i = 0; i < SIZE; i++) {
646 >            checkToArray(q);
647 >            q.addLast(i);
648 >        }
649 >        // Provoke wraparound
650 >        for (int i = 0; i < SIZE; i++) {
651 >            checkToArray(q);
652 >            assertEquals(i, q.poll());
653 >            q.addLast(SIZE+i);
654 >        }
655 >        for (int i = 0; i < SIZE; i++) {
656 >            checkToArray(q);
657 >            assertEquals(SIZE+i, q.poll());
658 >        }
659 >    }
660 >
661 >    void checkToArray2(ArrayDeque q) {
662 >        int size = q.size();
663 >        Integer[] a1 = size == 0 ? null : new Integer[size-1];
664 >        Integer[] a2 = new Integer[size];
665 >        Integer[] a3 = new Integer[size+2];
666 >        if (size > 0) Arrays.fill(a1, 42);
667 >        Arrays.fill(a2, 42);
668 >        Arrays.fill(a3, 42);
669 >        Integer[] b1 = size == 0 ? null : (Integer[]) q.toArray(a1);
670 >        Integer[] b2 = (Integer[]) q.toArray(a2);
671 >        Integer[] b3 = (Integer[]) q.toArray(a3);
672 >        assertSame(a2, b2);
673 >        assertSame(a3, b3);
674 >        Iterator it = q.iterator();
675 >        for (int i = 0; i < size; i++) {
676 >            Integer x = (Integer) it.next();
677 >            assertSame(b1[i], x);
678 >            assertEquals(b1[0] + i, (int) x);
679 >            assertSame(b2[i], x);
680 >            assertSame(b3[i], x);
681 >        }
682 >        assertNull(a3[size]);
683 >        assertEquals(42, (int) a3[size+1]);
684 >        if (size > 0) {
685 >            assertNotSame(a1, b1);
686 >            assertEquals(size, b1.length);
687 >            for (int i = 0; i < a1.length; i++) {
688 >                assertEquals(42, (int) a1[i]);
689 >            }
690 >        }
691      }
692  
693      /**
694       * toArray(a) contains all elements in FIFO order
695       */
696      public void testToArray2() {
697 <        ArrayDeque<Integer> q = populatedDeque(SIZE);
698 <        Integer[] ints = new Integer[SIZE];
699 <        Integer[] array = q.toArray(ints);
700 <        assertSame(ints, array);
701 <        for (int i = 0; i < ints.length; i++)
702 <            assertSame(ints[i], q.remove());
697 >        ArrayDeque q = new ArrayDeque();
698 >        for (int i = 0; i < SIZE; i++) {
699 >            checkToArray2(q);
700 >            q.addLast(i);
701 >        }
702 >        // Provoke wraparound
703 >        for (int i = 0; i < SIZE; i++) {
704 >            checkToArray2(q);
705 >            assertEquals(i, q.poll());
706 >            q.addLast(SIZE+i);
707 >        }
708 >        for (int i = 0; i < SIZE; i++) {
709 >            checkToArray2(q);
710 >            assertEquals(SIZE+i, q.poll());
711 >        }
712      }
713  
714      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines