xref: /aosp_15_r20/external/fbjni/test/jni/primitive_array_tests.cpp (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 #include <cmath>
18*65c59e02SInna Palant #include <vector>
19*65c59e02SInna Palant 
20*65c59e02SInna Palant #include <fbjni/fbjni.h>
21*65c59e02SInna Palant 
22*65c59e02SInna Palant #include "expect.h"
23*65c59e02SInna Palant 
24*65c59e02SInna Palant using namespace facebook::jni;
25*65c59e02SInna Palant 
testMakeBoolArray(alias_ref<jclass>,jint size)26*65c59e02SInna Palant local_ref<jbooleanArray> testMakeBoolArray(alias_ref<jclass>, jint size) {
27*65c59e02SInna Palant   return make_boolean_array(size);
28*65c59e02SInna Palant }
29*65c59e02SInna Palant 
testMakeByteArray(alias_ref<jclass>,jint size)30*65c59e02SInna Palant local_ref<jbyteArray> testMakeByteArray(alias_ref<jclass>, jint size) {
31*65c59e02SInna Palant   return make_byte_array(size);
32*65c59e02SInna Palant }
33*65c59e02SInna Palant 
testMakeCharArray(alias_ref<jclass>,jint size)34*65c59e02SInna Palant local_ref<jcharArray> testMakeCharArray(alias_ref<jclass>, jint size) {
35*65c59e02SInna Palant   return make_char_array(size);
36*65c59e02SInna Palant }
37*65c59e02SInna Palant 
testMakeShortArray(alias_ref<jclass>,jint size)38*65c59e02SInna Palant local_ref<jshortArray> testMakeShortArray(alias_ref<jclass>, jint size) {
39*65c59e02SInna Palant   return make_short_array(size);
40*65c59e02SInna Palant }
41*65c59e02SInna Palant 
testMakeIntArray(alias_ref<jclass>,jint size)42*65c59e02SInna Palant local_ref<jintArray> testMakeIntArray(alias_ref<jclass>, jint size) {
43*65c59e02SInna Palant   return make_int_array(size);
44*65c59e02SInna Palant }
45*65c59e02SInna Palant 
testMakeLongArray(alias_ref<jclass>,jint size)46*65c59e02SInna Palant local_ref<jlongArray> testMakeLongArray(alias_ref<jclass>, jint size) {
47*65c59e02SInna Palant   return make_long_array(size);
48*65c59e02SInna Palant }
49*65c59e02SInna Palant 
testMakeFloatArray(alias_ref<jclass>,jint size)50*65c59e02SInna Palant local_ref<jfloatArray> testMakeFloatArray(alias_ref<jclass>, jint size) {
51*65c59e02SInna Palant   return make_float_array(size);
52*65c59e02SInna Palant }
53*65c59e02SInna Palant 
testMakeDoubleArray(alias_ref<jclass>,jint size)54*65c59e02SInna Palant local_ref<jdoubleArray> testMakeDoubleArray(alias_ref<jclass>, jint size) {
55*65c59e02SInna Palant   return make_double_array(size);
56*65c59e02SInna Palant }
57*65c59e02SInna Palant 
testGetSetBooleanArray(alias_ref<jclass>,alias_ref<jbooleanArray> array)58*65c59e02SInna Palant jboolean testGetSetBooleanArray(
59*65c59e02SInna Palant     alias_ref<jclass>,
60*65c59e02SInna Palant     alias_ref<jbooleanArray> array) {
61*65c59e02SInna Palant   EXPECT(array);
62*65c59e02SInna Palant 
63*65c59e02SInna Palant   auto n = array->size();
64*65c59e02SInna Palant   EXPECT(n == 2);
65*65c59e02SInna Palant 
66*65c59e02SInna Palant   auto vec = std::vector<jboolean>(n);
67*65c59e02SInna Palant   array->getRegion(0, n, vec.data());
68*65c59e02SInna Palant   auto smartbuf = array->getRegion(0, n);
69*65c59e02SInna Palant 
70*65c59e02SInna Palant   EXPECT(!vec[0] && vec[1]);
71*65c59e02SInna Palant   EXPECT(!smartbuf[0] && smartbuf[1]);
72*65c59e02SInna Palant 
73*65c59e02SInna Palant   for (auto i = 0u; i < n; ++i) {
74*65c59e02SInna Palant     smartbuf[i] = !smartbuf[i];
75*65c59e02SInna Palant   }
76*65c59e02SInna Palant 
77*65c59e02SInna Palant   array->setRegion(0, n, smartbuf.get());
78*65c59e02SInna Palant 
79*65c59e02SInna Palant   return JNI_TRUE;
80*65c59e02SInna Palant }
81*65c59e02SInna Palant 
testPinBooleanArray(alias_ref<jclass>,alias_ref<jbooleanArray> array)82*65c59e02SInna Palant jboolean testPinBooleanArray(
83*65c59e02SInna Palant     alias_ref<jclass>,
84*65c59e02SInna Palant     alias_ref<jbooleanArray> array) {
85*65c59e02SInna Palant   EXPECT(array);
86*65c59e02SInna Palant 
87*65c59e02SInna Palant   auto n = static_cast<jboolean>(array->size());
88*65c59e02SInna Palant   auto pinned = array->pin();
89*65c59e02SInna Palant 
90*65c59e02SInna Palant   EXPECT(!pinned[0] && pinned[1]);
91*65c59e02SInna Palant 
92*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
93*65c59e02SInna Palant     pinned[i] = !pinned[i];
94*65c59e02SInna Palant   }
95*65c59e02SInna Palant 
96*65c59e02SInna Palant   return JNI_TRUE;
97*65c59e02SInna Palant }
98*65c59e02SInna Palant 
99*65c59e02SInna Palant constexpr double kEps = 1e-3;
100*65c59e02SInna Palant 
101*65c59e02SInna Palant template <typename JArrayType>
testGetSetArray(alias_ref<jclass>,alias_ref<JArrayType> array)102*65c59e02SInna Palant jboolean testGetSetArray(alias_ref<jclass>, alias_ref<JArrayType> array) {
103*65c59e02SInna Palant   EXPECT(array);
104*65c59e02SInna Palant   int n = array->size();
105*65c59e02SInna Palant   auto vec = std::vector<typename jtype_traits<JArrayType>::entry_type>(n);
106*65c59e02SInna Palant   array->getRegion(0, n, vec.data());
107*65c59e02SInna Palant   auto smartbuf = array->getRegion(0, n);
108*65c59e02SInna Palant 
109*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
110*65c59e02SInna Palant     EXPECT(std::abs(static_cast<double>(vec[i] - i)) < kEps);
111*65c59e02SInna Palant     EXPECT(std::abs(static_cast<double>(smartbuf[i] - i)) < kEps);
112*65c59e02SInna Palant   }
113*65c59e02SInna Palant 
114*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
115*65c59e02SInna Palant     smartbuf[i] *= 2;
116*65c59e02SInna Palant   }
117*65c59e02SInna Palant 
118*65c59e02SInna Palant   array->setRegion(0, n, smartbuf.get());
119*65c59e02SInna Palant 
120*65c59e02SInna Palant   return JNI_TRUE;
121*65c59e02SInna Palant }
122*65c59e02SInna Palant 
123*65c59e02SInna Palant template <typename JArrayType>
testPinArray(alias_ref<jclass>,alias_ref<JArrayType> array)124*65c59e02SInna Palant jboolean testPinArray(alias_ref<jclass>, alias_ref<JArrayType> array) {
125*65c59e02SInna Palant   EXPECT(array);
126*65c59e02SInna Palant 
127*65c59e02SInna Palant   int n = array->size();
128*65c59e02SInna Palant   auto pinned = array->pin();
129*65c59e02SInna Palant 
130*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
131*65c59e02SInna Palant     EXPECT(std::abs(static_cast<double>(pinned[i] - i)) < kEps);
132*65c59e02SInna Palant   }
133*65c59e02SInna Palant 
134*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
135*65c59e02SInna Palant     pinned[i] *= 2;
136*65c59e02SInna Palant   }
137*65c59e02SInna Palant 
138*65c59e02SInna Palant   return JNI_TRUE;
139*65c59e02SInna Palant }
140*65c59e02SInna Palant 
141*65c59e02SInna Palant template <typename JArrayType>
testPinArrayRegion(alias_ref<jclass>,alias_ref<JArrayType> array)142*65c59e02SInna Palant jboolean testPinArrayRegion(alias_ref<jclass>, alias_ref<JArrayType> array) {
143*65c59e02SInna Palant   EXPECT(array);
144*65c59e02SInna Palant   EXPECT(array->size() > 5);
145*65c59e02SInna Palant 
146*65c59e02SInna Palant   int splits[] = {0, 1, 3, static_cast<int>(array->size())};
147*65c59e02SInna Palant   for (int i = 0; i < 3; i++) {
148*65c59e02SInna Palant     auto pinned = array->pinRegion(splits[i], splits[i + 1] - splits[i]);
149*65c59e02SInna Palant     for (int j = 0; j < static_cast<int>(pinned.size()); j++) {
150*65c59e02SInna Palant       EXPECT(std::abs(static_cast<double>(pinned[j] - j - splits[i])) < kEps);
151*65c59e02SInna Palant       pinned[j] *= 2;
152*65c59e02SInna Palant     }
153*65c59e02SInna Palant   }
154*65c59e02SInna Palant   return JNI_TRUE;
155*65c59e02SInna Palant }
156*65c59e02SInna Palant 
157*65c59e02SInna Palant template <typename JArrayType>
testPinArrayCritical(alias_ref<jclass>,alias_ref<JArrayType> array)158*65c59e02SInna Palant jboolean testPinArrayCritical(alias_ref<jclass>, alias_ref<JArrayType> array) {
159*65c59e02SInna Palant   EXPECT(array);
160*65c59e02SInna Palant 
161*65c59e02SInna Palant   int n = array->size();
162*65c59e02SInna Palant   auto pinned = array->pinCritical();
163*65c59e02SInna Palant 
164*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
165*65c59e02SInna Palant     EXPECT(std::abs(static_cast<double>(pinned[i] - i)) < kEps);
166*65c59e02SInna Palant   }
167*65c59e02SInna Palant 
168*65c59e02SInna Palant   for (auto i = 0; i < n; ++i) {
169*65c59e02SInna Palant     pinned[i] *= 2;
170*65c59e02SInna Palant   }
171*65c59e02SInna Palant 
172*65c59e02SInna Palant   return JNI_TRUE;
173*65c59e02SInna Palant }
174*65c59e02SInna Palant 
testIndexOutOfBoundsInRegions(alias_ref<jclass>)175*65c59e02SInna Palant jboolean testIndexOutOfBoundsInRegions(alias_ref<jclass>) {
176*65c59e02SInna Palant   constexpr auto N = 7;
177*65c59e02SInna Palant   constexpr auto TOO_MUCH = 10;
178*65c59e02SInna Palant   constexpr auto NEGATIVE = -1;
179*65c59e02SInna Palant 
180*65c59e02SInna Palant   auto array = make_int_array(N);
181*65c59e02SInna Palant 
182*65c59e02SInna Palant   try {
183*65c59e02SInna Palant     auto buf = array->getRegion(TOO_MUCH, N);
184*65c59e02SInna Palant     EXPECT(false);
185*65c59e02SInna Palant   } catch (JniException&) {
186*65c59e02SInna Palant   }
187*65c59e02SInna Palant 
188*65c59e02SInna Palant   try {
189*65c59e02SInna Palant     auto buf = array->getRegion(NEGATIVE, N);
190*65c59e02SInna Palant     EXPECT(false);
191*65c59e02SInna Palant   } catch (JniException&) {
192*65c59e02SInna Palant   }
193*65c59e02SInna Palant 
194*65c59e02SInna Palant   try {
195*65c59e02SInna Palant     auto vec = std::vector<jint>(TOO_MUCH);
196*65c59e02SInna Palant     array->setRegion(0, vec.size(), vec.data());
197*65c59e02SInna Palant     EXPECT(false);
198*65c59e02SInna Palant   } catch (JniException&) {
199*65c59e02SInna Palant   }
200*65c59e02SInna Palant 
201*65c59e02SInna Palant   try {
202*65c59e02SInna Palant     auto vec = std::vector<jint>(1);
203*65c59e02SInna Palant     array->setRegion(NEGATIVE, vec.size(), vec.data());
204*65c59e02SInna Palant     EXPECT(false);
205*65c59e02SInna Palant   } catch (JniException&) {
206*65c59e02SInna Palant   }
207*65c59e02SInna Palant 
208*65c59e02SInna Palant   return JNI_TRUE;
209*65c59e02SInna Palant }
210*65c59e02SInna Palant 
TestBooleanArrayIndexing(alias_ref<jobject> self,alias_ref<jbooleanArray> input,jint idx)211*65c59e02SInna Palant jboolean TestBooleanArrayIndexing(
212*65c59e02SInna Palant     alias_ref<jobject> self,
213*65c59e02SInna Palant     alias_ref<jbooleanArray> input,
214*65c59e02SInna Palant     jint idx) {
215*65c59e02SInna Palant   auto array = input->pin();
216*65c59e02SInna Palant   jboolean value = array[idx];
217*65c59e02SInna Palant   return value;
218*65c59e02SInna Palant }
219*65c59e02SInna Palant 
TestIntegerArrayIndexing(alias_ref<jobject> self,alias_ref<jintArray> input,jint idx)220*65c59e02SInna Palant jint TestIntegerArrayIndexing(
221*65c59e02SInna Palant     alias_ref<jobject> self,
222*65c59e02SInna Palant     alias_ref<jintArray> input,
223*65c59e02SInna Palant     jint idx) {
224*65c59e02SInna Palant   auto array = input->pin();
225*65c59e02SInna Palant   jint value = array[idx];
226*65c59e02SInna Palant   return value;
227*65c59e02SInna Palant }
228*65c59e02SInna Palant 
TestIntegerArraySize(alias_ref<jobject> self,alias_ref<jintArray> input)229*65c59e02SInna Palant jsize TestIntegerArraySize(
230*65c59e02SInna Palant     alias_ref<jobject> self,
231*65c59e02SInna Palant     alias_ref<jintArray> input) {
232*65c59e02SInna Palant   auto array = input->pin();
233*65c59e02SInna Palant   jsize size = array.size();
234*65c59e02SInna Palant   return size;
235*65c59e02SInna Palant }
236*65c59e02SInna Palant 
TestIntegerArrayIncrement(alias_ref<jobject> self,alias_ref<jintArray> input)237*65c59e02SInna Palant alias_ref<jintArray> TestIntegerArrayIncrement(
238*65c59e02SInna Palant     alias_ref<jobject> self,
239*65c59e02SInna Palant     alias_ref<jintArray> input) {
240*65c59e02SInna Palant   auto array = input->pin();
241*65c59e02SInna Palant   for (size_t ii = 0; ii < array.size(); ii++) {
242*65c59e02SInna Palant     array[ii]++;
243*65c59e02SInna Palant   }
244*65c59e02SInna Palant   return input;
245*65c59e02SInna Palant }
246*65c59e02SInna Palant 
TestIntegerArrayMoveAssignment(alias_ref<jobject> self,alias_ref<jintArray> input)247*65c59e02SInna Palant void TestIntegerArrayMoveAssignment(
248*65c59e02SInna Palant     alias_ref<jobject> self,
249*65c59e02SInna Palant     alias_ref<jintArray> input) {
250*65c59e02SInna Palant   auto array = input->pin();
251*65c59e02SInna Palant   array[0] = 0;
252*65c59e02SInna Palant   array.release();
253*65c59e02SInna Palant }
254*65c59e02SInna Palant 
isPinnedArrayACopy(alias_ref<jobject>,alias_ref<jintArray> input)255*65c59e02SInna Palant jboolean isPinnedArrayACopy(alias_ref<jobject>, alias_ref<jintArray> input) {
256*65c59e02SInna Palant   return input->pin().isCopy();
257*65c59e02SInna Palant }
258*65c59e02SInna Palant 
testCopiedPinnedArray(alias_ref<jobject>,alias_ref<jintArray> input)259*65c59e02SInna Palant jboolean testCopiedPinnedArray(alias_ref<jobject>, alias_ref<jintArray> input) {
260*65c59e02SInna Palant   EXPECT(input->size() > 0);
261*65c59e02SInna Palant   input->pin()[0] = 100;
262*65c59e02SInna Palant   auto pin = input->pin();
263*65c59e02SInna Palant   EXPECT(pin.isCopy());
264*65c59e02SInna Palant   EXPECT(pin[0] == input->pin()[0]);
265*65c59e02SInna Palant 
266*65c59e02SInna Palant   pin[0] = 200;
267*65c59e02SInna Palant   EXPECT(input->pin()[0] == 100);
268*65c59e02SInna Palant 
269*65c59e02SInna Palant   pin.commit();
270*65c59e02SInna Palant   EXPECT(input->pin()[0] == 200);
271*65c59e02SInna Palant   pin[0] = 300;
272*65c59e02SInna Palant   EXPECT(input->pin()[0] == 200);
273*65c59e02SInna Palant   pin.abort();
274*65c59e02SInna Palant   EXPECT(input->pin()[0] == 200);
275*65c59e02SInna Palant   pin = input->pin();
276*65c59e02SInna Palant   pin[0] = 400;
277*65c59e02SInna Palant   pin.release();
278*65c59e02SInna Palant   EXPECT(input->pin()[0] == 400);
279*65c59e02SInna Palant   return JNI_TRUE;
280*65c59e02SInna Palant }
281*65c59e02SInna Palant 
testNonCopiedPinnedArray(alias_ref<jobject>,alias_ref<jintArray> input)282*65c59e02SInna Palant jboolean testNonCopiedPinnedArray(
283*65c59e02SInna Palant     alias_ref<jobject>,
284*65c59e02SInna Palant     alias_ref<jintArray> input) {
285*65c59e02SInna Palant   EXPECT(input->size() > 0);
286*65c59e02SInna Palant   auto pin = input->pin();
287*65c59e02SInna Palant   EXPECT(!pin.isCopy());
288*65c59e02SInna Palant   EXPECT(pin[0] == input->pin()[0]);
289*65c59e02SInna Palant   pin.commit();
290*65c59e02SInna Palant   EXPECT(pin[0] == input->pin()[0]);
291*65c59e02SInna Palant   pin[0] = 100;
292*65c59e02SInna Palant   EXPECT(pin[0] == input->pin()[0]);
293*65c59e02SInna Palant   input->pin()[0] = 200;
294*65c59e02SInna Palant   EXPECT(pin[0] == input->pin()[0]);
295*65c59e02SInna Palant   pin.abort();
296*65c59e02SInna Palant   return JNI_TRUE;
297*65c59e02SInna Palant }
298*65c59e02SInna Palant 
RegisterPrimitiveArrayTests()299*65c59e02SInna Palant void RegisterPrimitiveArrayTests() {
300*65c59e02SInna Palant   registerNatives(
301*65c59e02SInna Palant       "com/facebook/jni/PrimitiveArrayTests",
302*65c59e02SInna Palant       {
303*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeBooleanArray", testMakeBoolArray),
304*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeByteArray", testMakeByteArray),
305*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeCharArray", testMakeCharArray),
306*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeShortArray", testMakeShortArray),
307*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeIntArray", testMakeIntArray),
308*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeLongArray", testMakeLongArray),
309*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeFloatArray", testMakeFloatArray),
310*65c59e02SInna Palant           makeNativeMethod("nativeTestMakeDoubleArray", testMakeDoubleArray),
311*65c59e02SInna Palant 
312*65c59e02SInna Palant           makeNativeMethod(
313*65c59e02SInna Palant               "nativeTestGetSetBooleanArray", testGetSetBooleanArray),
314*65c59e02SInna Palant           makeNativeMethod(
315*65c59e02SInna Palant               "nativeTestGetSetByteArray", testGetSetArray<jbyteArray>),
316*65c59e02SInna Palant           makeNativeMethod(
317*65c59e02SInna Palant               "nativeTestGetSetCharArray", testGetSetArray<jcharArray>),
318*65c59e02SInna Palant           makeNativeMethod(
319*65c59e02SInna Palant               "nativeTestGetSetShortArray", testGetSetArray<jshortArray>),
320*65c59e02SInna Palant           makeNativeMethod(
321*65c59e02SInna Palant               "nativeTestGetSetIntArray", testGetSetArray<jintArray>),
322*65c59e02SInna Palant           makeNativeMethod(
323*65c59e02SInna Palant               "nativeTestGetSetLongArray", testGetSetArray<jlongArray>),
324*65c59e02SInna Palant           makeNativeMethod(
325*65c59e02SInna Palant               "nativeTestGetSetFloatArray", testGetSetArray<jfloatArray>),
326*65c59e02SInna Palant           makeNativeMethod(
327*65c59e02SInna Palant               "nativeTestGetSetDoubleArray", testGetSetArray<jdoubleArray>),
328*65c59e02SInna Palant 
329*65c59e02SInna Palant           makeNativeMethod("nativeTestPinBooleanArray", testPinBooleanArray),
330*65c59e02SInna Palant           makeNativeMethod("nativeTestPinByteArray", testPinArray<jbyteArray>),
331*65c59e02SInna Palant           makeNativeMethod("nativeTestPinCharArray", testPinArray<jcharArray>),
332*65c59e02SInna Palant           makeNativeMethod(
333*65c59e02SInna Palant               "nativeTestPinShortArray", testPinArray<jshortArray>),
334*65c59e02SInna Palant           makeNativeMethod("nativeTestPinIntArray", testPinArray<jintArray>),
335*65c59e02SInna Palant           makeNativeMethod("nativeTestPinLongArray", testPinArray<jlongArray>),
336*65c59e02SInna Palant           makeNativeMethod(
337*65c59e02SInna Palant               "nativeTestPinFloatArray", testPinArray<jfloatArray>),
338*65c59e02SInna Palant           makeNativeMethod(
339*65c59e02SInna Palant               "nativeTestPinDoubleArray", testPinArray<jdoubleArray>),
340*65c59e02SInna Palant 
341*65c59e02SInna Palant           makeNativeMethod(
342*65c59e02SInna Palant               "nativeTestPinByteArrayRegion", testPinArrayRegion<jbyteArray>),
343*65c59e02SInna Palant           makeNativeMethod(
344*65c59e02SInna Palant               "nativeTestPinCharArrayRegion", testPinArrayRegion<jcharArray>),
345*65c59e02SInna Palant           makeNativeMethod(
346*65c59e02SInna Palant               "nativeTestPinShortArrayRegion", testPinArrayRegion<jshortArray>),
347*65c59e02SInna Palant           makeNativeMethod(
348*65c59e02SInna Palant               "nativeTestPinIntArrayRegion", testPinArrayRegion<jintArray>),
349*65c59e02SInna Palant           makeNativeMethod(
350*65c59e02SInna Palant               "nativeTestPinLongArrayRegion", testPinArrayRegion<jlongArray>),
351*65c59e02SInna Palant           makeNativeMethod(
352*65c59e02SInna Palant               "nativeTestPinFloatArrayRegion", testPinArrayRegion<jfloatArray>),
353*65c59e02SInna Palant           makeNativeMethod(
354*65c59e02SInna Palant               "nativeTestPinDoubleArrayRegion",
355*65c59e02SInna Palant               testPinArrayRegion<jdoubleArray>),
356*65c59e02SInna Palant 
357*65c59e02SInna Palant           makeNativeMethod(
358*65c59e02SInna Palant               "nativeTestPinByteArrayCritical",
359*65c59e02SInna Palant               testPinArrayCritical<jbyteArray>),
360*65c59e02SInna Palant           makeNativeMethod(
361*65c59e02SInna Palant               "nativeTestPinCharArrayCritical",
362*65c59e02SInna Palant               testPinArrayCritical<jcharArray>),
363*65c59e02SInna Palant           makeNativeMethod(
364*65c59e02SInna Palant               "nativeTestPinShortArrayCritical",
365*65c59e02SInna Palant               testPinArrayCritical<jshortArray>),
366*65c59e02SInna Palant           makeNativeMethod(
367*65c59e02SInna Palant               "nativeTestPinIntArrayCritical", testPinArrayCritical<jintArray>),
368*65c59e02SInna Palant           makeNativeMethod(
369*65c59e02SInna Palant               "nativeTestPinLongArrayCritical",
370*65c59e02SInna Palant               testPinArrayCritical<jlongArray>),
371*65c59e02SInna Palant           makeNativeMethod(
372*65c59e02SInna Palant               "nativeTestPinFloatArrayCritical",
373*65c59e02SInna Palant               testPinArrayCritical<jfloatArray>),
374*65c59e02SInna Palant           makeNativeMethod(
375*65c59e02SInna Palant               "nativeTestPinDoubleArrayCritical",
376*65c59e02SInna Palant               testPinArrayCritical<jdoubleArray>),
377*65c59e02SInna Palant 
378*65c59e02SInna Palant           makeNativeMethod(
379*65c59e02SInna Palant               "nativeTestIndexOutOfBoundsInRegions",
380*65c59e02SInna Palant               testIndexOutOfBoundsInRegions),
381*65c59e02SInna Palant 
382*65c59e02SInna Palant           makeNativeMethod(
383*65c59e02SInna Palant               "nativeTestBooleanArrayIndexing", TestBooleanArrayIndexing),
384*65c59e02SInna Palant           makeNativeMethod(
385*65c59e02SInna Palant               "nativeTestIntegerArrayIndexing", TestIntegerArrayIndexing),
386*65c59e02SInna Palant           makeNativeMethod("nativeTestIntegerArraySize", TestIntegerArraySize),
387*65c59e02SInna Palant           makeNativeMethod(
388*65c59e02SInna Palant               "nativeTestIntegerArrayIncrement", TestIntegerArrayIncrement),
389*65c59e02SInna Palant           makeNativeMethod(
390*65c59e02SInna Palant               "nativeTestIntegerArrayMoveAssignment",
391*65c59e02SInna Palant               TestIntegerArrayMoveAssignment),
392*65c59e02SInna Palant 
393*65c59e02SInna Palant           makeNativeMethod("nativeIsPinnedArrayACopy", isPinnedArrayACopy),
394*65c59e02SInna Palant           makeNativeMethod(
395*65c59e02SInna Palant               "nativeTestCopiedPinnedArray", testCopiedPinnedArray),
396*65c59e02SInna Palant           makeNativeMethod(
397*65c59e02SInna Palant               "nativeTestNonCopiedPinnedArray", testNonCopiedPinnedArray),
398*65c59e02SInna Palant       });
399*65c59e02SInna Palant }
400