xref: /aosp_15_r20/art/test/011-array-copy/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2007 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 import java.util.Arrays;
18*795d594fSAndroid Build Coastguard Worker 
19*795d594fSAndroid Build Coastguard Worker /**
20*795d594fSAndroid Build Coastguard Worker  * System.arraycopy cases
21*795d594fSAndroid Build Coastguard Worker  */
22*795d594fSAndroid Build Coastguard Worker public class Main {
main(String args[])23*795d594fSAndroid Build Coastguard Worker     public static void main(String args[]) {
24*795d594fSAndroid Build Coastguard Worker         testObjectCopy();
25*795d594fSAndroid Build Coastguard Worker         testOverlappingMoves();
26*795d594fSAndroid Build Coastguard Worker         testFloatAndDouble();
27*795d594fSAndroid Build Coastguard Worker         testArrayCopyChar();
28*795d594fSAndroid Build Coastguard Worker     }
29*795d594fSAndroid Build Coastguard Worker 
testObjectCopy()30*795d594fSAndroid Build Coastguard Worker     public static void testObjectCopy() {
31*795d594fSAndroid Build Coastguard Worker         String[] stringArray = new String[8];
32*795d594fSAndroid Build Coastguard Worker         Object[] objectArray = new Object[8];
33*795d594fSAndroid Build Coastguard Worker 
34*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < stringArray.length; i++)
35*795d594fSAndroid Build Coastguard Worker             stringArray[i] = new String(Integer.toString(i));
36*795d594fSAndroid Build Coastguard Worker 
37*795d594fSAndroid Build Coastguard Worker         System.out.println("string -> object");
38*795d594fSAndroid Build Coastguard Worker         System.arraycopy(stringArray, 0, objectArray, 0, stringArray.length);
39*795d594fSAndroid Build Coastguard Worker         System.out.println("object -> string");
40*795d594fSAndroid Build Coastguard Worker         System.arraycopy(objectArray, 0, stringArray, 0, stringArray.length);
41*795d594fSAndroid Build Coastguard Worker         System.out.println("object -> string (modified)");
42*795d594fSAndroid Build Coastguard Worker         objectArray[4] = new ImplA();
43*795d594fSAndroid Build Coastguard Worker         try {
44*795d594fSAndroid Build Coastguard Worker             System.arraycopy(objectArray, 0, stringArray, 0,stringArray.length);
45*795d594fSAndroid Build Coastguard Worker         }
46*795d594fSAndroid Build Coastguard Worker         catch (ArrayStoreException ase) {
47*795d594fSAndroid Build Coastguard Worker             System.out.println("caught ArrayStoreException (expected)");
48*795d594fSAndroid Build Coastguard Worker         }
49*795d594fSAndroid Build Coastguard Worker     }
50*795d594fSAndroid Build Coastguard Worker 
51*795d594fSAndroid Build Coastguard Worker     static final int ARRAY_SIZE = 8;
52*795d594fSAndroid Build Coastguard Worker 
initByteArray(byte[] array)53*795d594fSAndroid Build Coastguard Worker     static void initByteArray(byte[] array) {
54*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
55*795d594fSAndroid Build Coastguard Worker             array[i] = (byte) i;
56*795d594fSAndroid Build Coastguard Worker         }
57*795d594fSAndroid Build Coastguard Worker     }
initShortArray(short[] array)58*795d594fSAndroid Build Coastguard Worker     static void initShortArray(short[] array) {
59*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
60*795d594fSAndroid Build Coastguard Worker             array[i] = (short) i;
61*795d594fSAndroid Build Coastguard Worker         }
62*795d594fSAndroid Build Coastguard Worker     }
initIntArray(int[] array)63*795d594fSAndroid Build Coastguard Worker     static void initIntArray(int[] array) {
64*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
65*795d594fSAndroid Build Coastguard Worker             array[i] = (int) i;
66*795d594fSAndroid Build Coastguard Worker         }
67*795d594fSAndroid Build Coastguard Worker     }
initLongArray(long[] array)68*795d594fSAndroid Build Coastguard Worker     static void initLongArray(long[] array) {
69*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
70*795d594fSAndroid Build Coastguard Worker             array[i] = (long) i;
71*795d594fSAndroid Build Coastguard Worker         }
72*795d594fSAndroid Build Coastguard Worker     }
initCharArray(char[] array)73*795d594fSAndroid Build Coastguard Worker     static void initCharArray(char[] array) {
74*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
75*795d594fSAndroid Build Coastguard Worker             array[i] = (char) i;
76*795d594fSAndroid Build Coastguard Worker         }
77*795d594fSAndroid Build Coastguard Worker     }
78*795d594fSAndroid Build Coastguard Worker 
79*795d594fSAndroid Build Coastguard Worker     /*
80*795d594fSAndroid Build Coastguard Worker      * Perform an array copy operation on primitive arrays with different
81*795d594fSAndroid Build Coastguard Worker      * element widths.
82*795d594fSAndroid Build Coastguard Worker      */
makeCopies(int srcPos, int dstPos, int length)83*795d594fSAndroid Build Coastguard Worker     static void makeCopies(int srcPos, int dstPos, int length) {
84*795d594fSAndroid Build Coastguard Worker         byte[] byteArray = new byte[ARRAY_SIZE];
85*795d594fSAndroid Build Coastguard Worker         short[] shortArray = new short[ARRAY_SIZE];
86*795d594fSAndroid Build Coastguard Worker         int[] intArray = new int[ARRAY_SIZE];
87*795d594fSAndroid Build Coastguard Worker         long[] longArray = new long[ARRAY_SIZE];
88*795d594fSAndroid Build Coastguard Worker         char[] charArray = new char[ARRAY_SIZE];
89*795d594fSAndroid Build Coastguard Worker 
90*795d594fSAndroid Build Coastguard Worker         initByteArray(byteArray);
91*795d594fSAndroid Build Coastguard Worker         initShortArray(shortArray);
92*795d594fSAndroid Build Coastguard Worker         initIntArray(intArray);
93*795d594fSAndroid Build Coastguard Worker         initLongArray(longArray);
94*795d594fSAndroid Build Coastguard Worker         initCharArray(charArray);
95*795d594fSAndroid Build Coastguard Worker 
96*795d594fSAndroid Build Coastguard Worker         System.arraycopy(byteArray, srcPos, byteArray, dstPos, length);
97*795d594fSAndroid Build Coastguard Worker         System.arraycopy(shortArray, srcPos, shortArray, dstPos, length);
98*795d594fSAndroid Build Coastguard Worker         System.arraycopy(intArray, srcPos, intArray, dstPos, length);
99*795d594fSAndroid Build Coastguard Worker         System.arraycopy(longArray, srcPos, longArray, dstPos, length);
100*795d594fSAndroid Build Coastguard Worker         System.arraycopy(charArray, srcPos, charArray, dstPos, length);
101*795d594fSAndroid Build Coastguard Worker 
102*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < ARRAY_SIZE; i++) {
103*795d594fSAndroid Build Coastguard Worker             if (intArray[i] != byteArray[i]) {
104*795d594fSAndroid Build Coastguard Worker                 System.out.println("mismatch int vs byte at " + i + " : " +
105*795d594fSAndroid Build Coastguard Worker                     Arrays.toString(byteArray));
106*795d594fSAndroid Build Coastguard Worker                 break;
107*795d594fSAndroid Build Coastguard Worker             } else if (intArray[i] != shortArray[i]) {
108*795d594fSAndroid Build Coastguard Worker                 System.out.println("mismatch int vs short at " + i + " : " +
109*795d594fSAndroid Build Coastguard Worker                     Arrays.toString(shortArray));
110*795d594fSAndroid Build Coastguard Worker                 break;
111*795d594fSAndroid Build Coastguard Worker             } else if (intArray[i] != longArray[i]) {
112*795d594fSAndroid Build Coastguard Worker                 System.out.println("mismatch int vs long at " + i + " : " +
113*795d594fSAndroid Build Coastguard Worker                     Arrays.toString(longArray));
114*795d594fSAndroid Build Coastguard Worker                 break;
115*795d594fSAndroid Build Coastguard Worker             } else if (intArray[i] != charArray[i]) {
116*795d594fSAndroid Build Coastguard Worker                 System.out.println("mismatch int vs char at " + i + " : " +
117*795d594fSAndroid Build Coastguard Worker                     Arrays.toString(charArray));
118*795d594fSAndroid Build Coastguard Worker                 break;
119*795d594fSAndroid Build Coastguard Worker             }
120*795d594fSAndroid Build Coastguard Worker         }
121*795d594fSAndroid Build Coastguard Worker 
122*795d594fSAndroid Build Coastguard Worker         System.out.println("copy: " + srcPos + "," + dstPos + "," + length +
123*795d594fSAndroid Build Coastguard Worker             ": " + Arrays.toString(intArray));
124*795d594fSAndroid Build Coastguard Worker     }
125*795d594fSAndroid Build Coastguard Worker 
testOverlappingMoves()126*795d594fSAndroid Build Coastguard Worker     public static void testOverlappingMoves() {
127*795d594fSAndroid Build Coastguard Worker         /* do nothing */
128*795d594fSAndroid Build Coastguard Worker         makeCopies(0, 0, 0);
129*795d594fSAndroid Build Coastguard Worker 
130*795d594fSAndroid Build Coastguard Worker         /* do more nothing */
131*795d594fSAndroid Build Coastguard Worker         makeCopies(0, 0, ARRAY_SIZE);
132*795d594fSAndroid Build Coastguard Worker 
133*795d594fSAndroid Build Coastguard Worker         /* copy forward, even alignment */
134*795d594fSAndroid Build Coastguard Worker         makeCopies(0, 2, 4);
135*795d594fSAndroid Build Coastguard Worker 
136*795d594fSAndroid Build Coastguard Worker         /* copy backward, even alignment */
137*795d594fSAndroid Build Coastguard Worker         makeCopies(2, 0, 4);
138*795d594fSAndroid Build Coastguard Worker 
139*795d594fSAndroid Build Coastguard Worker         /* copy forward, odd alignment */
140*795d594fSAndroid Build Coastguard Worker         makeCopies(1, 3, 4);
141*795d594fSAndroid Build Coastguard Worker 
142*795d594fSAndroid Build Coastguard Worker         /* copy backward, odd alignment */
143*795d594fSAndroid Build Coastguard Worker         makeCopies(3, 1, 4);
144*795d594fSAndroid Build Coastguard Worker 
145*795d594fSAndroid Build Coastguard Worker         /* copy backward, odd length */
146*795d594fSAndroid Build Coastguard Worker         makeCopies(3, 1, 5);
147*795d594fSAndroid Build Coastguard Worker 
148*795d594fSAndroid Build Coastguard Worker         /* copy forward, odd length */
149*795d594fSAndroid Build Coastguard Worker         makeCopies(1, 3, 5);
150*795d594fSAndroid Build Coastguard Worker 
151*795d594fSAndroid Build Coastguard Worker         /* copy forward, mixed alignment */
152*795d594fSAndroid Build Coastguard Worker         makeCopies(0, 3, 5);
153*795d594fSAndroid Build Coastguard Worker 
154*795d594fSAndroid Build Coastguard Worker         /* copy backward, mixed alignment */
155*795d594fSAndroid Build Coastguard Worker         makeCopies(3, 0, 5);
156*795d594fSAndroid Build Coastguard Worker 
157*795d594fSAndroid Build Coastguard Worker         /* copy forward, mixed alignment, trivial length */
158*795d594fSAndroid Build Coastguard Worker         makeCopies(0, 5, 1);
159*795d594fSAndroid Build Coastguard Worker     }
160*795d594fSAndroid Build Coastguard Worker 
testFloatAndDouble()161*795d594fSAndroid Build Coastguard Worker     private static void testFloatAndDouble() {
162*795d594fSAndroid Build Coastguard Worker         // Float & double copies have the same implementation as int & long. However, there are
163*795d594fSAndroid Build Coastguard Worker         // protective DCHECKs in the code (there is nothing unifying like ByteSizedArray or
164*795d594fSAndroid Build Coastguard Worker         // ShortSizedArray). Just test that we don't fail those checks.
165*795d594fSAndroid Build Coastguard Worker         final int len = 10;
166*795d594fSAndroid Build Coastguard Worker         System.arraycopy(new float[len], 0, new float[len], 0, len);
167*795d594fSAndroid Build Coastguard Worker         System.arraycopy(new double[len], 0, new double[len], 0, len);
168*795d594fSAndroid Build Coastguard Worker     }
169*795d594fSAndroid Build Coastguard Worker 
170*795d594fSAndroid Build Coastguard Worker     static final char SRC_INIT_CHAR = '1';
171*795d594fSAndroid Build Coastguard Worker     static final char DST_CHAR = '0';
172*795d594fSAndroid Build Coastguard Worker 
173*795d594fSAndroid Build Coastguard Worker     /* Return a char array of the specified length.
174*795d594fSAndroid Build Coastguard Worker      * If do_increment is true, populate the array with (numerically) ascending
175*795d594fSAndroid Build Coastguard Worker      * characters starting from initChar (note: char wraps-around on overflow).
176*795d594fSAndroid Build Coastguard Worker      * If do_increment is false, populate all array elements with initChar.
177*795d594fSAndroid Build Coastguard Worker      */
createCharArray(int length, char initChar, boolean do_increment)178*795d594fSAndroid Build Coastguard Worker     public static char[] createCharArray(int length, char initChar, boolean do_increment) {
179*795d594fSAndroid Build Coastguard Worker         char[] charArr = new char[length];
180*795d594fSAndroid Build Coastguard Worker         char nextChar = initChar;
181*795d594fSAndroid Build Coastguard Worker 
182*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < length; ++i) {
183*795d594fSAndroid Build Coastguard Worker             charArr[i] = nextChar;
184*795d594fSAndroid Build Coastguard Worker             if (do_increment) {
185*795d594fSAndroid Build Coastguard Worker                 nextChar++;
186*795d594fSAndroid Build Coastguard Worker             }
187*795d594fSAndroid Build Coastguard Worker         }
188*795d594fSAndroid Build Coastguard Worker         return charArr;
189*795d594fSAndroid Build Coastguard Worker     }
190*795d594fSAndroid Build Coastguard Worker 
verifyCorrectness(char[] src, char[] dst, int copiedPrefixLength)191*795d594fSAndroid Build Coastguard Worker     public static boolean verifyCorrectness(char[] src, char[] dst, int copiedPrefixLength) {
192*795d594fSAndroid Build Coastguard Worker         for (int i = 0; i < dst.length; ++i) {
193*795d594fSAndroid Build Coastguard Worker             if (i < copiedPrefixLength) {
194*795d594fSAndroid Build Coastguard Worker                 // Check that we copied source array.
195*795d594fSAndroid Build Coastguard Worker                 if (dst[i] != src[i]) {
196*795d594fSAndroid Build Coastguard Worker                     return false;
197*795d594fSAndroid Build Coastguard Worker                 }
198*795d594fSAndroid Build Coastguard Worker             } else {
199*795d594fSAndroid Build Coastguard Worker                 // Check that we didn't write more chars than necessary.
200*795d594fSAndroid Build Coastguard Worker                 if (dst[i] != DST_CHAR) {
201*795d594fSAndroid Build Coastguard Worker                     return false;
202*795d594fSAndroid Build Coastguard Worker                 }
203*795d594fSAndroid Build Coastguard Worker             }
204*795d594fSAndroid Build Coastguard Worker         }
205*795d594fSAndroid Build Coastguard Worker         return true;
206*795d594fSAndroid Build Coastguard Worker     }
207*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase2()208*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase2() {
209*795d594fSAndroid Build Coastguard Worker         final int copy_length = 2;
210*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
211*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
212*795d594fSAndroid Build Coastguard Worker 
213*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
214*795d594fSAndroid Build Coastguard Worker 
215*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
216*795d594fSAndroid Build Coastguard Worker         if (!passed) {
217*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 2 failed");
218*795d594fSAndroid Build Coastguard Worker         } else {
219*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 2 passed");
220*795d594fSAndroid Build Coastguard Worker         }
221*795d594fSAndroid Build Coastguard Worker     }
222*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase3()223*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase3() {
224*795d594fSAndroid Build Coastguard Worker         final int copy_length = 3;
225*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
226*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
227*795d594fSAndroid Build Coastguard Worker 
228*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
229*795d594fSAndroid Build Coastguard Worker 
230*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
231*795d594fSAndroid Build Coastguard Worker         if (!passed) {
232*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 3 failed");
233*795d594fSAndroid Build Coastguard Worker         } else {
234*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 3 passed");
235*795d594fSAndroid Build Coastguard Worker         }
236*795d594fSAndroid Build Coastguard Worker     }
237*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase5()238*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase5() {
239*795d594fSAndroid Build Coastguard Worker         final int copy_length = 5;
240*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
241*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
242*795d594fSAndroid Build Coastguard Worker 
243*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
244*795d594fSAndroid Build Coastguard Worker 
245*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
246*795d594fSAndroid Build Coastguard Worker         if (!passed) {
247*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 5 failed");
248*795d594fSAndroid Build Coastguard Worker         } else {
249*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 5 passed");
250*795d594fSAndroid Build Coastguard Worker         }
251*795d594fSAndroid Build Coastguard Worker     }
252*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase7()253*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase7() {
254*795d594fSAndroid Build Coastguard Worker         final int copy_length = 7;
255*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
256*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
257*795d594fSAndroid Build Coastguard Worker 
258*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
259*795d594fSAndroid Build Coastguard Worker 
260*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
261*795d594fSAndroid Build Coastguard Worker         if (!passed) {
262*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 7 failed");
263*795d594fSAndroid Build Coastguard Worker         } else {
264*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 7 passed");
265*795d594fSAndroid Build Coastguard Worker         }
266*795d594fSAndroid Build Coastguard Worker     }
267*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase8()268*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase8() {
269*795d594fSAndroid Build Coastguard Worker         final int copy_length = 8;
270*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
271*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
272*795d594fSAndroid Build Coastguard Worker 
273*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
274*795d594fSAndroid Build Coastguard Worker 
275*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
276*795d594fSAndroid Build Coastguard Worker         if (!passed) {
277*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 8 failed");
278*795d594fSAndroid Build Coastguard Worker         } else {
279*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 8 passed");
280*795d594fSAndroid Build Coastguard Worker         }
281*795d594fSAndroid Build Coastguard Worker     }
282*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase9()283*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase9() {
284*795d594fSAndroid Build Coastguard Worker         final int copy_length = 9;
285*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
286*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
287*795d594fSAndroid Build Coastguard Worker 
288*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
289*795d594fSAndroid Build Coastguard Worker 
290*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
291*795d594fSAndroid Build Coastguard Worker         if (!passed) {
292*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 9 failed");
293*795d594fSAndroid Build Coastguard Worker         } else {
294*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 9 passed");
295*795d594fSAndroid Build Coastguard Worker         }
296*795d594fSAndroid Build Coastguard Worker     }
297*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharConstCase11()298*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharConstCase11() {
299*795d594fSAndroid Build Coastguard Worker         final int copy_length = 11;
300*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
301*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
302*795d594fSAndroid Build Coastguard Worker 
303*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
304*795d594fSAndroid Build Coastguard Worker 
305*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
306*795d594fSAndroid Build Coastguard Worker         if (!passed) {
307*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 11 failed");
308*795d594fSAndroid Build Coastguard Worker         } else {
309*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) const case 11 passed");
310*795d594fSAndroid Build Coastguard Worker         }
311*795d594fSAndroid Build Coastguard Worker     }
312*795d594fSAndroid Build Coastguard Worker 
testArrayCopyCharCase(int copy_length)313*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyCharCase(int copy_length) {
314*795d594fSAndroid Build Coastguard Worker         char[] src = createCharArray(2 * copy_length, SRC_INIT_CHAR, true);
315*795d594fSAndroid Build Coastguard Worker         char[] dst = createCharArray(4 * copy_length, DST_CHAR, false);
316*795d594fSAndroid Build Coastguard Worker 
317*795d594fSAndroid Build Coastguard Worker         System.arraycopy(src, 0, dst, 0, copy_length);
318*795d594fSAndroid Build Coastguard Worker 
319*795d594fSAndroid Build Coastguard Worker         boolean passed = verifyCorrectness(src, dst, copy_length);
320*795d594fSAndroid Build Coastguard Worker         if (!passed) {
321*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) " + copy_length + " failed");
322*795d594fSAndroid Build Coastguard Worker         } else {
323*795d594fSAndroid Build Coastguard Worker             System.out.println("arraycopy(char) " + copy_length + " passed");
324*795d594fSAndroid Build Coastguard Worker         }
325*795d594fSAndroid Build Coastguard Worker     }
326*795d594fSAndroid Build Coastguard Worker 
testArrayCopyChar()327*795d594fSAndroid Build Coastguard Worker     public static void testArrayCopyChar() {
328*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase2();
329*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase3();
330*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase5();
331*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase7();
332*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase8();
333*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase9();
334*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharConstCase11();
335*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(0);
336*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(1);
337*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(3);
338*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(4);
339*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(5);
340*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(7);
341*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(15);
342*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(16);
343*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(17);
344*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(31);
345*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(32);
346*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(33);
347*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(63);
348*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(64);
349*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(65);
350*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(255);
351*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(513);
352*795d594fSAndroid Build Coastguard Worker         testArrayCopyCharCase(1025);
353*795d594fSAndroid Build Coastguard Worker     }
354*795d594fSAndroid Build Coastguard Worker 
355*795d594fSAndroid Build Coastguard Worker }
356