xref: /aosp_15_r20/art/test/003-omnibus-opcodes/src/Array.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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