xref: /aosp_15_r20/external/fbjni/test/PrimitiveArrayTests.java (revision 65c59e023c5336bbd4a23be7af78407e3d80e7e7)
1*65c59e02SInna Palant /*
2*65c59e02SInna Palant  * Copyright (c) Facebook, Inc. and its affiliates.
3*65c59e02SInna Palant  *
4*65c59e02SInna Palant  * Licensed under the Apache License, Version 2.0 (the "License");
5*65c59e02SInna Palant  * you may not use this file except in compliance with the License.
6*65c59e02SInna Palant  * You may obtain a copy of the License at
7*65c59e02SInna Palant  *
8*65c59e02SInna Palant  *     http://www.apache.org/licenses/LICENSE-2.0
9*65c59e02SInna Palant  *
10*65c59e02SInna Palant  * Unless required by applicable law or agreed to in writing, software
11*65c59e02SInna Palant  * distributed under the License is distributed on an "AS IS" BASIS,
12*65c59e02SInna Palant  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*65c59e02SInna Palant  * See the License for the specific language governing permissions and
14*65c59e02SInna Palant  * limitations under the License.
15*65c59e02SInna Palant  */
16*65c59e02SInna Palant 
17*65c59e02SInna Palant package com.facebook.jni;
18*65c59e02SInna Palant 
19*65c59e02SInna Palant import static org.assertj.core.api.Assertions.assertThat;
20*65c59e02SInna Palant import static org.assertj.core.api.Assertions.offset;
21*65c59e02SInna Palant import static org.junit.Assume.assumeFalse;
22*65c59e02SInna Palant import static org.junit.Assume.assumeTrue;
23*65c59e02SInna Palant 
24*65c59e02SInna Palant import org.junit.Ignore;
25*65c59e02SInna Palant import org.junit.Test;
26*65c59e02SInna Palant 
27*65c59e02SInna Palant public class PrimitiveArrayTests extends BaseFBJniTests {
28*65c59e02SInna Palant 
29*65c59e02SInna Palant   private static final int MAGIC = 42;
30*65c59e02SInna Palant 
31*65c59e02SInna Palant   @Test
testMakeArrays()32*65c59e02SInna Palant   public void testMakeArrays() {
33*65c59e02SInna Palant     assertThat(nativeTestMakeBooleanArray(MAGIC).length).isEqualTo(MAGIC);
34*65c59e02SInna Palant     assertThat(nativeTestMakeByteArray(MAGIC).length).isEqualTo(MAGIC);
35*65c59e02SInna Palant     assertThat(nativeTestMakeCharArray(MAGIC).length).isEqualTo(MAGIC);
36*65c59e02SInna Palant     assertThat(nativeTestMakeShortArray(MAGIC).length).isEqualTo(MAGIC);
37*65c59e02SInna Palant     assertThat(nativeTestMakeIntArray(MAGIC).length).isEqualTo(MAGIC);
38*65c59e02SInna Palant     assertThat(nativeTestMakeLongArray(MAGIC).length).isEqualTo(MAGIC);
39*65c59e02SInna Palant     assertThat(nativeTestMakeFloatArray(MAGIC).length).isEqualTo(MAGIC);
40*65c59e02SInna Palant     assertThat(nativeTestMakeDoubleArray(MAGIC).length).isEqualTo(MAGIC);
41*65c59e02SInna Palant   }
42*65c59e02SInna Palant 
nativeTestMakeBooleanArray(int size)43*65c59e02SInna Palant   private static native boolean[] nativeTestMakeBooleanArray(int size);
44*65c59e02SInna Palant 
nativeTestMakeByteArray(int size)45*65c59e02SInna Palant   private static native byte[] nativeTestMakeByteArray(int size);
46*65c59e02SInna Palant 
nativeTestMakeCharArray(int size)47*65c59e02SInna Palant   private static native char[] nativeTestMakeCharArray(int size);
48*65c59e02SInna Palant 
nativeTestMakeShortArray(int size)49*65c59e02SInna Palant   private static native short[] nativeTestMakeShortArray(int size);
50*65c59e02SInna Palant 
nativeTestMakeIntArray(int size)51*65c59e02SInna Palant   private static native int[] nativeTestMakeIntArray(int size);
52*65c59e02SInna Palant 
nativeTestMakeLongArray(int size)53*65c59e02SInna Palant   private static native long[] nativeTestMakeLongArray(int size);
54*65c59e02SInna Palant 
nativeTestMakeFloatArray(int size)55*65c59e02SInna Palant   private static native float[] nativeTestMakeFloatArray(int size);
56*65c59e02SInna Palant 
nativeTestMakeDoubleArray(int size)57*65c59e02SInna Palant   private static native double[] nativeTestMakeDoubleArray(int size);
58*65c59e02SInna Palant 
59*65c59e02SInna Palant   @Test
testGetSetBooleanArray()60*65c59e02SInna Palant   public void testGetSetBooleanArray() {
61*65c59e02SInna Palant     boolean[] array = {false, true};
62*65c59e02SInna Palant 
63*65c59e02SInna Palant     assertThat(nativeTestGetSetBooleanArray(array)).isTrue();
64*65c59e02SInna Palant     assertThat(array).isEqualTo(new boolean[] {true, false});
65*65c59e02SInna Palant   }
66*65c59e02SInna Palant 
nativeTestGetSetBooleanArray(boolean[] array)67*65c59e02SInna Palant   private static native boolean nativeTestGetSetBooleanArray(boolean[] array);
68*65c59e02SInna Palant 
69*65c59e02SInna Palant   @Test
testPinBooleanArray()70*65c59e02SInna Palant   public void testPinBooleanArray() {
71*65c59e02SInna Palant     boolean[] array = {false, true};
72*65c59e02SInna Palant 
73*65c59e02SInna Palant     assertThat(nativeTestPinBooleanArray(array)).isTrue();
74*65c59e02SInna Palant     assertThat(array).isEqualTo(new boolean[] {true, false});
75*65c59e02SInna Palant   }
76*65c59e02SInna Palant 
nativeTestPinBooleanArray(boolean[] array)77*65c59e02SInna Palant   private static native boolean nativeTestPinBooleanArray(boolean[] array);
78*65c59e02SInna Palant 
79*65c59e02SInna Palant   @Test
testGetSetByteArray()80*65c59e02SInna Palant   public void testGetSetByteArray() {
81*65c59e02SInna Palant     byte[] array = new byte[MAGIC];
82*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
83*65c59e02SInna Palant       array[i] = (byte) i;
84*65c59e02SInna Palant     }
85*65c59e02SInna Palant 
86*65c59e02SInna Palant     assertThat(nativeTestGetSetByteArray(array)).isTrue();
87*65c59e02SInna Palant 
88*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
89*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((byte) (2 * i));
90*65c59e02SInna Palant     }
91*65c59e02SInna Palant   }
92*65c59e02SInna Palant 
nativeTestGetSetByteArray(byte[] array)93*65c59e02SInna Palant   private static native boolean nativeTestGetSetByteArray(byte[] array);
94*65c59e02SInna Palant 
95*65c59e02SInna Palant   @Test
testGetSetCharArray()96*65c59e02SInna Palant   public void testGetSetCharArray() {
97*65c59e02SInna Palant     char[] array = new char[MAGIC];
98*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
99*65c59e02SInna Palant       array[i] = (char) i;
100*65c59e02SInna Palant     }
101*65c59e02SInna Palant 
102*65c59e02SInna Palant     assertThat(nativeTestGetSetCharArray(array)).isTrue();
103*65c59e02SInna Palant 
104*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
105*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((char) (2 * i));
106*65c59e02SInna Palant     }
107*65c59e02SInna Palant   }
108*65c59e02SInna Palant 
nativeTestGetSetCharArray(char[] array)109*65c59e02SInna Palant   private static native boolean nativeTestGetSetCharArray(char[] array);
110*65c59e02SInna Palant 
111*65c59e02SInna Palant   @Test
testGetSetShortArray()112*65c59e02SInna Palant   public void testGetSetShortArray() {
113*65c59e02SInna Palant     short[] array = new short[MAGIC];
114*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
115*65c59e02SInna Palant       array[i] = (short) i;
116*65c59e02SInna Palant     }
117*65c59e02SInna Palant 
118*65c59e02SInna Palant     assertThat(nativeTestGetSetShortArray(array)).isTrue();
119*65c59e02SInna Palant 
120*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
121*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((short) (2 * i));
122*65c59e02SInna Palant     }
123*65c59e02SInna Palant   }
124*65c59e02SInna Palant 
nativeTestGetSetShortArray(short[] array)125*65c59e02SInna Palant   private static native boolean nativeTestGetSetShortArray(short[] array);
126*65c59e02SInna Palant 
127*65c59e02SInna Palant   @Test
testGetSetIntArray()128*65c59e02SInna Palant   public void testGetSetIntArray() {
129*65c59e02SInna Palant     int[] intArray = new int[MAGIC];
130*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
131*65c59e02SInna Palant       intArray[i] = i;
132*65c59e02SInna Palant     }
133*65c59e02SInna Palant 
134*65c59e02SInna Palant     assertThat(nativeTestGetSetIntArray(intArray)).isTrue();
135*65c59e02SInna Palant 
136*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
137*65c59e02SInna Palant       assertThat(intArray[i]).isEqualTo(2 * i);
138*65c59e02SInna Palant     }
139*65c59e02SInna Palant   }
140*65c59e02SInna Palant 
nativeTestGetSetIntArray(int[] array)141*65c59e02SInna Palant   private static native boolean nativeTestGetSetIntArray(int[] array);
142*65c59e02SInna Palant 
143*65c59e02SInna Palant   @Test
testGetSetLongArray()144*65c59e02SInna Palant   public void testGetSetLongArray() {
145*65c59e02SInna Palant     long[] longArray = new long[MAGIC];
146*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
147*65c59e02SInna Palant       longArray[i] = (long) i;
148*65c59e02SInna Palant     }
149*65c59e02SInna Palant 
150*65c59e02SInna Palant     assertThat(nativeTestGetSetLongArray(longArray)).isTrue();
151*65c59e02SInna Palant 
152*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
153*65c59e02SInna Palant       assertThat(longArray[i]).isEqualTo(2 * i);
154*65c59e02SInna Palant     }
155*65c59e02SInna Palant   }
156*65c59e02SInna Palant 
nativeTestGetSetLongArray(long[] array)157*65c59e02SInna Palant   private static native boolean nativeTestGetSetLongArray(long[] array);
158*65c59e02SInna Palant 
159*65c59e02SInna Palant   @Test
testGetSetFloatArray()160*65c59e02SInna Palant   public void testGetSetFloatArray() {
161*65c59e02SInna Palant     float[] floatArray = new float[MAGIC];
162*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
163*65c59e02SInna Palant       floatArray[i] = i;
164*65c59e02SInna Palant     }
165*65c59e02SInna Palant 
166*65c59e02SInna Palant     assertThat(nativeTestGetSetFloatArray(floatArray)).isTrue();
167*65c59e02SInna Palant 
168*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
169*65c59e02SInna Palant       assertThat(floatArray[i]).isEqualTo(2 * i, offset(1e-3f));
170*65c59e02SInna Palant     }
171*65c59e02SInna Palant   }
172*65c59e02SInna Palant 
nativeTestGetSetFloatArray(float[] array)173*65c59e02SInna Palant   private static native boolean nativeTestGetSetFloatArray(float[] array);
174*65c59e02SInna Palant 
175*65c59e02SInna Palant   @Test
testGetSetDoubleArray()176*65c59e02SInna Palant   public void testGetSetDoubleArray() {
177*65c59e02SInna Palant     double[] doubleArray = new double[MAGIC];
178*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
179*65c59e02SInna Palant       doubleArray[i] = i;
180*65c59e02SInna Palant     }
181*65c59e02SInna Palant 
182*65c59e02SInna Palant     assertThat(nativeTestGetSetDoubleArray(doubleArray)).isTrue();
183*65c59e02SInna Palant 
184*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
185*65c59e02SInna Palant       assertThat(doubleArray[i]).isEqualTo(2 * i, offset(1e-3));
186*65c59e02SInna Palant     }
187*65c59e02SInna Palant   }
188*65c59e02SInna Palant 
nativeTestGetSetDoubleArray(double[] array)189*65c59e02SInna Palant   private static native boolean nativeTestGetSetDoubleArray(double[] array);
190*65c59e02SInna Palant 
191*65c59e02SInna Palant   @Test
testPinByteArray()192*65c59e02SInna Palant   public void testPinByteArray() {
193*65c59e02SInna Palant     byte[] array = new byte[MAGIC];
194*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
195*65c59e02SInna Palant       array[i] = (byte) i;
196*65c59e02SInna Palant     }
197*65c59e02SInna Palant 
198*65c59e02SInna Palant     assertThat(nativeTestPinByteArray(array)).isTrue();
199*65c59e02SInna Palant 
200*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
201*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((byte) (2 * i));
202*65c59e02SInna Palant     }
203*65c59e02SInna Palant   }
204*65c59e02SInna Palant 
nativeTestPinByteArray(byte[] array)205*65c59e02SInna Palant   private static native boolean nativeTestPinByteArray(byte[] array);
206*65c59e02SInna Palant 
207*65c59e02SInna Palant   @Test
testPinCharArray()208*65c59e02SInna Palant   public void testPinCharArray() {
209*65c59e02SInna Palant     char[] array = new char[MAGIC];
210*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
211*65c59e02SInna Palant       array[i] = (char) i;
212*65c59e02SInna Palant     }
213*65c59e02SInna Palant 
214*65c59e02SInna Palant     assertThat(nativeTestPinCharArray(array)).isTrue();
215*65c59e02SInna Palant 
216*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
217*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((char) (2 * i));
218*65c59e02SInna Palant     }
219*65c59e02SInna Palant   }
220*65c59e02SInna Palant 
nativeTestPinCharArray(char[] array)221*65c59e02SInna Palant   private static native boolean nativeTestPinCharArray(char[] array);
222*65c59e02SInna Palant 
223*65c59e02SInna Palant   @Test
testPinShortArray()224*65c59e02SInna Palant   public void testPinShortArray() {
225*65c59e02SInna Palant     short[] array = new short[MAGIC];
226*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
227*65c59e02SInna Palant       array[i] = (short) i;
228*65c59e02SInna Palant     }
229*65c59e02SInna Palant 
230*65c59e02SInna Palant     assertThat(nativeTestPinShortArray(array)).isTrue();
231*65c59e02SInna Palant 
232*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
233*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((short) (2 * i));
234*65c59e02SInna Palant     }
235*65c59e02SInna Palant   }
236*65c59e02SInna Palant 
nativeTestPinShortArray(short[] array)237*65c59e02SInna Palant   private static native boolean nativeTestPinShortArray(short[] array);
238*65c59e02SInna Palant 
239*65c59e02SInna Palant   @Test
testPinIntArray()240*65c59e02SInna Palant   public void testPinIntArray() {
241*65c59e02SInna Palant     int[] intArray = new int[MAGIC];
242*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
243*65c59e02SInna Palant       intArray[i] = i;
244*65c59e02SInna Palant     }
245*65c59e02SInna Palant 
246*65c59e02SInna Palant     assertThat(nativeTestPinIntArray(intArray)).isTrue();
247*65c59e02SInna Palant 
248*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
249*65c59e02SInna Palant       assertThat(intArray[i]).isEqualTo(2 * i);
250*65c59e02SInna Palant     }
251*65c59e02SInna Palant   }
252*65c59e02SInna Palant 
nativeTestPinIntArray(int[] array)253*65c59e02SInna Palant   private static native boolean nativeTestPinIntArray(int[] array);
254*65c59e02SInna Palant 
255*65c59e02SInna Palant   @Test
testPinLongArray()256*65c59e02SInna Palant   public void testPinLongArray() {
257*65c59e02SInna Palant     long[] longArray = new long[MAGIC];
258*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
259*65c59e02SInna Palant       longArray[i] = (long) i;
260*65c59e02SInna Palant     }
261*65c59e02SInna Palant 
262*65c59e02SInna Palant     assertThat(nativeTestPinLongArray(longArray)).isTrue();
263*65c59e02SInna Palant 
264*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
265*65c59e02SInna Palant       assertThat(longArray[i]).isEqualTo(2 * i);
266*65c59e02SInna Palant     }
267*65c59e02SInna Palant   }
268*65c59e02SInna Palant 
nativeTestPinLongArray(long[] array)269*65c59e02SInna Palant   private static native boolean nativeTestPinLongArray(long[] array);
270*65c59e02SInna Palant 
271*65c59e02SInna Palant   @Test
testPinFloatArray()272*65c59e02SInna Palant   public void testPinFloatArray() {
273*65c59e02SInna Palant     float[] floatArray = new float[MAGIC];
274*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
275*65c59e02SInna Palant       floatArray[i] = (long) i;
276*65c59e02SInna Palant     }
277*65c59e02SInna Palant 
278*65c59e02SInna Palant     assertThat(nativeTestPinFloatArray(floatArray)).isTrue();
279*65c59e02SInna Palant 
280*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
281*65c59e02SInna Palant       assertThat(floatArray[i]).isEqualTo(2 * i, offset(1e-3f));
282*65c59e02SInna Palant     }
283*65c59e02SInna Palant   }
284*65c59e02SInna Palant 
nativeTestPinFloatArray(float[] array)285*65c59e02SInna Palant   private static native boolean nativeTestPinFloatArray(float[] array);
286*65c59e02SInna Palant 
287*65c59e02SInna Palant   @Test
testPinDoubleArray()288*65c59e02SInna Palant   public void testPinDoubleArray() {
289*65c59e02SInna Palant     double[] doubleArray = new double[MAGIC];
290*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
291*65c59e02SInna Palant       doubleArray[i] = (double) i;
292*65c59e02SInna Palant     }
293*65c59e02SInna Palant 
294*65c59e02SInna Palant     assertThat(nativeTestPinDoubleArray(doubleArray)).isTrue();
295*65c59e02SInna Palant 
296*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
297*65c59e02SInna Palant       assertThat(doubleArray[i]).isEqualTo(2 * i, offset(1e-3));
298*65c59e02SInna Palant     }
299*65c59e02SInna Palant   }
300*65c59e02SInna Palant 
nativeTestPinDoubleArray(double[] array)301*65c59e02SInna Palant   private static native boolean nativeTestPinDoubleArray(double[] array);
302*65c59e02SInna Palant 
303*65c59e02SInna Palant   @Test
testPinByteArrayRegion()304*65c59e02SInna Palant   public void testPinByteArrayRegion() {
305*65c59e02SInna Palant     byte[] array = new byte[MAGIC];
306*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
307*65c59e02SInna Palant       array[i] = (byte) i;
308*65c59e02SInna Palant     }
309*65c59e02SInna Palant 
310*65c59e02SInna Palant     assertThat(nativeTestPinByteArrayRegion(array)).isTrue();
311*65c59e02SInna Palant 
312*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
313*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((byte) (2 * i));
314*65c59e02SInna Palant     }
315*65c59e02SInna Palant   }
316*65c59e02SInna Palant 
nativeTestPinByteArrayRegion(byte[] array)317*65c59e02SInna Palant   private static native boolean nativeTestPinByteArrayRegion(byte[] array);
318*65c59e02SInna Palant 
319*65c59e02SInna Palant   @Test
testPinCharArrayRegion()320*65c59e02SInna Palant   public void testPinCharArrayRegion() {
321*65c59e02SInna Palant     char[] array = new char[MAGIC];
322*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
323*65c59e02SInna Palant       array[i] = (char) i;
324*65c59e02SInna Palant     }
325*65c59e02SInna Palant 
326*65c59e02SInna Palant     assertThat(nativeTestPinCharArrayRegion(array)).isTrue();
327*65c59e02SInna Palant 
328*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
329*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((char) (2 * i));
330*65c59e02SInna Palant     }
331*65c59e02SInna Palant   }
332*65c59e02SInna Palant 
nativeTestPinCharArrayRegion(char[] array)333*65c59e02SInna Palant   private static native boolean nativeTestPinCharArrayRegion(char[] array);
334*65c59e02SInna Palant 
335*65c59e02SInna Palant   @Test
testPinShortArrayRegion()336*65c59e02SInna Palant   public void testPinShortArrayRegion() {
337*65c59e02SInna Palant     short[] array = new short[MAGIC];
338*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
339*65c59e02SInna Palant       array[i] = (short) i;
340*65c59e02SInna Palant     }
341*65c59e02SInna Palant 
342*65c59e02SInna Palant     assertThat(nativeTestPinShortArrayRegion(array)).isTrue();
343*65c59e02SInna Palant 
344*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
345*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((short) (2 * i));
346*65c59e02SInna Palant     }
347*65c59e02SInna Palant   }
348*65c59e02SInna Palant 
nativeTestPinShortArrayRegion(short[] array)349*65c59e02SInna Palant   private static native boolean nativeTestPinShortArrayRegion(short[] array);
350*65c59e02SInna Palant 
351*65c59e02SInna Palant   @Test
testPinIntArrayRegion()352*65c59e02SInna Palant   public void testPinIntArrayRegion() {
353*65c59e02SInna Palant     int[] intArray = new int[MAGIC];
354*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
355*65c59e02SInna Palant       intArray[i] = i;
356*65c59e02SInna Palant     }
357*65c59e02SInna Palant 
358*65c59e02SInna Palant     assertThat(nativeTestPinIntArrayRegion(intArray)).isTrue();
359*65c59e02SInna Palant 
360*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
361*65c59e02SInna Palant       assertThat(intArray[i]).isEqualTo(2 * i);
362*65c59e02SInna Palant     }
363*65c59e02SInna Palant   }
364*65c59e02SInna Palant 
nativeTestPinIntArrayRegion(int[] array)365*65c59e02SInna Palant   private static native boolean nativeTestPinIntArrayRegion(int[] array);
366*65c59e02SInna Palant 
367*65c59e02SInna Palant   @Test
testPinLongArrayRegion()368*65c59e02SInna Palant   public void testPinLongArrayRegion() {
369*65c59e02SInna Palant     long[] longArray = new long[MAGIC];
370*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
371*65c59e02SInna Palant       longArray[i] = (long) i;
372*65c59e02SInna Palant     }
373*65c59e02SInna Palant 
374*65c59e02SInna Palant     assertThat(nativeTestPinLongArrayRegion(longArray)).isTrue();
375*65c59e02SInna Palant 
376*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
377*65c59e02SInna Palant       assertThat(longArray[i]).isEqualTo(2 * i);
378*65c59e02SInna Palant     }
379*65c59e02SInna Palant   }
380*65c59e02SInna Palant 
nativeTestPinLongArrayRegion(long[] array)381*65c59e02SInna Palant   private static native boolean nativeTestPinLongArrayRegion(long[] array);
382*65c59e02SInna Palant 
383*65c59e02SInna Palant   @Test
testPinFloatArrayRegion()384*65c59e02SInna Palant   public void testPinFloatArrayRegion() {
385*65c59e02SInna Palant     float[] floatArray = new float[MAGIC];
386*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
387*65c59e02SInna Palant       floatArray[i] = (long) i;
388*65c59e02SInna Palant     }
389*65c59e02SInna Palant 
390*65c59e02SInna Palant     assertThat(nativeTestPinFloatArrayRegion(floatArray)).isTrue();
391*65c59e02SInna Palant 
392*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
393*65c59e02SInna Palant       assertThat(floatArray[i]).isEqualTo(2 * i, offset(1e-3f));
394*65c59e02SInna Palant     }
395*65c59e02SInna Palant   }
396*65c59e02SInna Palant 
nativeTestPinFloatArrayRegion(float[] array)397*65c59e02SInna Palant   private static native boolean nativeTestPinFloatArrayRegion(float[] array);
398*65c59e02SInna Palant 
399*65c59e02SInna Palant   @Test
testPinDoubleArrayRegion()400*65c59e02SInna Palant   public void testPinDoubleArrayRegion() {
401*65c59e02SInna Palant     double[] doubleArray = new double[MAGIC];
402*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
403*65c59e02SInna Palant       doubleArray[i] = (double) i;
404*65c59e02SInna Palant     }
405*65c59e02SInna Palant 
406*65c59e02SInna Palant     assertThat(nativeTestPinDoubleArrayRegion(doubleArray)).isTrue();
407*65c59e02SInna Palant 
408*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
409*65c59e02SInna Palant       assertThat(doubleArray[i]).isEqualTo(2 * i, offset(1e-3));
410*65c59e02SInna Palant     }
411*65c59e02SInna Palant   }
412*65c59e02SInna Palant 
nativeTestPinDoubleArrayRegion(double[] array)413*65c59e02SInna Palant   private static native boolean nativeTestPinDoubleArrayRegion(double[] array);
414*65c59e02SInna Palant 
415*65c59e02SInna Palant   @Test
testPinByteArrayCritical()416*65c59e02SInna Palant   public void testPinByteArrayCritical() {
417*65c59e02SInna Palant     byte[] array = new byte[MAGIC];
418*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
419*65c59e02SInna Palant       array[i] = (byte) i;
420*65c59e02SInna Palant     }
421*65c59e02SInna Palant 
422*65c59e02SInna Palant     assertThat(nativeTestPinByteArrayCritical(array)).isTrue();
423*65c59e02SInna Palant 
424*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
425*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((byte) (2 * i));
426*65c59e02SInna Palant     }
427*65c59e02SInna Palant   }
428*65c59e02SInna Palant 
nativeTestPinByteArrayCritical(byte[] array)429*65c59e02SInna Palant   private static native boolean nativeTestPinByteArrayCritical(byte[] array);
430*65c59e02SInna Palant 
431*65c59e02SInna Palant   @Test
testPinCharArrayCritical()432*65c59e02SInna Palant   public void testPinCharArrayCritical() {
433*65c59e02SInna Palant     char[] array = new char[MAGIC];
434*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
435*65c59e02SInna Palant       array[i] = (char) i;
436*65c59e02SInna Palant     }
437*65c59e02SInna Palant 
438*65c59e02SInna Palant     assertThat(nativeTestPinCharArrayCritical(array)).isTrue();
439*65c59e02SInna Palant 
440*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
441*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((char) (2 * i));
442*65c59e02SInna Palant     }
443*65c59e02SInna Palant   }
444*65c59e02SInna Palant 
nativeTestPinCharArrayCritical(char[] array)445*65c59e02SInna Palant   private static native boolean nativeTestPinCharArrayCritical(char[] array);
446*65c59e02SInna Palant 
447*65c59e02SInna Palant   @Test
testPinShortArrayCritical()448*65c59e02SInna Palant   public void testPinShortArrayCritical() {
449*65c59e02SInna Palant     short[] array = new short[MAGIC];
450*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
451*65c59e02SInna Palant       array[i] = (short) i;
452*65c59e02SInna Palant     }
453*65c59e02SInna Palant 
454*65c59e02SInna Palant     assertThat(nativeTestPinShortArrayCritical(array)).isTrue();
455*65c59e02SInna Palant 
456*65c59e02SInna Palant     for (int i = 0; i < array.length; ++i) {
457*65c59e02SInna Palant       assertThat(array[i]).isEqualTo((short) (2 * i));
458*65c59e02SInna Palant     }
459*65c59e02SInna Palant   }
460*65c59e02SInna Palant 
nativeTestPinShortArrayCritical(short[] array)461*65c59e02SInna Palant   private static native boolean nativeTestPinShortArrayCritical(short[] array);
462*65c59e02SInna Palant 
463*65c59e02SInna Palant   @Test
testPinIntArrayCritical()464*65c59e02SInna Palant   public void testPinIntArrayCritical() {
465*65c59e02SInna Palant     int[] intArray = new int[MAGIC];
466*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
467*65c59e02SInna Palant       intArray[i] = i;
468*65c59e02SInna Palant     }
469*65c59e02SInna Palant 
470*65c59e02SInna Palant     assertThat(nativeTestPinIntArrayCritical(intArray)).isTrue();
471*65c59e02SInna Palant 
472*65c59e02SInna Palant     for (int i = 0; i < intArray.length; ++i) {
473*65c59e02SInna Palant       assertThat(intArray[i]).isEqualTo(2 * i);
474*65c59e02SInna Palant     }
475*65c59e02SInna Palant   }
476*65c59e02SInna Palant 
nativeTestPinIntArrayCritical(int[] array)477*65c59e02SInna Palant   private static native boolean nativeTestPinIntArrayCritical(int[] array);
478*65c59e02SInna Palant 
479*65c59e02SInna Palant   @Test
testPinLongArrayCritical()480*65c59e02SInna Palant   public void testPinLongArrayCritical() {
481*65c59e02SInna Palant     long[] longArray = new long[MAGIC];
482*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
483*65c59e02SInna Palant       longArray[i] = (long) i;
484*65c59e02SInna Palant     }
485*65c59e02SInna Palant 
486*65c59e02SInna Palant     assertThat(nativeTestPinLongArrayCritical(longArray)).isTrue();
487*65c59e02SInna Palant 
488*65c59e02SInna Palant     for (int i = 0; i < longArray.length; ++i) {
489*65c59e02SInna Palant       assertThat(longArray[i]).isEqualTo(2 * i);
490*65c59e02SInna Palant     }
491*65c59e02SInna Palant   }
492*65c59e02SInna Palant 
nativeTestPinLongArrayCritical(long[] array)493*65c59e02SInna Palant   private static native boolean nativeTestPinLongArrayCritical(long[] array);
494*65c59e02SInna Palant 
495*65c59e02SInna Palant   @Test
testPinFloatArrayCritical()496*65c59e02SInna Palant   public void testPinFloatArrayCritical() {
497*65c59e02SInna Palant     float[] floatArray = new float[MAGIC];
498*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
499*65c59e02SInna Palant       floatArray[i] = (long) i;
500*65c59e02SInna Palant     }
501*65c59e02SInna Palant 
502*65c59e02SInna Palant     assertThat(nativeTestPinFloatArrayCritical(floatArray)).isTrue();
503*65c59e02SInna Palant 
504*65c59e02SInna Palant     for (int i = 0; i < floatArray.length; ++i) {
505*65c59e02SInna Palant       assertThat(floatArray[i]).isEqualTo(2 * i, offset(1e-3f));
506*65c59e02SInna Palant     }
507*65c59e02SInna Palant   }
508*65c59e02SInna Palant 
nativeTestPinFloatArrayCritical(float[] array)509*65c59e02SInna Palant   private static native boolean nativeTestPinFloatArrayCritical(float[] array);
510*65c59e02SInna Palant 
511*65c59e02SInna Palant   @Test
testPinDoubleArrayCritical()512*65c59e02SInna Palant   public void testPinDoubleArrayCritical() {
513*65c59e02SInna Palant     double[] doubleArray = new double[MAGIC];
514*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
515*65c59e02SInna Palant       doubleArray[i] = (double) i;
516*65c59e02SInna Palant     }
517*65c59e02SInna Palant 
518*65c59e02SInna Palant     assertThat(nativeTestPinDoubleArrayCritical(doubleArray)).isTrue();
519*65c59e02SInna Palant 
520*65c59e02SInna Palant     for (int i = 0; i < doubleArray.length; ++i) {
521*65c59e02SInna Palant       assertThat(doubleArray[i]).isEqualTo(2 * i, offset(1e-3));
522*65c59e02SInna Palant     }
523*65c59e02SInna Palant   }
524*65c59e02SInna Palant 
nativeTestPinDoubleArrayCritical(double[] array)525*65c59e02SInna Palant   private static native boolean nativeTestPinDoubleArrayCritical(double[] array);
526*65c59e02SInna Palant 
527*65c59e02SInna Palant   @Test
testIndexOutOfBoundsInRegions()528*65c59e02SInna Palant   public void testIndexOutOfBoundsInRegions() {
529*65c59e02SInna Palant     assertThat(nativeTestIndexOutOfBoundsInRegions()).isTrue();
530*65c59e02SInna Palant   }
531*65c59e02SInna Palant 
nativeTestIndexOutOfBoundsInRegions()532*65c59e02SInna Palant   private static native boolean nativeTestIndexOutOfBoundsInRegions();
533*65c59e02SInna Palant 
534*65c59e02SInna Palant   @Test
testBooleanArrayIndexing()535*65c59e02SInna Palant   public void testBooleanArrayIndexing() {
536*65c59e02SInna Palant     boolean[] array = {true, true, false, true, false};
537*65c59e02SInna Palant     for (int ii = 0; ii < 5; ii++) {
538*65c59e02SInna Palant       assertThat(nativeTestBooleanArrayIndexing(array, ii)).isEqualTo(array[ii]);
539*65c59e02SInna Palant     }
540*65c59e02SInna Palant   }
541*65c59e02SInna Palant 
nativeTestBooleanArrayIndexing(boolean[] array, int idx)542*65c59e02SInna Palant   private native boolean nativeTestBooleanArrayIndexing(boolean[] array, int idx);
543*65c59e02SInna Palant 
544*65c59e02SInna Palant   @Test
testIntegerArrayIndexing()545*65c59e02SInna Palant   public void testIntegerArrayIndexing() {
546*65c59e02SInna Palant     int[] array = {0, 1, 2, 3, 4};
547*65c59e02SInna Palant     for (int ii = 0; ii < 5; ii++) {
548*65c59e02SInna Palant       assertThat(nativeTestIntegerArrayIndexing(array, ii)).isEqualTo(array[ii]);
549*65c59e02SInna Palant     }
550*65c59e02SInna Palant   }
551*65c59e02SInna Palant 
nativeTestIntegerArrayIndexing(int[] array, int idx)552*65c59e02SInna Palant   private native int nativeTestIntegerArrayIndexing(int[] array, int idx);
553*65c59e02SInna Palant 
554*65c59e02SInna Palant   @Test
testIntegerArraySize()555*65c59e02SInna Palant   public void testIntegerArraySize() {
556*65c59e02SInna Palant     int[] array = {0, 1, 2, 3, 4};
557*65c59e02SInna Palant     assertThat(nativeTestIntegerArraySize(array)).isEqualTo(array.length);
558*65c59e02SInna Palant   }
559*65c59e02SInna Palant 
nativeTestIntegerArraySize(int[] array)560*65c59e02SInna Palant   private native int nativeTestIntegerArraySize(int[] array);
561*65c59e02SInna Palant 
562*65c59e02SInna Palant   @Test
testIntegerArrayIncrement()563*65c59e02SInna Palant   public void testIntegerArrayIncrement() {
564*65c59e02SInna Palant     int[] array = {0, 1, 2, 3, 4};
565*65c59e02SInna Palant     array = nativeTestIntegerArrayIncrement(array);
566*65c59e02SInna Palant     for (int ii = 0; ii < 5; ii++) {
567*65c59e02SInna Palant       assertThat(array[ii]).isEqualTo(ii + 1);
568*65c59e02SInna Palant     }
569*65c59e02SInna Palant   }
570*65c59e02SInna Palant 
nativeTestIntegerArrayIncrement(int[] array)571*65c59e02SInna Palant   private native int[] nativeTestIntegerArrayIncrement(int[] array);
572*65c59e02SInna Palant 
573*65c59e02SInna Palant   @Test
testIntegerArrayMoveAssignment()574*65c59e02SInna Palant   public void testIntegerArrayMoveAssignment() {
575*65c59e02SInna Palant     int[] array = {0, 1, 2, 3, 4};
576*65c59e02SInna Palant     nativeTestIntegerArrayMoveAssignment(array);
577*65c59e02SInna Palant     assertThat(array[0]).isEqualTo(0);
578*65c59e02SInna Palant   }
579*65c59e02SInna Palant 
nativeTestIntegerArrayMoveAssignment(int[] array)580*65c59e02SInna Palant   private native void nativeTestIntegerArrayMoveAssignment(int[] array);
581*65c59e02SInna Palant 
582*65c59e02SInna Palant   // On ART, a large array will be placed in the large heap. Arrays here are
583*65c59e02SInna Palant   // non-movable and so the vm pins them in-place. A small array will be a
584*65c59e02SInna Palant   // movable object and thus the pinned array will be a copy.
585*65c59e02SInna Palant   // On Dalvik, all pinned arrays are in-place.
586*65c59e02SInna Palant 
587*65c59e02SInna Palant   @Test
588*65c59e02SInna Palant   @Ignore("Flakey Test. See t8845133")
testCopiedPinnedArray()589*65c59e02SInna Palant   public void testCopiedPinnedArray() {
590*65c59e02SInna Palant     int[] array = new int[100];
591*65c59e02SInna Palant     assumeTrue(nativeIsPinnedArrayACopy(array));
592*65c59e02SInna Palant     assertThat(nativeTestCopiedPinnedArray(array)).isTrue();
593*65c59e02SInna Palant   }
594*65c59e02SInna Palant 
595*65c59e02SInna Palant   @Test
testNonCopiedPinnedArray()596*65c59e02SInna Palant   public void testNonCopiedPinnedArray() {
597*65c59e02SInna Palant     int[] array = new int[1000000];
598*65c59e02SInna Palant     assumeFalse(nativeIsPinnedArrayACopy(array));
599*65c59e02SInna Palant     assertThat(nativeTestNonCopiedPinnedArray(array)).isTrue();
600*65c59e02SInna Palant   }
601*65c59e02SInna Palant 
nativeIsPinnedArrayACopy(int[] array)602*65c59e02SInna Palant   private native boolean nativeIsPinnedArrayACopy(int[] array);
603*65c59e02SInna Palant 
nativeTestCopiedPinnedArray(int[] array)604*65c59e02SInna Palant   private native boolean nativeTestCopiedPinnedArray(int[] array);
605*65c59e02SInna Palant 
nativeTestNonCopiedPinnedArray(int[] array)606*65c59e02SInna Palant   private native boolean nativeTestNonCopiedPinnedArray(int[] array);
607*65c59e02SInna Palant }
608