xref: /aosp_15_r20/art/test/011-array-copy2/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2024 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 class Main {
18*795d594fSAndroid Build Coastguard Worker 
19*795d594fSAndroid Build Coastguard Worker     private static class ByteArrayTests {
init(byte[] arr)20*795d594fSAndroid Build Coastguard Worker         public static byte[] init(byte[] arr) {
21*795d594fSAndroid Build Coastguard Worker             for (byte i = 0; i < arr.length; i++) {
22*795d594fSAndroid Build Coastguard Worker                 arr[i] = (byte) i;
23*795d594fSAndroid Build Coastguard Worker             }
24*795d594fSAndroid Build Coastguard Worker             return arr;
25*795d594fSAndroid Build Coastguard Worker         }
26*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)27*795d594fSAndroid Build Coastguard Worker         public static void assertEquals(int expected, int actual) {
28*795d594fSAndroid Build Coastguard Worker             if (expected != actual) {
29*795d594fSAndroid Build Coastguard Worker                 throw new Error("Expected " + expected + ", got " + actual);
30*795d594fSAndroid Build Coastguard Worker             }
31*795d594fSAndroid Build Coastguard Worker         }
32*795d594fSAndroid Build Coastguard Worker 
createArrayOfZeroes(int size)33*795d594fSAndroid Build Coastguard Worker         public static byte[] createArrayOfZeroes(int size) {
34*795d594fSAndroid Build Coastguard Worker             byte[] arr = new byte[size];
35*795d594fSAndroid Build Coastguard Worker             return arr;
36*795d594fSAndroid Build Coastguard Worker         }
37*795d594fSAndroid Build Coastguard Worker 
createIncrementedArray(int size)38*795d594fSAndroid Build Coastguard Worker         public static byte[] createIncrementedArray(int size) {
39*795d594fSAndroid Build Coastguard Worker             byte[] arr = new byte[size];
40*795d594fSAndroid Build Coastguard Worker             init(arr);
41*795d594fSAndroid Build Coastguard Worker             return arr;
42*795d594fSAndroid Build Coastguard Worker         }
43*795d594fSAndroid Build Coastguard Worker 
checkIncrementedArray(byte[] dst)44*795d594fSAndroid Build Coastguard Worker         public static void checkIncrementedArray(byte[] dst) {
45*795d594fSAndroid Build Coastguard Worker             for (byte i = 0; i < dst.length; i++) {
46*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
47*795d594fSAndroid Build Coastguard Worker             }
48*795d594fSAndroid Build Coastguard Worker         }
49*795d594fSAndroid Build Coastguard Worker 
$noinline$test1(byte[] src, byte[] dst)50*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test1(byte[] src, byte[] dst) {
51*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 15);
52*795d594fSAndroid Build Coastguard Worker         }
53*795d594fSAndroid Build Coastguard Worker 
$noinline$test2(byte[] src, byte[] dst)54*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test2(byte[] src, byte[] dst) {
55*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 127);
56*795d594fSAndroid Build Coastguard Worker         }
57*795d594fSAndroid Build Coastguard Worker 
$noinline$test3()58*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test3() {
59*795d594fSAndroid Build Coastguard Worker             byte size = 15;
60*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[size];
61*795d594fSAndroid Build Coastguard Worker             src = init(src);
62*795d594fSAndroid Build Coastguard Worker             byte[] dst = new byte[size];
63*795d594fSAndroid Build Coastguard Worker 
64*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
65*795d594fSAndroid Build Coastguard Worker             return dst;
66*795d594fSAndroid Build Coastguard Worker         }
67*795d594fSAndroid Build Coastguard Worker 
$noinline$test4()68*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test4() {
69*795d594fSAndroid Build Coastguard Worker             int size = 127;
70*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[size];
71*795d594fSAndroid Build Coastguard Worker             src = init(src);
72*795d594fSAndroid Build Coastguard Worker             byte[] dst = new byte[size];
73*795d594fSAndroid Build Coastguard Worker 
74*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
75*795d594fSAndroid Build Coastguard Worker             return dst;
76*795d594fSAndroid Build Coastguard Worker         }
77*795d594fSAndroid Build Coastguard Worker 
$noinline$test5()78*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test5() {
79*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[80];
80*795d594fSAndroid Build Coastguard Worker             src = init(src);
81*795d594fSAndroid Build Coastguard Worker             byte[] dst = new byte[80];
82*795d594fSAndroid Build Coastguard Worker 
83*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 80);
84*795d594fSAndroid Build Coastguard Worker             return dst;
85*795d594fSAndroid Build Coastguard Worker         }
86*795d594fSAndroid Build Coastguard Worker 
$noinline$test6()87*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test6() {
88*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[127];
89*795d594fSAndroid Build Coastguard Worker             src = init(src);
90*795d594fSAndroid Build Coastguard Worker             byte[] dst = new byte[127];
91*795d594fSAndroid Build Coastguard Worker 
92*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 100, 27);
93*795d594fSAndroid Build Coastguard Worker             return dst;
94*795d594fSAndroid Build Coastguard Worker         }
check6(byte[] dst)95*795d594fSAndroid Build Coastguard Worker         public static void check6(byte[] dst) {
96*795d594fSAndroid Build Coastguard Worker             for (byte i = 0; i < 100; i++) {
97*795d594fSAndroid Build Coastguard Worker                 assertEquals(0, dst[i]);
98*795d594fSAndroid Build Coastguard Worker             }
99*795d594fSAndroid Build Coastguard Worker             for (byte i = 100; i < 127; i++) {
100*795d594fSAndroid Build Coastguard Worker                 assertEquals(i - 100, dst[i]);
101*795d594fSAndroid Build Coastguard Worker             }
102*795d594fSAndroid Build Coastguard Worker         }
103*795d594fSAndroid Build Coastguard Worker 
$noinline$test7()104*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test7() {
105*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[127];
106*795d594fSAndroid Build Coastguard Worker             src = init(src);
107*795d594fSAndroid Build Coastguard Worker 
108*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, src, 100, 27);
109*795d594fSAndroid Build Coastguard Worker             return src;
110*795d594fSAndroid Build Coastguard Worker         }
check7(byte[] dst)111*795d594fSAndroid Build Coastguard Worker         public static void check7(byte[] dst) {
112*795d594fSAndroid Build Coastguard Worker             for (byte i = 0; i < 100; i++) {
113*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
114*795d594fSAndroid Build Coastguard Worker             }
115*795d594fSAndroid Build Coastguard Worker             for (byte i = 100; i < 127; i++) {
116*795d594fSAndroid Build Coastguard Worker                 assertEquals(i - 100, dst[i]);
117*795d594fSAndroid Build Coastguard Worker             }
118*795d594fSAndroid Build Coastguard Worker         }
119*795d594fSAndroid Build Coastguard Worker 
$noinline$test8()120*795d594fSAndroid Build Coastguard Worker         public static byte[] $noinline$test8() {
121*795d594fSAndroid Build Coastguard Worker             byte[] src = new byte[127];
122*795d594fSAndroid Build Coastguard Worker             src = init(src);
123*795d594fSAndroid Build Coastguard Worker 
124*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 100, src, 0, 27);
125*795d594fSAndroid Build Coastguard Worker             return src;
126*795d594fSAndroid Build Coastguard Worker         }
check8(byte[] dst)127*795d594fSAndroid Build Coastguard Worker         public static void check8(byte[] dst) {
128*795d594fSAndroid Build Coastguard Worker             for (byte i = 0; i < 27; i++) {
129*795d594fSAndroid Build Coastguard Worker                 assertEquals(100 + i, dst[i]);
130*795d594fSAndroid Build Coastguard Worker             }
131*795d594fSAndroid Build Coastguard Worker             for (byte i = 27; i < 127; i++) {
132*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
133*795d594fSAndroid Build Coastguard Worker             }
134*795d594fSAndroid Build Coastguard Worker         }
135*795d594fSAndroid Build Coastguard Worker 
$noinline$test9(byte[] src, byte[] dst, byte i)136*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test9(byte[] src, byte[] dst, byte i) {
137*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, i);
138*795d594fSAndroid Build Coastguard Worker         }
139*795d594fSAndroid Build Coastguard Worker 
runTests()140*795d594fSAndroid Build Coastguard Worker         public static void runTests() {
141*795d594fSAndroid Build Coastguard Worker             System.out.print("[ByteArrayTests]: ");
142*795d594fSAndroid Build Coastguard Worker 
143*795d594fSAndroid Build Coastguard Worker             byte[] src15 = createIncrementedArray(15);
144*795d594fSAndroid Build Coastguard Worker             byte[] dst15 = createArrayOfZeroes(15);
145*795d594fSAndroid Build Coastguard Worker             $noinline$test1(src15, dst15);
146*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst15);
147*795d594fSAndroid Build Coastguard Worker 
148*795d594fSAndroid Build Coastguard Worker             byte[] src150 = createIncrementedArray(127);
149*795d594fSAndroid Build Coastguard Worker             byte[] dst150 = createArrayOfZeroes(127);
150*795d594fSAndroid Build Coastguard Worker             $noinline$test2(src150, dst150);
151*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst150);
152*795d594fSAndroid Build Coastguard Worker 
153*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test3());
154*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test4());
155*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test5());
156*795d594fSAndroid Build Coastguard Worker 
157*795d594fSAndroid Build Coastguard Worker             check6($noinline$test6());
158*795d594fSAndroid Build Coastguard Worker             check7($noinline$test7());
159*795d594fSAndroid Build Coastguard Worker             check8($noinline$test8());
160*795d594fSAndroid Build Coastguard Worker 
161*795d594fSAndroid Build Coastguard Worker             for (byte i = 1; i < 127; i++) {
162*795d594fSAndroid Build Coastguard Worker                 byte[] src = createIncrementedArray(i);
163*795d594fSAndroid Build Coastguard Worker                 byte[] dst = createArrayOfZeroes(i);
164*795d594fSAndroid Build Coastguard Worker                 $noinline$test9(src, dst, i);
165*795d594fSAndroid Build Coastguard Worker                 checkIncrementedArray(dst);
166*795d594fSAndroid Build Coastguard Worker             }
167*795d594fSAndroid Build Coastguard Worker             System.out.println("passed");
168*795d594fSAndroid Build Coastguard Worker         }
169*795d594fSAndroid Build Coastguard Worker     }
170*795d594fSAndroid Build Coastguard Worker 
171*795d594fSAndroid Build Coastguard Worker     private static class CharArrayTests {
172*795d594fSAndroid Build Coastguard Worker 
init(char[] arr)173*795d594fSAndroid Build Coastguard Worker         public static char[] init(char[] arr) {
174*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < arr.length; i++) {
175*795d594fSAndroid Build Coastguard Worker                 arr[i] = (char) i;
176*795d594fSAndroid Build Coastguard Worker             }
177*795d594fSAndroid Build Coastguard Worker             return arr;
178*795d594fSAndroid Build Coastguard Worker         }
179*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)180*795d594fSAndroid Build Coastguard Worker         public static void assertEquals(int expected, int actual) {
181*795d594fSAndroid Build Coastguard Worker             if (expected != actual) {
182*795d594fSAndroid Build Coastguard Worker                 throw new Error("Expected " + expected + ", got " + actual);
183*795d594fSAndroid Build Coastguard Worker             }
184*795d594fSAndroid Build Coastguard Worker         }
185*795d594fSAndroid Build Coastguard Worker 
createArrayOfZeroes(int size)186*795d594fSAndroid Build Coastguard Worker         public static char[] createArrayOfZeroes(int size) {
187*795d594fSAndroid Build Coastguard Worker             char[] arr = new char[size];
188*795d594fSAndroid Build Coastguard Worker             return arr;
189*795d594fSAndroid Build Coastguard Worker         }
190*795d594fSAndroid Build Coastguard Worker 
createIncrementedArray(int size)191*795d594fSAndroid Build Coastguard Worker         public static char[] createIncrementedArray(int size) {
192*795d594fSAndroid Build Coastguard Worker             char[] arr = new char[size];
193*795d594fSAndroid Build Coastguard Worker             init(arr);
194*795d594fSAndroid Build Coastguard Worker             return arr;
195*795d594fSAndroid Build Coastguard Worker         }
196*795d594fSAndroid Build Coastguard Worker 
checkIncrementedArray(char[] dst)197*795d594fSAndroid Build Coastguard Worker         public static void checkIncrementedArray(char[] dst) {
198*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < dst.length; i++) {
199*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
200*795d594fSAndroid Build Coastguard Worker             }
201*795d594fSAndroid Build Coastguard Worker         }
202*795d594fSAndroid Build Coastguard Worker 
$noinline$test1(char[] src, char[] dst)203*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test1(char[] src, char[] dst) {
204*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 15);
205*795d594fSAndroid Build Coastguard Worker         }
206*795d594fSAndroid Build Coastguard Worker 
$noinline$test2(char[] src, char[] dst)207*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test2(char[] src, char[] dst) {
208*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 150);
209*795d594fSAndroid Build Coastguard Worker         }
210*795d594fSAndroid Build Coastguard Worker 
$noinline$test3()211*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test3() {
212*795d594fSAndroid Build Coastguard Worker             int size = 15;
213*795d594fSAndroid Build Coastguard Worker             char[] src = new char[size];
214*795d594fSAndroid Build Coastguard Worker             src = init(src);
215*795d594fSAndroid Build Coastguard Worker             char[] dst = new char[size];
216*795d594fSAndroid Build Coastguard Worker 
217*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
218*795d594fSAndroid Build Coastguard Worker             return dst;
219*795d594fSAndroid Build Coastguard Worker         }
220*795d594fSAndroid Build Coastguard Worker 
$noinline$test4()221*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test4() {
222*795d594fSAndroid Build Coastguard Worker             int size = 150;
223*795d594fSAndroid Build Coastguard Worker             char[] src = new char[size];
224*795d594fSAndroid Build Coastguard Worker             src = init(src);
225*795d594fSAndroid Build Coastguard Worker             char[] dst = new char[size];
226*795d594fSAndroid Build Coastguard Worker 
227*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
228*795d594fSAndroid Build Coastguard Worker             return dst;
229*795d594fSAndroid Build Coastguard Worker         }
230*795d594fSAndroid Build Coastguard Worker 
$noinline$test5()231*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test5() {
232*795d594fSAndroid Build Coastguard Worker             char[] src = new char[80];
233*795d594fSAndroid Build Coastguard Worker             src = init(src);
234*795d594fSAndroid Build Coastguard Worker             char[] dst = new char[80];
235*795d594fSAndroid Build Coastguard Worker 
236*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 80);
237*795d594fSAndroid Build Coastguard Worker             return dst;
238*795d594fSAndroid Build Coastguard Worker         }
239*795d594fSAndroid Build Coastguard Worker 
$noinline$test6()240*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test6() {
241*795d594fSAndroid Build Coastguard Worker             char[] src = new char[150];
242*795d594fSAndroid Build Coastguard Worker             src = init(src);
243*795d594fSAndroid Build Coastguard Worker             char[] dst = new char[150];
244*795d594fSAndroid Build Coastguard Worker 
245*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 100, 50);
246*795d594fSAndroid Build Coastguard Worker             return dst;
247*795d594fSAndroid Build Coastguard Worker         }
check6(char[] dst)248*795d594fSAndroid Build Coastguard Worker         public static void check6(char[] dst) {
249*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 100; i++) {
250*795d594fSAndroid Build Coastguard Worker                 assertEquals(0, dst[i]);
251*795d594fSAndroid Build Coastguard Worker             }
252*795d594fSAndroid Build Coastguard Worker             for (int i = 100; i < 150; i++) {
253*795d594fSAndroid Build Coastguard Worker                 assertEquals(i-100, dst[i]);
254*795d594fSAndroid Build Coastguard Worker             }
255*795d594fSAndroid Build Coastguard Worker         }
256*795d594fSAndroid Build Coastguard Worker 
$noinline$test7()257*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test7() {
258*795d594fSAndroid Build Coastguard Worker             char[] src = new char[150];
259*795d594fSAndroid Build Coastguard Worker             src = init(src);
260*795d594fSAndroid Build Coastguard Worker 
261*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, src, 100, 50);
262*795d594fSAndroid Build Coastguard Worker             return src;
263*795d594fSAndroid Build Coastguard Worker         }
check7(char[] dst)264*795d594fSAndroid Build Coastguard Worker         public static void check7(char[] dst) {
265*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 100; i++) {
266*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
267*795d594fSAndroid Build Coastguard Worker             }
268*795d594fSAndroid Build Coastguard Worker             for (int i = 100; i < 150; i++) {
269*795d594fSAndroid Build Coastguard Worker                 assertEquals(i - 100, dst[i]);
270*795d594fSAndroid Build Coastguard Worker             }
271*795d594fSAndroid Build Coastguard Worker         }
272*795d594fSAndroid Build Coastguard Worker 
$noinline$test8()273*795d594fSAndroid Build Coastguard Worker         public static char[] $noinline$test8() {
274*795d594fSAndroid Build Coastguard Worker             char[] src = new char[150];
275*795d594fSAndroid Build Coastguard Worker             src = init(src);
276*795d594fSAndroid Build Coastguard Worker 
277*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 100, src, 0, 50);
278*795d594fSAndroid Build Coastguard Worker             return src;
279*795d594fSAndroid Build Coastguard Worker         }
check8(char[] dst)280*795d594fSAndroid Build Coastguard Worker         public static void check8(char[] dst) {
281*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 50; i++) {
282*795d594fSAndroid Build Coastguard Worker                 assertEquals(100 + i, dst[i]);
283*795d594fSAndroid Build Coastguard Worker             }
284*795d594fSAndroid Build Coastguard Worker             for (int i = 50; i < 150; i++) {
285*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
286*795d594fSAndroid Build Coastguard Worker             }
287*795d594fSAndroid Build Coastguard Worker         }
288*795d594fSAndroid Build Coastguard Worker 
$noinline$test9(char[] src, char[] dst, int i)289*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test9(char[] src, char[] dst, int i) {
290*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, i);
291*795d594fSAndroid Build Coastguard Worker         }
292*795d594fSAndroid Build Coastguard Worker 
runTests()293*795d594fSAndroid Build Coastguard Worker         public static void runTests() {
294*795d594fSAndroid Build Coastguard Worker             System.out.print("[CharArrayTests]: ");
295*795d594fSAndroid Build Coastguard Worker 
296*795d594fSAndroid Build Coastguard Worker             char[] src15 = createIncrementedArray(15);
297*795d594fSAndroid Build Coastguard Worker             char[] dst15 = createArrayOfZeroes(15);
298*795d594fSAndroid Build Coastguard Worker             $noinline$test1(src15, dst15);
299*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst15);
300*795d594fSAndroid Build Coastguard Worker 
301*795d594fSAndroid Build Coastguard Worker             char[] src150 = createIncrementedArray(150);
302*795d594fSAndroid Build Coastguard Worker             char[] dst150 = createArrayOfZeroes(150);
303*795d594fSAndroid Build Coastguard Worker             $noinline$test2(src150, dst150);
304*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst150);
305*795d594fSAndroid Build Coastguard Worker 
306*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test3());
307*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test4());
308*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test5());
309*795d594fSAndroid Build Coastguard Worker 
310*795d594fSAndroid Build Coastguard Worker             check6($noinline$test6());
311*795d594fSAndroid Build Coastguard Worker             check7($noinline$test7());
312*795d594fSAndroid Build Coastguard Worker             check8($noinline$test8());
313*795d594fSAndroid Build Coastguard Worker 
314*795d594fSAndroid Build Coastguard Worker             for (int i = 1; i < 256; i++) {
315*795d594fSAndroid Build Coastguard Worker                 char[] src = createIncrementedArray(i);
316*795d594fSAndroid Build Coastguard Worker                 char[] dst = createArrayOfZeroes(i);
317*795d594fSAndroid Build Coastguard Worker                 $noinline$test9(src, dst, i);
318*795d594fSAndroid Build Coastguard Worker                 checkIncrementedArray(dst);
319*795d594fSAndroid Build Coastguard Worker             }
320*795d594fSAndroid Build Coastguard Worker 
321*795d594fSAndroid Build Coastguard Worker             System.out.println("passed");
322*795d594fSAndroid Build Coastguard Worker         }
323*795d594fSAndroid Build Coastguard Worker     }
324*795d594fSAndroid Build Coastguard Worker 
325*795d594fSAndroid Build Coastguard Worker     private static class IntArrayTests {
init(int[] arr)326*795d594fSAndroid Build Coastguard Worker         public static int[] init(int[] arr) {
327*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < arr.length; i++) {
328*795d594fSAndroid Build Coastguard Worker                 arr[i] = (int) i;
329*795d594fSAndroid Build Coastguard Worker             }
330*795d594fSAndroid Build Coastguard Worker             return arr;
331*795d594fSAndroid Build Coastguard Worker         }
332*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)333*795d594fSAndroid Build Coastguard Worker         public static void assertEquals(int expected, int actual) {
334*795d594fSAndroid Build Coastguard Worker             if (expected != actual) {
335*795d594fSAndroid Build Coastguard Worker                 throw new Error("Expected " + expected + ", got " + actual);
336*795d594fSAndroid Build Coastguard Worker             }
337*795d594fSAndroid Build Coastguard Worker         }
338*795d594fSAndroid Build Coastguard Worker 
createArrayOfZeroes(int size)339*795d594fSAndroid Build Coastguard Worker         public static int[] createArrayOfZeroes(int size) {
340*795d594fSAndroid Build Coastguard Worker             int[] arr = new int[size];
341*795d594fSAndroid Build Coastguard Worker             return arr;
342*795d594fSAndroid Build Coastguard Worker         }
343*795d594fSAndroid Build Coastguard Worker 
createIncrementedArray(int size)344*795d594fSAndroid Build Coastguard Worker         public static int[] createIncrementedArray(int size) {
345*795d594fSAndroid Build Coastguard Worker             int[] arr = new int[size];
346*795d594fSAndroid Build Coastguard Worker             init(arr);
347*795d594fSAndroid Build Coastguard Worker             return arr;
348*795d594fSAndroid Build Coastguard Worker         }
349*795d594fSAndroid Build Coastguard Worker 
checkIncrementedArray(int[] dst)350*795d594fSAndroid Build Coastguard Worker         public static void checkIncrementedArray(int[] dst) {
351*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < dst.length; i++) {
352*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
353*795d594fSAndroid Build Coastguard Worker             }
354*795d594fSAndroid Build Coastguard Worker         }
355*795d594fSAndroid Build Coastguard Worker 
$noinline$test1(int[] src, int[] dst)356*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test1(int[] src, int[] dst) {
357*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 15);
358*795d594fSAndroid Build Coastguard Worker         }
359*795d594fSAndroid Build Coastguard Worker 
$noinline$test2(int[] src, int[] dst)360*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test2(int[] src, int[] dst) {
361*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 150);
362*795d594fSAndroid Build Coastguard Worker         }
363*795d594fSAndroid Build Coastguard Worker 
$noinline$test3()364*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test3() {
365*795d594fSAndroid Build Coastguard Worker             int size = 15;
366*795d594fSAndroid Build Coastguard Worker             int[] src = new int[size];
367*795d594fSAndroid Build Coastguard Worker             src = init(src);
368*795d594fSAndroid Build Coastguard Worker             int[] dst = new int[size];
369*795d594fSAndroid Build Coastguard Worker 
370*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
371*795d594fSAndroid Build Coastguard Worker             return dst;
372*795d594fSAndroid Build Coastguard Worker         }
373*795d594fSAndroid Build Coastguard Worker 
$noinline$test4()374*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test4() {
375*795d594fSAndroid Build Coastguard Worker             int size = 150;
376*795d594fSAndroid Build Coastguard Worker             int[] src = new int[size];
377*795d594fSAndroid Build Coastguard Worker             src = init(src);
378*795d594fSAndroid Build Coastguard Worker             int[] dst = new int[size];
379*795d594fSAndroid Build Coastguard Worker 
380*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, size);
381*795d594fSAndroid Build Coastguard Worker             return dst;
382*795d594fSAndroid Build Coastguard Worker         }
383*795d594fSAndroid Build Coastguard Worker 
$noinline$test5()384*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test5() {
385*795d594fSAndroid Build Coastguard Worker             int[] src = new int[80];
386*795d594fSAndroid Build Coastguard Worker             src = init(src);
387*795d594fSAndroid Build Coastguard Worker             int[] dst = new int[80];
388*795d594fSAndroid Build Coastguard Worker 
389*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, 80);
390*795d594fSAndroid Build Coastguard Worker             return dst;
391*795d594fSAndroid Build Coastguard Worker         }
392*795d594fSAndroid Build Coastguard Worker 
$noinline$test6()393*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test6() {
394*795d594fSAndroid Build Coastguard Worker             int[] src = new int[150];
395*795d594fSAndroid Build Coastguard Worker             src = init(src);
396*795d594fSAndroid Build Coastguard Worker             int[] dst = new int[150];
397*795d594fSAndroid Build Coastguard Worker 
398*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 100, 50);
399*795d594fSAndroid Build Coastguard Worker             return dst;
400*795d594fSAndroid Build Coastguard Worker         }
check6(int[] dst)401*795d594fSAndroid Build Coastguard Worker         public static void check6(int[] dst) {
402*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 100; i++) {
403*795d594fSAndroid Build Coastguard Worker                 assertEquals(0, dst[i]);
404*795d594fSAndroid Build Coastguard Worker             }
405*795d594fSAndroid Build Coastguard Worker             for (int i = 100; i < 150; i++) {
406*795d594fSAndroid Build Coastguard Worker                 assertEquals(i-100, dst[i]);
407*795d594fSAndroid Build Coastguard Worker             }
408*795d594fSAndroid Build Coastguard Worker         }
409*795d594fSAndroid Build Coastguard Worker 
$noinline$test7()410*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test7() {
411*795d594fSAndroid Build Coastguard Worker             int[] src = new int[150];
412*795d594fSAndroid Build Coastguard Worker             src = init(src);
413*795d594fSAndroid Build Coastguard Worker 
414*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, src, 100, 50);
415*795d594fSAndroid Build Coastguard Worker             return src;
416*795d594fSAndroid Build Coastguard Worker         }
check7(int[] dst)417*795d594fSAndroid Build Coastguard Worker         public static void check7(int[] dst) {
418*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 100; i++) {
419*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
420*795d594fSAndroid Build Coastguard Worker             }
421*795d594fSAndroid Build Coastguard Worker             for (int i = 100; i < 150; i++) {
422*795d594fSAndroid Build Coastguard Worker                 assertEquals(i - 100, dst[i]);
423*795d594fSAndroid Build Coastguard Worker             }
424*795d594fSAndroid Build Coastguard Worker         }
425*795d594fSAndroid Build Coastguard Worker 
$noinline$test8()426*795d594fSAndroid Build Coastguard Worker         public static int[] $noinline$test8() {
427*795d594fSAndroid Build Coastguard Worker             int[] src = new int[150];
428*795d594fSAndroid Build Coastguard Worker             src = init(src);
429*795d594fSAndroid Build Coastguard Worker 
430*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 100, src, 0, 50);
431*795d594fSAndroid Build Coastguard Worker             return src;
432*795d594fSAndroid Build Coastguard Worker         }
check8(int[] dst)433*795d594fSAndroid Build Coastguard Worker         public static void check8(int[] dst) {
434*795d594fSAndroid Build Coastguard Worker             for (int i = 0; i < 50; i++) {
435*795d594fSAndroid Build Coastguard Worker                 assertEquals(100 + i, dst[i]);
436*795d594fSAndroid Build Coastguard Worker             }
437*795d594fSAndroid Build Coastguard Worker             for (int i = 50; i < 150; i++) {
438*795d594fSAndroid Build Coastguard Worker                 assertEquals(i, dst[i]);
439*795d594fSAndroid Build Coastguard Worker             }
440*795d594fSAndroid Build Coastguard Worker         }
441*795d594fSAndroid Build Coastguard Worker 
$noinline$test9(int[] src, int[] dst, int i)442*795d594fSAndroid Build Coastguard Worker         public static void $noinline$test9(int[] src, int[] dst, int i) {
443*795d594fSAndroid Build Coastguard Worker             System.arraycopy(src, 0, dst, 0, i);
444*795d594fSAndroid Build Coastguard Worker         }
445*795d594fSAndroid Build Coastguard Worker 
runTests()446*795d594fSAndroid Build Coastguard Worker         public static void runTests() {
447*795d594fSAndroid Build Coastguard Worker             System.out.print("[IntArrayTests]: ");
448*795d594fSAndroid Build Coastguard Worker 
449*795d594fSAndroid Build Coastguard Worker             int[] src15 = createIncrementedArray(15);
450*795d594fSAndroid Build Coastguard Worker             int[] dst15 = createArrayOfZeroes(15);
451*795d594fSAndroid Build Coastguard Worker             $noinline$test1(src15, dst15);
452*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst15);
453*795d594fSAndroid Build Coastguard Worker 
454*795d594fSAndroid Build Coastguard Worker             int[] src150 = createIncrementedArray(150);
455*795d594fSAndroid Build Coastguard Worker             int[] dst150 = createArrayOfZeroes(150);
456*795d594fSAndroid Build Coastguard Worker             $noinline$test2(src150, dst150);
457*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray(dst150);
458*795d594fSAndroid Build Coastguard Worker 
459*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test3());
460*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test4());
461*795d594fSAndroid Build Coastguard Worker             checkIncrementedArray($noinline$test5());
462*795d594fSAndroid Build Coastguard Worker 
463*795d594fSAndroid Build Coastguard Worker             check6($noinline$test6());
464*795d594fSAndroid Build Coastguard Worker             check7($noinline$test7());
465*795d594fSAndroid Build Coastguard Worker             check8($noinline$test8());
466*795d594fSAndroid Build Coastguard Worker 
467*795d594fSAndroid Build Coastguard Worker             for (int i = 1; i < 256; i++) {
468*795d594fSAndroid Build Coastguard Worker                 int[] src = createIncrementedArray(i);
469*795d594fSAndroid Build Coastguard Worker                 int[] dst = createArrayOfZeroes(i);
470*795d594fSAndroid Build Coastguard Worker                 $noinline$test9(src, dst, i);
471*795d594fSAndroid Build Coastguard Worker                 checkIncrementedArray(dst);
472*795d594fSAndroid Build Coastguard Worker             }
473*795d594fSAndroid Build Coastguard Worker 
474*795d594fSAndroid Build Coastguard Worker             System.out.println("passed");
475*795d594fSAndroid Build Coastguard Worker         }
476*795d594fSAndroid Build Coastguard Worker     }
477*795d594fSAndroid Build Coastguard Worker 
main(String[] args)478*795d594fSAndroid Build Coastguard Worker     public static void main(String[] args) {
479*795d594fSAndroid Build Coastguard Worker         ByteArrayTests.runTests();
480*795d594fSAndroid Build Coastguard Worker         CharArrayTests.runTests();
481*795d594fSAndroid Build Coastguard Worker         IntArrayTests.runTests();
482*795d594fSAndroid Build Coastguard Worker     }
483*795d594fSAndroid Build Coastguard Worker }
484