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