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