Array.java revision 5d1ac920fdaef5d4ec8f66bb734488cd9660b024
15d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao// Copyright 2008 The Android Open Source Project
25d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
35d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
45d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao/**
55d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao * Exercise arrays.
65d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao */
75d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhaopublic class Array {
85d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
95d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    /*
105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     * Verify array contents.
115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     */
125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkBytes(byte[] bytes) {
135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(bytes[0] == 0);
145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(bytes[1] == -1);
155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(bytes[2] == -2);
165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(bytes[3] == -3);
175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(bytes[4] == -4);
185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkShorts(short[] shorts) {
205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(shorts[0] == 20);
215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(shorts[1] == 10);
225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(shorts[2] == 0);
235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(shorts[3] == -10);
245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(shorts[4] == -20);
255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkChars(char[] chars) {
275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(chars[0] == 40000);
285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(chars[1] == 40001);
295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(chars[2] == 40002);
305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(chars[3] == 40003);
315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(chars[4] == 40004);
325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkInts(int[] ints) {
345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints[0] == 70000);
355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints[1] == 70001);
365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints[2] == 70002);
375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints[3] == 70003);
385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints[4] == 70004);
395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkBooleans(boolean[] booleans) {
415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(booleans[0]);
425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(booleans[1]);
435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(!booleans[2]);
445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(booleans[3]);
455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(!booleans[4]);
465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkFloats(float[] floats) {
485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(floats[0] == -1.5);
495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(floats[1] == -0.5);
505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(floats[2] == 0.0);
515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(floats[3] == 0.5);
525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(floats[4] == 1.5);
535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkLongs(long[] longs) {
555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs[0] == 0x1122334455667788L);
565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs[1] == 0x8877665544332211L);
575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs[2] == 0L);
585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs[3] == 1L);
595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs[4] == -1L);
605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkStrings(String[] strings) {
625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(strings[0].equals("zero"));
635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(strings[1].equals("one"));
645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(strings[2].equals("two"));
655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(strings[3].equals("three"));
665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(strings[4].equals("four"));
675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    /*
705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     * Try bad range values, 32 bit get/put.
715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     */
725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkRange32(int[] ints, int[] empty, int negVal1, int negVal2){
735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Array.checkRange32");
745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int i = 0;
755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(ints.length == 5);
775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            i = ints[5];            // exact bound
805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            ints[5] = i;            // exact bound
865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            i = ints[6];            // one past
925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            i = ints[negVal1];      // -1
985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            ints[negVal1] = i;      // -1
1045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            i = ints[negVal2];      // min int
1105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            i = empty[1];
1185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    /*
1255d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     * Try bad range values, 64 bit get/put.
1265d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     */
1275d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkRange64(long[] longs, int negVal1, int negVal2) {
1285d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Array.checkRange64");
1295d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        long l = 0L;
1305d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1315d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        assert(longs.length == 5);
1325d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1335d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1345d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            l = longs[5];            // exact bound
1355d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1365d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1375d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1385d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1395d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1405d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            longs[5] = l;            // exact bound
1415d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1425d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1435d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1445d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1455d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1465d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            l = longs[6];            // one past
1475d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1485d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1495d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1505d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1515d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1525d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            l = longs[negVal1];      // -1
1535d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1545d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1555d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1565d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1575d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1585d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            longs[negVal1] = l;      // -1
1595d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1605d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1615d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1625d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1635d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1645d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            l = longs[negVal2];      // min int
1655d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1665d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (ArrayIndexOutOfBoundsException aioobe) {
1675d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1685d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1695d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1705d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1715d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    /*
1725d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     * Test negative allocations of object and primitive arrays.
1735d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao     */
1745d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    static void checkNegAlloc(int count) {
1755d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Array.checkNegAlloc");
1765d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String[] strings;
1775d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] ints;
1785d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1795d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1805d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            ints = new int[count];
1815d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1825d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (NegativeArraySizeException nase) {
1835d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1845d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1855d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1865d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        try {
1875d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            strings = new String[count];
1885d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            assert(false);
1895d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        } catch (NegativeArraySizeException nase) {
1905d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            // good
1915d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        }
1925d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
1935d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1945d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    public static void run() {
1955d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        System.out.println("Array check...");
1965d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
1975d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        byte[] xBytes = new byte[] { 0, -1, -2, -3, -4 };
1985d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        short[] xShorts = new short[] { 20, 10, 0, -10, -20 };
1995d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        char[] xChars = new char[] { 40000, 40001, 40002, 40003, 40004 };
2005d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] xInts = new int[] { 70000, 70001, 70002, 70003, 70004 };
2015d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        boolean[] xBooleans = new boolean[] { true, true, false, true, false };
2025d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        float[] xFloats = new float[] { -1.5f, -0.5f, 0.0f, 0.5f, 1.5f };
2035d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        long[] xLongs = new long[] {
2045d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            0x1122334455667788L, 0x8877665544332211L, 0L, 1L, -1l };
2055d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        String[] xStrings = new String[] {
2065d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao            "zero", "one", "two", "three", "four" };
2075d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2085d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        int[] xEmpty = new int[0];
2095d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2105d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkBytes(xBytes);
2115d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkShorts(xShorts);
2125d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkChars(xChars);
2135d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkInts(xInts);
2145d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkBooleans(xBooleans);
2155d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkFloats(xFloats);
2165d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkLongs(xLongs);
2175d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkStrings(xStrings);
2185d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2195d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkRange32(xInts, xEmpty, -1, (int) 0x80000000);
2205d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkRange64(xLongs, -1, (int) 0x80000000);
2215d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao
2225d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao        checkNegAlloc(-1);
2235d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao    }
2245d1ac920fdaef5d4ec8f66bb734488cd9660b024jeffhao}
225