18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/*
28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166
38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at
48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/
58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes,
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd.
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.Arrays;
128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.atomic.AtomicReferenceArray;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath
178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class AtomicReferenceArrayTest extends JSR166TestCase {
188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
25e8b323c7cb7d55be9a4df579231e44f04f53d766Przemyslaw Szczepaniak    //     return new TestSuite(AtomicReferenceArrayTest.class);
268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * constructor creates array of given size with all elements null
308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor() {
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<Integer>(SIZE);
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertNull(aa.get(i));
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * constructor with null array throws NPE
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor2NPE() {
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        try {
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Integer[] a = null;
448e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            new AtomicReferenceArray<Integer>(a);
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            shouldThrow();
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        } catch (NullPointerException success) {}
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * constructor with array is of same size and has all elements
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructor2() {
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] a = { two, one, three, four, seven };
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<Integer>(a);
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(a.length, aa.length());
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < a.length; i++)
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(a[i], aa.get(i));
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Initialize AtomicReferenceArray<Class> with SubClass[]
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testConstructorSubClassArray() {
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] a = { two, one, three, four, seven };
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray<Number> aa = new AtomicReferenceArray<Number>(a);
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(a.length, aa.length());
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < a.length; i++) {
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(a[i], aa.get(i));
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            Long x = Long.valueOf(i);
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, x);
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(x, aa.get(i));
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get and set for out of bound indices throw IndexOutOfBoundsException
778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testIndexing() {
798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<Integer>(SIZE);
808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int index : new int[] { -1, SIZE }) {
818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            try {
828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                aa.get(index);
838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                shouldThrow();
848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            } catch (IndexOutOfBoundsException success) {}
858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            try {
868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                aa.set(index, null);
878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                shouldThrow();
888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            } catch (IndexOutOfBoundsException success) {}
898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            try {
908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                aa.lazySet(index, null);
918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                shouldThrow();
928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            } catch (IndexOutOfBoundsException success) {}
938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            try {
948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                aa.compareAndSet(index, null, null);
958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                shouldThrow();
968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            } catch (IndexOutOfBoundsException success) {}
978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            try {
988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                aa.weakCompareAndSet(index, null, null);
998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                shouldThrow();
1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            } catch (IndexOutOfBoundsException success) {}
1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get returns the last value set at index
1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGetSet() {
1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray aa = new AtomicReferenceArray(SIZE);
1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, one);
1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(one, aa.get(i));
1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, two);
1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(two, aa.get(i));
1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, m3);
1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m3, aa.get(i));
1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * get returns the last value lazySet at index by same thread
1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGetLazySet() {
1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray aa = new AtomicReferenceArray(SIZE);
1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.lazySet(i, one);
1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(one, aa.get(i));
1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.lazySet(i, two);
1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(two, aa.get(i));
1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.lazySet(i, m3);
1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m3, aa.get(i));
1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * compareAndSet succeeds in changing value if equal to expected else fails
1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testCompareAndSet() {
1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray aa = new AtomicReferenceArray(SIZE);
1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, one);
1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(aa.compareAndSet(i, one, two));
1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(aa.compareAndSet(i, two, m4));
1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m4, aa.get(i));
1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertFalse(aa.compareAndSet(i, m5, seven));
1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m4, aa.get(i));
1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertTrue(aa.compareAndSet(i, m4, seven));
1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(seven, aa.get(i));
1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * compareAndSet in one thread enables another waiting for value
1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * to succeed
1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testCompareAndSetInMultipleThreads() throws InterruptedException {
1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        final AtomicReferenceArray a = new AtomicReferenceArray(1);
1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        a.set(0, one);
1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread t = new Thread(new CheckedRunnable() {
1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            public void realRun() {
1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                while (!a.compareAndSet(0, two, three))
1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle                    Thread.yield();
1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            }});
1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        t.start();
1658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(a.compareAndSet(0, one, two));
1668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        t.join(LONG_DELAY_MS);
1678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertFalse(t.isAlive());
1688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertSame(three, a.get(0));
1698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * repeated weakCompareAndSet succeeds in changing value when equal
1738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * to expected
1748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testWeakCompareAndSet() {
1768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray aa = new AtomicReferenceArray(SIZE);
1778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
1788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, one);
1798e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            do {} while (!aa.weakCompareAndSet(i, one, two));
1808e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            do {} while (!aa.weakCompareAndSet(i, two, m4));
1818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m4, aa.get(i));
1828e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath            do {} while (!aa.weakCompareAndSet(i, m4, seven));
1838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(seven, aa.get(i));
1848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * getAndSet returns previous value and sets to given value at given index
1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testGetAndSet() {
1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray aa = new AtomicReferenceArray(SIZE);
1928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
1938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            aa.set(i, one);
1948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(one, aa.getAndSet(i, zero));
1958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(zero, aa.getAndSet(i, m10));
1968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertSame(m10, aa.getAndSet(i, one));
1978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
1988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
1998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * a deserialized serialized array holds same values
2028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testSerialization() throws Exception {
2048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray x = new AtomicReferenceArray(SIZE);
2058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
2068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            x.set(i, new Integer(-i));
2078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray y = serialClone(x);
2098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertNotSame(x, y);
2108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(x.length(), y.length());
2118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        for (int i = 0; i < SIZE; i++) {
2128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle            assertEquals(x.get(i), y.get(i));
2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        }
2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * toString returns current value.
2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testToString() {
2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Integer[] a = { two, one, three, four, seven };
2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        AtomicReferenceArray<Integer> aa = new AtomicReferenceArray<Integer>(a);
2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertEquals(Arrays.toString(a), aa.toString());
2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
225