1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2008 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker /** 18*795d594fSAndroid Build Coastguard Worker * Exercise arrays. 19*795d594fSAndroid Build Coastguard Worker */ 20*795d594fSAndroid Build Coastguard Worker public class Array { 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker /* 23*795d594fSAndroid Build Coastguard Worker * Verify array contents. 24*795d594fSAndroid Build Coastguard Worker */ checkBytes(byte[] bytes)25*795d594fSAndroid Build Coastguard Worker static void checkBytes(byte[] bytes) { 26*795d594fSAndroid Build Coastguard Worker Main.assertTrue(bytes[0] == 0); 27*795d594fSAndroid Build Coastguard Worker Main.assertTrue(bytes[1] == -1); 28*795d594fSAndroid Build Coastguard Worker Main.assertTrue(bytes[2] == -2); 29*795d594fSAndroid Build Coastguard Worker Main.assertTrue(bytes[3] == -3); 30*795d594fSAndroid Build Coastguard Worker Main.assertTrue(bytes[4] == -4); 31*795d594fSAndroid Build Coastguard Worker } checkShorts(short[] shorts)32*795d594fSAndroid Build Coastguard Worker static void checkShorts(short[] shorts) { 33*795d594fSAndroid Build Coastguard Worker Main.assertTrue(shorts[0] == 20); 34*795d594fSAndroid Build Coastguard Worker Main.assertTrue(shorts[1] == 10); 35*795d594fSAndroid Build Coastguard Worker Main.assertTrue(shorts[2] == 0); 36*795d594fSAndroid Build Coastguard Worker Main.assertTrue(shorts[3] == -10); 37*795d594fSAndroid Build Coastguard Worker Main.assertTrue(shorts[4] == -20); 38*795d594fSAndroid Build Coastguard Worker } checkChars(char[] chars)39*795d594fSAndroid Build Coastguard Worker static void checkChars(char[] chars) { 40*795d594fSAndroid Build Coastguard Worker Main.assertTrue(chars[0] == 40000); 41*795d594fSAndroid Build Coastguard Worker Main.assertTrue(chars[1] == 40001); 42*795d594fSAndroid Build Coastguard Worker Main.assertTrue(chars[2] == 40002); 43*795d594fSAndroid Build Coastguard Worker Main.assertTrue(chars[3] == 40003); 44*795d594fSAndroid Build Coastguard Worker Main.assertTrue(chars[4] == 40004); 45*795d594fSAndroid Build Coastguard Worker } checkInts(int[] ints)46*795d594fSAndroid Build Coastguard Worker static void checkInts(int[] ints) { 47*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints[0] == 70000); 48*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints[1] == 70001); 49*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints[2] == 70002); 50*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints[3] == 70003); 51*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints[4] == 70004); 52*795d594fSAndroid Build Coastguard Worker } checkBooleans(boolean[] booleans)53*795d594fSAndroid Build Coastguard Worker static void checkBooleans(boolean[] booleans) { 54*795d594fSAndroid Build Coastguard Worker Main.assertTrue(booleans[0]); 55*795d594fSAndroid Build Coastguard Worker Main.assertTrue(booleans[1]); 56*795d594fSAndroid Build Coastguard Worker Main.assertTrue(!booleans[2]); 57*795d594fSAndroid Build Coastguard Worker Main.assertTrue(booleans[3]); 58*795d594fSAndroid Build Coastguard Worker Main.assertTrue(!booleans[4]); 59*795d594fSAndroid Build Coastguard Worker } checkFloats(float[] floats)60*795d594fSAndroid Build Coastguard Worker static void checkFloats(float[] floats) { 61*795d594fSAndroid Build Coastguard Worker Main.assertTrue(floats[0] == -1.5); 62*795d594fSAndroid Build Coastguard Worker Main.assertTrue(floats[1] == -0.5); 63*795d594fSAndroid Build Coastguard Worker Main.assertTrue(floats[2] == 0.0); 64*795d594fSAndroid Build Coastguard Worker Main.assertTrue(floats[3] == 0.5); 65*795d594fSAndroid Build Coastguard Worker Main.assertTrue(floats[4] == 1.5); 66*795d594fSAndroid Build Coastguard Worker } checkLongs(long[] longs)67*795d594fSAndroid Build Coastguard Worker static void checkLongs(long[] longs) { 68*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs[0] == 0x1122334455667788L); 69*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs[1] == 0x8877665544332211L); 70*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs[2] == 0L); 71*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs[3] == 1L); 72*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs[4] == -1L); 73*795d594fSAndroid Build Coastguard Worker } checkStrings(String[] strings)74*795d594fSAndroid Build Coastguard Worker static void checkStrings(String[] strings) { 75*795d594fSAndroid Build Coastguard Worker Main.assertTrue(strings[0].equals("zero")); 76*795d594fSAndroid Build Coastguard Worker Main.assertTrue(strings[1].equals("one")); 77*795d594fSAndroid Build Coastguard Worker Main.assertTrue(strings[2].equals("two")); 78*795d594fSAndroid Build Coastguard Worker Main.assertTrue(strings[3].equals("three")); 79*795d594fSAndroid Build Coastguard Worker Main.assertTrue(strings[4].equals("four")); 80*795d594fSAndroid Build Coastguard Worker } 81*795d594fSAndroid Build Coastguard Worker 82*795d594fSAndroid Build Coastguard Worker /* 83*795d594fSAndroid Build Coastguard Worker * Try bad range values, 32 bit get/put. 84*795d594fSAndroid Build Coastguard Worker */ checkRange32(int[] ints, int[] empty, int negVal1, int negVal2)85*795d594fSAndroid Build Coastguard Worker static void checkRange32(int[] ints, int[] empty, int negVal1, int negVal2) { 86*795d594fSAndroid Build Coastguard Worker System.out.println("Array.checkRange32"); 87*795d594fSAndroid Build Coastguard Worker int i = 0; 88*795d594fSAndroid Build Coastguard Worker 89*795d594fSAndroid Build Coastguard Worker Main.assertTrue(ints.length == 5); 90*795d594fSAndroid Build Coastguard Worker 91*795d594fSAndroid Build Coastguard Worker try { 92*795d594fSAndroid Build Coastguard Worker i = ints[5]; // exact bound 93*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 94*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 95*795d594fSAndroid Build Coastguard Worker // good 96*795d594fSAndroid Build Coastguard Worker } 97*795d594fSAndroid Build Coastguard Worker try { 98*795d594fSAndroid Build Coastguard Worker ints[5] = i; // exact bound 99*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 100*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 101*795d594fSAndroid Build Coastguard Worker // good 102*795d594fSAndroid Build Coastguard Worker } 103*795d594fSAndroid Build Coastguard Worker try { 104*795d594fSAndroid Build Coastguard Worker i = ints[6]; // one past 105*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 106*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 107*795d594fSAndroid Build Coastguard Worker // good 108*795d594fSAndroid Build Coastguard Worker } 109*795d594fSAndroid Build Coastguard Worker try { 110*795d594fSAndroid Build Coastguard Worker i = ints[negVal1]; // -1 111*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 112*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 113*795d594fSAndroid Build Coastguard Worker // good 114*795d594fSAndroid Build Coastguard Worker } 115*795d594fSAndroid Build Coastguard Worker try { 116*795d594fSAndroid Build Coastguard Worker ints[negVal1] = i; // -1 117*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 118*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 119*795d594fSAndroid Build Coastguard Worker // good 120*795d594fSAndroid Build Coastguard Worker } 121*795d594fSAndroid Build Coastguard Worker try { 122*795d594fSAndroid Build Coastguard Worker i = ints[negVal2]; // min int 123*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 124*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 125*795d594fSAndroid Build Coastguard Worker // good 126*795d594fSAndroid Build Coastguard Worker } 127*795d594fSAndroid Build Coastguard Worker 128*795d594fSAndroid Build Coastguard Worker 129*795d594fSAndroid Build Coastguard Worker try { 130*795d594fSAndroid Build Coastguard Worker i = empty[1]; 131*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 132*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 133*795d594fSAndroid Build Coastguard Worker // good 134*795d594fSAndroid Build Coastguard Worker } 135*795d594fSAndroid Build Coastguard Worker } 136*795d594fSAndroid Build Coastguard Worker 137*795d594fSAndroid Build Coastguard Worker /* 138*795d594fSAndroid Build Coastguard Worker * Try bad range values, 64 bit get/put. 139*795d594fSAndroid Build Coastguard Worker */ checkRange64(long[] longs, int negVal1, int negVal2)140*795d594fSAndroid Build Coastguard Worker static void checkRange64(long[] longs, int negVal1, int negVal2) { 141*795d594fSAndroid Build Coastguard Worker System.out.println("Array.checkRange64"); 142*795d594fSAndroid Build Coastguard Worker long l = 0L; 143*795d594fSAndroid Build Coastguard Worker 144*795d594fSAndroid Build Coastguard Worker Main.assertTrue(longs.length == 5); 145*795d594fSAndroid Build Coastguard Worker 146*795d594fSAndroid Build Coastguard Worker try { 147*795d594fSAndroid Build Coastguard Worker l = longs[5]; // exact bound 148*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 149*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 150*795d594fSAndroid Build Coastguard Worker // good 151*795d594fSAndroid Build Coastguard Worker } 152*795d594fSAndroid Build Coastguard Worker try { 153*795d594fSAndroid Build Coastguard Worker longs[5] = l; // exact bound 154*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 155*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 156*795d594fSAndroid Build Coastguard Worker // good 157*795d594fSAndroid Build Coastguard Worker } 158*795d594fSAndroid Build Coastguard Worker try { 159*795d594fSAndroid Build Coastguard Worker l = longs[6]; // one past 160*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 161*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 162*795d594fSAndroid Build Coastguard Worker // good 163*795d594fSAndroid Build Coastguard Worker } 164*795d594fSAndroid Build Coastguard Worker try { 165*795d594fSAndroid Build Coastguard Worker l = longs[negVal1]; // -1 166*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 167*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 168*795d594fSAndroid Build Coastguard Worker // good 169*795d594fSAndroid Build Coastguard Worker } 170*795d594fSAndroid Build Coastguard Worker try { 171*795d594fSAndroid Build Coastguard Worker longs[negVal1] = l; // -1 172*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 173*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 174*795d594fSAndroid Build Coastguard Worker // good 175*795d594fSAndroid Build Coastguard Worker } 176*795d594fSAndroid Build Coastguard Worker try { 177*795d594fSAndroid Build Coastguard Worker l = longs[negVal2]; // min int 178*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 179*795d594fSAndroid Build Coastguard Worker } catch (ArrayIndexOutOfBoundsException aioobe) { 180*795d594fSAndroid Build Coastguard Worker // good 181*795d594fSAndroid Build Coastguard Worker } 182*795d594fSAndroid Build Coastguard Worker } 183*795d594fSAndroid Build Coastguard Worker 184*795d594fSAndroid Build Coastguard Worker /* 185*795d594fSAndroid Build Coastguard Worker * Test negative allocations of object and primitive arrays. 186*795d594fSAndroid Build Coastguard Worker */ checkNegAlloc(int count)187*795d594fSAndroid Build Coastguard Worker static void checkNegAlloc(int count) { 188*795d594fSAndroid Build Coastguard Worker System.out.println("Array.checkNegAlloc"); 189*795d594fSAndroid Build Coastguard Worker String[] strings; 190*795d594fSAndroid Build Coastguard Worker int[] ints; 191*795d594fSAndroid Build Coastguard Worker 192*795d594fSAndroid Build Coastguard Worker try { 193*795d594fSAndroid Build Coastguard Worker ints = new int[count]; 194*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 195*795d594fSAndroid Build Coastguard Worker } catch (NegativeArraySizeException nase) { 196*795d594fSAndroid Build Coastguard Worker // good 197*795d594fSAndroid Build Coastguard Worker } 198*795d594fSAndroid Build Coastguard Worker 199*795d594fSAndroid Build Coastguard Worker try { 200*795d594fSAndroid Build Coastguard Worker strings = new String[count]; 201*795d594fSAndroid Build Coastguard Worker Main.assertTrue(false); 202*795d594fSAndroid Build Coastguard Worker } catch (NegativeArraySizeException nase) { 203*795d594fSAndroid Build Coastguard Worker // good 204*795d594fSAndroid Build Coastguard Worker } 205*795d594fSAndroid Build Coastguard Worker } 206*795d594fSAndroid Build Coastguard Worker run()207*795d594fSAndroid Build Coastguard Worker public static void run() { 208*795d594fSAndroid Build Coastguard Worker System.out.println("Array check..."); 209*795d594fSAndroid Build Coastguard Worker 210*795d594fSAndroid Build Coastguard Worker byte[] xBytes = new byte[] { 0, -1, -2, -3, -4 }; 211*795d594fSAndroid Build Coastguard Worker short[] xShorts = new short[] { 20, 10, 0, -10, -20 }; 212*795d594fSAndroid Build Coastguard Worker char[] xChars = new char[] { 40000, 40001, 40002, 40003, 40004 }; 213*795d594fSAndroid Build Coastguard Worker int[] xInts = new int[] { 70000, 70001, 70002, 70003, 70004 }; 214*795d594fSAndroid Build Coastguard Worker boolean[] xBooleans = new boolean[] { true, true, false, true, false }; 215*795d594fSAndroid Build Coastguard Worker float[] xFloats = new float[] { -1.5f, -0.5f, 0.0f, 0.5f, 1.5f }; 216*795d594fSAndroid Build Coastguard Worker long[] xLongs = new long[] { 217*795d594fSAndroid Build Coastguard Worker 0x1122334455667788L, 0x8877665544332211L, 0L, 1L, -1l }; 218*795d594fSAndroid Build Coastguard Worker String[] xStrings = new String[] { 219*795d594fSAndroid Build Coastguard Worker "zero", "one", "two", "three", "four" }; 220*795d594fSAndroid Build Coastguard Worker 221*795d594fSAndroid Build Coastguard Worker int[] xEmpty = new int[0]; 222*795d594fSAndroid Build Coastguard Worker 223*795d594fSAndroid Build Coastguard Worker checkBytes(xBytes); 224*795d594fSAndroid Build Coastguard Worker checkShorts(xShorts); 225*795d594fSAndroid Build Coastguard Worker checkChars(xChars); 226*795d594fSAndroid Build Coastguard Worker checkInts(xInts); 227*795d594fSAndroid Build Coastguard Worker checkBooleans(xBooleans); 228*795d594fSAndroid Build Coastguard Worker checkFloats(xFloats); 229*795d594fSAndroid Build Coastguard Worker checkLongs(xLongs); 230*795d594fSAndroid Build Coastguard Worker checkStrings(xStrings); 231*795d594fSAndroid Build Coastguard Worker 232*795d594fSAndroid Build Coastguard Worker checkRange32(xInts, xEmpty, -1, (int) 0x80000000); 233*795d594fSAndroid Build Coastguard Worker checkRange64(xLongs, -1, (int) 0x80000000); 234*795d594fSAndroid Build Coastguard Worker 235*795d594fSAndroid Build Coastguard Worker checkNegAlloc(-1); 236*795d594fSAndroid Build Coastguard Worker } 237*795d594fSAndroid Build Coastguard Worker } 238