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