xref: /aosp_15_r20/cts/tests/tests/jni/libjnitest/android_jni_cts_StaticNonce.c (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  * Native implementation for the StaticNonce class. See the test code
19  * in JniStaticTest for more info.
20  */
21 
22 #include <jni.h>
23 
24 #include <stdbool.h>
25 #include <string.h>
26 
27 #include "helper.h"
28 
29 // public static native void nop();
StaticNonce_nop(JNIEnv * env,jclass clazz)30 static void StaticNonce_nop(JNIEnv *env, jclass clazz) {
31     // This space intentionally left blank.
32 }
33 
34 // public static native void nopDlsym();
Java_android_jni_cts_StaticNonce_nopDlsym(JNIEnv * env,jclass clazz)35 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopDlsym(JNIEnv *env,
36         jclass clazz) {
37     // This space intentionally left blank.
38 }
39 
40 // @FastNative
41 // public static native void nopFast();
StaticNonce_nopFast(JNIEnv * env,jclass clazz)42 static void StaticNonce_nopFast(JNIEnv *env, jclass clazz) {
43     // This space intentionally left blank.
44 }
45 
46 // @FastNative
47 // public static native void nopFastDlsym();
Java_android_jni_cts_StaticNonce_nopFastDlsym(JNIEnv * env,jclass clazz)48 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopFastDlsym(JNIEnv *env,
49         jclass clazz) {
50     // This space intentionally left blank.
51 }
52 
53 // @CriticalNative
54 // public static native void nopCritical();
StaticNonce_nopCritical()55 static void StaticNonce_nopCritical() {
56     // This space intentionally left blank.
57 }
58 
59 // @CriticalNative
60 // public static native void nopCriticalDlsym();
Java_android_jni_cts_StaticNonce_nopCriticalDlsym()61 JNIEXPORT void Java_android_jni_cts_StaticNonce_nopCriticalDlsym() {
62     // This space intentionally left blank.
63 }
64 
65 // public static native boolean returnBoolean();
StaticNonce_returnBoolean(JNIEnv * env,jclass clazz)66 static jboolean StaticNonce_returnBoolean(JNIEnv *env, jclass clazz) {
67     return (jboolean) true;
68 }
69 
70 // @FastNative
71 // public static native boolean returnBooleanFast();
StaticNonce_returnBooleanFast(JNIEnv * env,jclass clazz)72 static jboolean StaticNonce_returnBooleanFast(JNIEnv *env, jclass clazz) {
73     return (jboolean) true;
74 }
75 
76 // @CriticalNative
77 // public static native boolean returnBooleanCritical();
StaticNonce_returnBooleanCritical()78 static jboolean StaticNonce_returnBooleanCritical() {
79     return (jboolean) true;
80 }
81 
82 // public static native byte returnByte();
StaticNonce_returnByte(JNIEnv * env,jclass clazz)83 static jbyte StaticNonce_returnByte(JNIEnv *env, jclass clazz) {
84     return (jbyte) 123;
85 }
86 
87 // @FastNative
88 // public static native byte returnByteFast();
StaticNonce_returnByteFast(JNIEnv * env,jclass clazz)89 static jbyte StaticNonce_returnByteFast(JNIEnv *env, jclass clazz) {
90     return (jbyte) 123;
91 }
92 
93 // @CriticalNative
94 // public static native byte returnByteCritical();
StaticNonce_returnByteCritical()95 static jbyte StaticNonce_returnByteCritical() {
96     return (jbyte) 123;
97 }
98 
99 // public static native short returnShort();
StaticNonce_returnShort(JNIEnv * env,jclass clazz)100 static jshort StaticNonce_returnShort(JNIEnv *env, jclass clazz) {
101     return (jshort) -12345;
102 }
103 
104 // @FastNative
105 // public static native short returnShortFast();
StaticNonce_returnShortFast(JNIEnv * env,jclass clazz)106 static jshort StaticNonce_returnShortFast(JNIEnv *env, jclass clazz) {
107     return (jshort) -12345;
108 }
109 
110 // @CriticalNative
111 // public static native short returnShortCritical();
StaticNonce_returnShortCritical()112 static jshort StaticNonce_returnShortCritical() {
113     return (jshort) -12345;
114 }
115 
116 // public static native char returnChar();
StaticNonce_returnChar(JNIEnv * env,jclass clazz)117 static jchar StaticNonce_returnChar(JNIEnv *env, jclass clazz) {
118     return (jchar) 34567;
119 }
120 
121 // @FastNative
122 // public static native char returnCharFast();
StaticNonce_returnCharFast(JNIEnv * env,jclass clazz)123 static jchar StaticNonce_returnCharFast(JNIEnv *env, jclass clazz) {
124     return (jchar) 34567;
125 }
126 
127 // @CriticalNative
128 // public static native char returnCharCritical();
StaticNonce_returnCharCritical()129 static jchar StaticNonce_returnCharCritical() {
130     return (jchar) 34567;
131 }
132 
133 // public static native int returnInt();
StaticNonce_returnInt(JNIEnv * env,jclass clazz)134 static jint StaticNonce_returnInt(JNIEnv *env, jclass clazz) {
135     return 12345678;
136 }
137 
138 // @FastNative
139 // public static native int returnIntFast();
StaticNonce_returnIntFast(JNIEnv * env,jclass clazz)140 static jint StaticNonce_returnIntFast(JNIEnv *env, jclass clazz) {
141     return 12345678;
142 }
143 
144 // @CriticalNative
145 // public static native int returnIntCritical();
StaticNonce_returnIntCritical()146 static jint StaticNonce_returnIntCritical() {
147     return 12345678;
148 }
149 
150 // public static native long returnLong();
StaticNonce_returnLong(JNIEnv * env,jclass clazz)151 static jlong StaticNonce_returnLong(JNIEnv *env, jclass clazz) {
152     return (jlong) -1098765432109876543LL;
153 }
154 
155 // @FastNative
156 // public static native long returnLongFast();
StaticNonce_returnLongFast(JNIEnv * env,jclass clazz)157 static jlong StaticNonce_returnLongFast(JNIEnv *env, jclass clazz) {
158     return (jlong) -1098765432109876543LL;
159 }
160 
161 // @CriticalNative
162 // public static native long returnLongCritical();
StaticNonce_returnLongCritical()163 static jlong StaticNonce_returnLongCritical() {
164     return (jlong) -1098765432109876543LL;
165 }
166 
167 // public static native float returnFloat();
StaticNonce_returnFloat(JNIEnv * env,jclass clazz)168 static jfloat StaticNonce_returnFloat(JNIEnv *env, jclass clazz) {
169     return (jfloat) -98765.4321F;
170 }
171 
172 // @FastNative
173 // public static native float returnFloatFast();
StaticNonce_returnFloatFast(JNIEnv * env,jclass clazz)174 static jfloat StaticNonce_returnFloatFast(JNIEnv *env, jclass clazz) {
175     return (jfloat) -98765.4321F;
176 }
177 
178 // @CriticalNative
179 // public static native float returnFloatCritical();
StaticNonce_returnFloatCritical()180 static jfloat StaticNonce_returnFloatCritical() {
181     return (jfloat) -98765.4321F;
182 }
183 
184 // public static native double returnDouble();
StaticNonce_returnDouble(JNIEnv * env,jclass clazz)185 static jdouble StaticNonce_returnDouble(JNIEnv *env, jclass clazz) {
186     return 12345678.9;
187 }
188 
189 // @FastNative
190 // public static native double returnDoubleFast();
StaticNonce_returnDoubleFast(JNIEnv * env,jclass clazz)191 static jdouble StaticNonce_returnDoubleFast(JNIEnv *env, jclass clazz) {
192     return 12345678.9;
193 }
194 
195 // @CriticalNative
196 // public static native double returnDoubleCritical();
StaticNonce_returnDoubleCritical()197 static jdouble StaticNonce_returnDoubleCritical() {
198     return 12345678.9;
199 }
200 
201 // public static native Object returnNull();
StaticNonce_returnNull(JNIEnv * env,jclass clazz)202 static jobject StaticNonce_returnNull(JNIEnv *env, jclass clazz) {
203     return NULL;
204 }
205 
206 // @FastNative
207 // public static native Object returnNullFast();
StaticNonce_returnNullFast(JNIEnv * env,jclass clazz)208 static jobject StaticNonce_returnNullFast(JNIEnv *env, jclass clazz) {
209     return NULL;
210 }
211 
212 // public static native String returnString();
StaticNonce_returnString(JNIEnv * env,jclass clazz)213 static jstring StaticNonce_returnString(JNIEnv *env, jclass clazz) {
214     return (*env)->NewStringUTF(env, "blort");
215 }
216 
217 // @FastNative
218 // public static native String returnStringFast();
StaticNonce_returnStringFast(JNIEnv * env,jclass clazz)219 static jstring StaticNonce_returnStringFast(JNIEnv *env, jclass clazz) {
220     return (*env)->NewStringUTF(env, "blort");
221 }
222 
223 // public static native short[] returnShortArray();
StaticNonce_returnShortArray(JNIEnv * env,jclass clazz)224 static jshortArray StaticNonce_returnShortArray(JNIEnv *env, jclass clazz) {
225     static jshort contents[] = { 10, 20, 30 };
226 
227     jshortArray result = (*env)->NewShortArray(env, 3);
228 
229     if (result == NULL) {
230         return NULL;
231     }
232 
233     (*env)->SetShortArrayRegion(env, result, 0, 3, contents);
234     return result;
235 }
236 
237 // @FastNative
238 // public static native short[] returnShortArrayFast();
StaticNonce_returnShortArrayFast(JNIEnv * env,jclass clazz)239 static jshortArray StaticNonce_returnShortArrayFast(JNIEnv *env,
240         jclass clazz) {
241     return StaticNonce_returnShortArray(env, clazz);
242 }
243 
244 // public static native String[] returnStringArray();
StaticNonce_returnStringArray(JNIEnv * env,jclass clazz)245 static jobjectArray StaticNonce_returnStringArray(JNIEnv *env, jclass clazz) {
246     static int indices[] = { 0, 50, 99 };
247     static const char *contents[] = { "blort", "zorch", "fizmo" };
248 
249     jclass stringClass = (*env)->FindClass(env, "java/lang/String");
250 
251     if ((*env)->ExceptionOccurred(env) != NULL) {
252         return NULL;
253     }
254 
255     if (stringClass == NULL) {
256         throwException(env, "java/lang/AssertionError",
257                 "class String not found");
258         return NULL;
259     }
260 
261     jobjectArray result = (*env)->NewObjectArray(env, 100, stringClass, NULL);
262 
263     if (result == NULL) {
264         return NULL;
265     }
266 
267     jsize i;
268     for (i = 0; i < 3; i++) {
269         jstring s = (*env)->NewStringUTF(env, contents[i]);
270 
271         if (s == NULL) {
272             return NULL;
273         }
274 
275         (*env)->SetObjectArrayElement(env, result, indices[i], s);
276 
277         if ((*env)->ExceptionOccurred(env) != NULL) {
278             return NULL;
279         }
280     }
281 
282     return result;
283 }
284 
285 // @FastNative
286 // public static native String[] returnStringArrayFast();
StaticNonce_returnStringArrayFast(JNIEnv * env,jclass clazz)287 static jobjectArray StaticNonce_returnStringArrayFast(JNIEnv *env,
288         jclass clazz) {
289     return StaticNonce_returnStringArray(env, clazz);
290 }
291 
292 // public static native Class returnThisClass();
StaticNonce_returnThisClass(JNIEnv * env,jclass clazz)293 static jclass StaticNonce_returnThisClass(JNIEnv *env, jclass clazz) {
294     return clazz;
295 }
296 
297 // @FastNative
298 // public static native Class returnThisClassFast();
StaticNonce_returnThisClassFast(JNIEnv * env,jclass clazz)299 static jclass StaticNonce_returnThisClassFast(JNIEnv *env, jclass clazz) {
300     return clazz;
301 }
302 
303 // public static native StaticNonce returnInstance();
StaticNonce_returnInstance(JNIEnv * env,jclass clazz)304 static jobject StaticNonce_returnInstance(JNIEnv *env, jclass clazz) {
305     jmethodID id = (*env)->GetMethodID(env, clazz, "<init>", "()V");
306 
307     if ((*env)->ExceptionOccurred(env) != NULL) {
308         return NULL;
309     }
310 
311     if (id == NULL) {
312         throwException(env, "java/lang/AssertionError",
313                 "constructor not found");
314         return NULL;
315     }
316 
317     return (*env)->NewObjectA(env, clazz, id, NULL);
318 }
319 
320 // @FastNative
321 // public static native StaticNonce returnInstanceFast();
StaticNonce_returnInstanceFast(JNIEnv * env,jclass clazz)322 static jobject StaticNonce_returnInstanceFast(JNIEnv *env, jclass clazz) {
323     return StaticNonce_returnInstance(env, clazz);
324 }
325 
326 // public static native boolean takeBoolean(boolean v);
StaticNonce_takeBoolean(JNIEnv * env,jclass clazz,jboolean v)327 static jboolean StaticNonce_takeBoolean(JNIEnv *env, jclass clazz,
328         jboolean v) {
329     return v == true;
330 }
331 
332 // @FastNative
333 // public static native boolean takeBooleanFast(boolean v);
StaticNonce_takeBooleanFast(JNIEnv * env,jclass clazz,jboolean v)334 static jboolean StaticNonce_takeBooleanFast(JNIEnv *env, jclass clazz,
335         jboolean v) {
336     return v == true;
337 }
338 
339 // @CriticalNative
340 // public static native boolean takeBooleanCritical(boolean v);
StaticNonce_takeBooleanCritical(jboolean v)341 static jboolean StaticNonce_takeBooleanCritical(jboolean v) {
342     return v == true;
343 }
344 
345 // public static native boolean takeByte(byte v);
StaticNonce_takeByte(JNIEnv * env,jclass clazz,jbyte v)346 static jboolean StaticNonce_takeByte(JNIEnv *env, jclass clazz, jbyte v) {
347     return v == -99;
348 }
349 
350 // @FastNative
351 // public static native boolean takeByteFast(byte v);
StaticNonce_takeByteFast(JNIEnv * env,jclass clazz,jbyte v)352 static jboolean StaticNonce_takeByteFast(JNIEnv *env, jclass clazz, jbyte v) {
353     return v == -99;
354 }
355 
356 // @CriticalNative
357 // public static native boolean takeByteCritical(byte v);
StaticNonce_takeByteCritical(jbyte v)358 static jboolean StaticNonce_takeByteCritical(jbyte v) {
359     return v == -99;
360 }
361 
362 // public static native boolean takeShort(short v);
StaticNonce_takeShort(JNIEnv * env,jclass clazz,jshort v)363 static jboolean StaticNonce_takeShort(JNIEnv *env, jclass clazz, jshort v) {
364     return v == 19991;
365 }
366 
367 // @FastNative
368 // public static native boolean takeShortFast(short v);
StaticNonce_takeShortFast(JNIEnv * env,jclass clazz,jshort v)369 static jboolean StaticNonce_takeShortFast(JNIEnv *env, jclass clazz,
370         jshort v) {
371     return v == 19991;
372 }
373 
374 // @CriticalNative
375 // public static native boolean takeShortCritical(short v);
StaticNonce_takeShortCritical(jshort v)376 static jboolean StaticNonce_takeShortCritical(jshort v) {
377     return v == 19991;
378 }
379 
380 // public static native boolean takeChar(char v);
StaticNonce_takeChar(JNIEnv * env,jclass clazz,jchar v)381 static jboolean StaticNonce_takeChar(JNIEnv *env, jclass clazz, jchar v) {
382     return v == 999;
383 }
384 
385 // @FastNative
386 // public static native boolean takeCharFast(char v);
StaticNonce_takeCharFast(JNIEnv * env,jclass clazz,jchar v)387 static jboolean StaticNonce_takeCharFast(JNIEnv *env, jclass clazz, jchar v) {
388     return v == 999;
389 }
390 
391 // @CriticalNative
392 // public static native boolean takeCharCritical(char v);
StaticNonce_takeCharCritical(jchar v)393 static jboolean StaticNonce_takeCharCritical(jchar v) {
394     return v == 999;
395 }
396 
397 // public static native boolean takeInt(int v);
StaticNonce_takeInt(JNIEnv * env,jclass clazz,jint v)398 static jboolean StaticNonce_takeInt(JNIEnv *env, jclass clazz, jint v) {
399     return v == -999888777;
400 }
401 
402 // @FastNative
403 // public static native boolean takeIntFast(int v);
StaticNonce_takeIntFast(JNIEnv * env,jclass clazz,jint v)404 static jboolean StaticNonce_takeIntFast(JNIEnv *env, jclass clazz, jint v) {
405     return v == -999888777;
406 }
407 
408 // @CriticalNative
409 // public static native boolean takeIntCritical(int v);
StaticNonce_takeIntCritical(jint v)410 static jboolean StaticNonce_takeIntCritical(jint v) {
411     return v == -999888777;
412 }
413 
414 // public static native boolean takeLong(long v);
StaticNonce_takeLong(JNIEnv * env,jclass clazz,jlong v)415 static jboolean StaticNonce_takeLong(JNIEnv *env, jclass clazz, jlong v) {
416     return v == 999888777666555444LL;
417 }
418 
419 // @FastNative
420 // public static native boolean takeLongFast(long v);
StaticNonce_takeLongFast(JNIEnv * env,jclass clazz,jlong v)421 static jboolean StaticNonce_takeLongFast(JNIEnv *env, jclass clazz, jlong v) {
422     return v == 999888777666555444LL;
423 }
424 
425 // @CriticalNative
426 // public static native boolean takeLongCritical(long v);
StaticNonce_takeLongCritical(jlong v)427 static jboolean StaticNonce_takeLongCritical(jlong v) {
428     return v == 999888777666555444LL;
429 }
430 
431 // public static native boolean takeFloat(float v);
StaticNonce_takeFloat(JNIEnv * env,jclass clazz,jfloat v)432 static jboolean StaticNonce_takeFloat(JNIEnv *env, jclass clazz, jfloat v) {
433     return v == -9988.7766F;
434 }
435 
436 // @FastNative
437 // public static native boolean takeFloatFast(float v);
StaticNonce_takeFloatFast(JNIEnv * env,jclass clazz,jfloat v)438 static jboolean StaticNonce_takeFloatFast(JNIEnv *env, jclass clazz,
439         jfloat v) {
440     return v == -9988.7766F;
441 }
442 
443 // @CriticalNative
444 // public static native boolean takeFloatCritical(float v);
StaticNonce_takeFloatCritical(jfloat v)445 static jboolean StaticNonce_takeFloatCritical(jfloat v) {
446     return v == -9988.7766F;
447 }
448 
449 // public static native boolean takeDouble(double v);
StaticNonce_takeDouble(JNIEnv * env,jclass clazz,jdouble v)450 static jboolean StaticNonce_takeDouble(JNIEnv *env, jclass clazz, jdouble v) {
451     return v == 999888777.666555;
452 }
453 
454 // @FastNative
455 // public static native boolean takeDoubleFast(double v);
StaticNonce_takeDoubleFast(JNIEnv * env,jclass clazz,jdouble v)456 static jboolean StaticNonce_takeDoubleFast(JNIEnv *env, jclass clazz,
457         jdouble v) {
458     return v == 999888777.666555;
459 }
460 
461 // @CriticalNative
462 // public static native boolean takeDoubleCritical(double v);
StaticNonce_takeDoubleCritical(jdouble v)463 static jboolean StaticNonce_takeDoubleCritical(jdouble v) {
464     return v == 999888777.666555;
465 }
466 
467 // public static native boolean takeNull(Object v);
StaticNonce_takeNull(JNIEnv * env,jclass clazz,jobject v)468 static jboolean StaticNonce_takeNull(JNIEnv *env, jclass clazz, jobject v) {
469     return v == NULL;
470 }
471 
472 // @FastNative
473 // public static native boolean takeNullFast(Object v);
StaticNonce_takeNullFast(JNIEnv * env,jclass clazz,jobject v)474 static jboolean StaticNonce_takeNullFast(JNIEnv *env, jclass clazz,
475         jobject v) {
476     return v == NULL;
477 }
478 
479 // public static native boolean takeString(String v);
StaticNonce_takeString(JNIEnv * env,jclass clazz,jstring v)480 static jboolean StaticNonce_takeString(JNIEnv *env, jclass clazz, jstring v) {
481     if (v == NULL) {
482         return false;
483     }
484 
485     const char *utf = (*env)->GetStringUTFChars(env, v, NULL);
486     jboolean result = (strcmp("fuzzbot", utf) == 0);
487 
488     (*env)->ReleaseStringUTFChars(env, v, utf);
489     return result;
490 }
491 
492 // @FastNative
493 // public static native boolean takeStringFast(String v);
StaticNonce_takeStringFast(JNIEnv * env,jclass clazz,jstring v)494 static jboolean StaticNonce_takeStringFast(JNIEnv *env, jclass clazz,
495         jstring v) {
496     return StaticNonce_takeString(env, clazz, v);
497 }
498 
499 // public static native boolean takeThisClass(Class v);
StaticNonce_takeThisClass(JNIEnv * env,jclass clazz,jclass v)500 static jboolean StaticNonce_takeThisClass(JNIEnv *env, jclass clazz,
501         jclass v) {
502     return (*env)->IsSameObject(env, clazz, v);
503 }
504 
505 // @FastNative
506 // public static native boolean takeThisClassFast(Class v);
StaticNonce_takeThisClassFast(JNIEnv * env,jclass clazz,jclass v)507 static jboolean StaticNonce_takeThisClassFast(JNIEnv *env, jclass clazz,
508         jclass v) {
509     return (*env)->IsSameObject(env, clazz, v);
510 }
511 
512 // public static native boolean takeIntLong(int v1, long v2);
StaticNonce_takeIntLong(JNIEnv * env,jclass clazz,jint v1,jlong v2)513 static jboolean StaticNonce_takeIntLong(JNIEnv *env, jclass clazz,
514         jint v1, jlong v2) {
515     return (v1 == 914) && (v2 == 9140914091409140914LL);
516 }
517 
518 // @FastNative
519 // public static native boolean takeIntLongFast(int v1, long v2);
StaticNonce_takeIntLongFast(JNIEnv * env,jclass clazz,jint v1,jlong v2)520 static jboolean StaticNonce_takeIntLongFast(JNIEnv *env, jclass clazz,
521         jint v1, jlong v2) {
522     return (v1 == 914) && (v2 == 9140914091409140914LL);
523 }
524 
525 // @CriticalNative
526 // public static native boolean takeIntLongCritical(int v1, long v2);
StaticNonce_takeIntLongCritical(jint v1,jlong v2)527 static jboolean StaticNonce_takeIntLongCritical(jint v1, jlong v2) {
528     return (v1 == 914) && (v2 == 9140914091409140914LL);
529 }
530 
531 // public static native boolean takeLongInt(long v1, int v2);
StaticNonce_takeLongInt(JNIEnv * env,jclass clazz,jlong v1,jint v2)532 static jboolean StaticNonce_takeLongInt(JNIEnv *env, jclass clazz,
533         jlong v1, jint v2) {
534     return (v1 == -4321LL) && (v2 == 12341234);
535 }
536 
537 // @FastNative
538 // public static native boolean takeLongIntFast(long v1, int v2);
StaticNonce_takeLongIntFast(JNIEnv * env,jclass clazz,jlong v1,jint v2)539 static jboolean StaticNonce_takeLongIntFast(JNIEnv *env, jclass clazz,
540         jlong v1, jint v2) {
541     return (v1 == -4321LL) && (v2 == 12341234);
542 }
543 
544 // @CriticalNative
545 // public static native boolean takeLongIntCritical(long v1, int v2);
StaticNonce_takeLongIntCritical(jlong v1,jint v2)546 static jboolean StaticNonce_takeLongIntCritical(jlong v1, jint v2) {
547     return (v1 == -4321LL) && (v2 == 12341234);
548 }
549 
550 // public static native boolean takeOneOfEach(boolean v0, byte v1, short v2,
551 //         char v3, int v4, long v5, String v6, float v7, double v8,
552 //         int[] v9);
StaticNonce_takeOneOfEach(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)553 static jboolean StaticNonce_takeOneOfEach(JNIEnv *env, jclass clazz,
554         jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
555         jstring v6, jfloat v7, jdouble v8, jintArray v9) {
556     jsize length;
557     jboolean result;
558 
559     if ((v0 != false) || (v1 != 1) || (v2 != 2) || (v3 != 3) ||
560             (v4 != 4) || (v5 != 5) || (v7 != 7.0f) || (v8 != 8.0)) {
561         return false;
562     }
563 
564     length = (*env)->GetStringUTFLength(env, v6);
565 
566     if (length != 3) {
567         throwException(env, "java/lang/AssertionError",
568                 "bad string length");
569         return false;
570     }
571 
572     const char *utf = (*env)->GetStringUTFChars(env, v6, NULL);
573     result = (strncmp("six", utf, 3) == 0);
574 
575     (*env)->ReleaseStringUTFChars(env, v6, utf);
576 
577     if (! result) {
578         return false;
579     }
580 
581     length = (*env)->GetArrayLength(env, v9);
582     if (length != 2) {
583         throwException(env, "java/lang/AssertionError",
584                 "bad array length");
585         return false;
586     }
587 
588     jint *elements = (*env)->GetIntArrayElements(env, v9, NULL);
589     result = (elements[0] == 9) && (elements[1] == 10);
590     (*env)->ReleaseIntArrayElements(env, v9, elements, JNI_ABORT);
591 
592     return result;
593 }
594 
595 // public static native boolean takeOneOfEachDlsym(boolean v0, byte v1,
596 //         short v2, char v3, int v4, long v5, String v6, float v7, double v8,
597 //         int[] v9);
Java_android_jni_cts_StaticNonce_takeOneOfEachDlsym(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)598 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachDlsym(
599         JNIEnv *env, jclass clazz, jboolean v0, jbyte v1, jshort v2, jchar v3,
600         jint v4, jlong v5, jstring v6, jfloat v7, jdouble v8, jintArray v9) {
601     return StaticNonce_takeOneOfEach(
602             env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
603 }
604 
605 // @FastNative
606 // public static native boolean takeOneOfEachFast(boolean v0, byte v1,
607 //         short v2, char v3, int v4, long v5, String v6, float v7, double v8,
608 //         int[] v9);
StaticNonce_takeOneOfEachFast(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)609 static jboolean StaticNonce_takeOneOfEachFast(JNIEnv *env, jclass clazz,
610         jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
611         jstring v6, jfloat v7, jdouble v8, jintArray v9) {
612     return StaticNonce_takeOneOfEach(
613             env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
614 }
615 
616 // @FastNative
617 // public static native boolean takeOneOfEachFastDlsym(boolean v0, byte v1,
618 //         short v2, char v3, int v4, long v5, String v6, float v7, double v8,
619 //         int[] v9);
Java_android_jni_cts_StaticNonce_takeOneOfEachFastDlsym(JNIEnv * env,jclass clazz,jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jstring v6,jfloat v7,jdouble v8,jintArray v9)620 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachFastDlsym(
621         JNIEnv *env, jclass clazz, jboolean v0, jbyte v1, jshort v2, jchar v3,
622         jint v4, jlong v5, jstring v6, jfloat v7, jdouble v8, jintArray v9) {
623     return StaticNonce_takeOneOfEach(
624             env, clazz, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
625 }
626 
627 // @CriticalNative
628 // public static native boolean takeOneOfEachCritical(boolean v0, byte v1,
629 //         short v2, char v3, int v4, long v5, float v6, double v7);
StaticNonce_takeOneOfEachCritical(jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jfloat v6,jdouble v7)630 static jboolean StaticNonce_takeOneOfEachCritical(
631         jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
632         jfloat v6, jdouble v7) {
633     return (v0 == false) && (v1 == 1) && (v2 == 2) && (v3 == 3) &&
634             (v4 == 4) && (v5 == 5) && (v6 == 6.0f) && (v7 == 7.0);
635 }
636 
637 // @CriticalNative
638 // public static native boolean takeOneOfEachCriticalDlsym(boolean v0, byte v1,
639 //         short v2, char v3, int v4, long v5, float v6, double v7);
Java_android_jni_cts_StaticNonce_takeOneOfEachCriticalDlsym(jboolean v0,jbyte v1,jshort v2,jchar v3,jint v4,jlong v5,jfloat v6,jdouble v7)640 JNIEXPORT jboolean Java_android_jni_cts_StaticNonce_takeOneOfEachCriticalDlsym(
641         jboolean v0, jbyte v1, jshort v2, jchar v3, jint v4, jlong v5,
642         jfloat v6, jdouble v7) {
643     return StaticNonce_takeOneOfEachCritical(v0, v1, v2, v3, v4, v5, v6, v7);
644 }
645 
646 // public static native boolean takeCoolHandLuke(
647 //         int v1, int v2, int v3, int v4,
648 //         int v5, int v6, int v7, int v8, int v9,
649 //         int v10, int v11, int v12, int v13, int v14,
650 //         int v15, int v16, int v17, int v18, int v19,
651 //         int v20, int v21, int v22, int v23, int v24,
652 //         int v25, int v26, int v27, int v28, int v29,
653 //         int v30, int v31, int v32, int v33, int v34,
654 //         int v35, int v36, int v37, int v38, int v39,
655 //         int v40, int v41, int v42, int v43, int v44,
656 //         int v45, int v46, int v47, int v48, int v49,
657 //         int v50);
StaticNonce_takeCoolHandLuke(JNIEnv * env,jclass clazz,jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)658 static jboolean StaticNonce_takeCoolHandLuke(JNIEnv *env, jclass clazz,
659         jint v1, jint v2, jint v3, jint v4,
660         jint v5, jint v6, jint v7, jint v8, jint v9,
661         jint v10, jint v11, jint v12, jint v13, jint v14,
662         jint v15, jint v16, jint v17, jint v18, jint v19,
663         jint v20, jint v21, jint v22, jint v23, jint v24,
664         jint v25, jint v26, jint v27, jint v28, jint v29,
665         jint v30, jint v31, jint v32, jint v33, jint v34,
666         jint v35, jint v36, jint v37, jint v38, jint v39,
667         jint v40, jint v41, jint v42, jint v43, jint v44,
668         jint v45, jint v46, jint v47, jint v48, jint v49,
669         jint v50) {
670     return (v1 == 1) && (v2 == 2) && (v3 == 3) &&
671         (v4 == 4) && (v5 == 5) && (v6 == 6) && (v7 == 7) &&
672         (v8 == 8) && (v9 == 9) &&
673         (v10 == 10) && (v11 == 11) && (v12 == 12) && (v13 == 13) &&
674         (v14 == 14) && (v15 == 15) && (v16 == 16) && (v17 == 17) &&
675         (v18 == 18) && (v19 == 19) &&
676         (v20 == 20) && (v21 == 21) && (v22 == 22) && (v23 == 23) &&
677         (v24 == 24) && (v25 == 25) && (v26 == 26) && (v27 == 27) &&
678         (v28 == 28) && (v29 == 29) &&
679         (v30 == 30) && (v31 == 31) && (v32 == 32) && (v33 == 33) &&
680         (v34 == 34) && (v35 == 35) && (v36 == 36) && (v37 == 37) &&
681         (v38 == 38) && (v39 == 39) &&
682         (v40 == 40) && (v41 == 41) && (v42 == 42) && (v43 == 43) &&
683         (v44 == 44) && (v45 == 45) && (v46 == 46) && (v47 == 47) &&
684         (v48 == 48) && (v49 == 49) &&
685         (v50 == 50);
686 }
687 
688 // @FastNative
689 // public static native boolean takeCoolHandLukeFast(
690 //         int v1, int v2, int v3, int v4,
691 //         int v5, int v6, int v7, int v8, int v9,
692 //         int v10, int v11, int v12, int v13, int v14,
693 //         int v15, int v16, int v17, int v18, int v19,
694 //         int v20, int v21, int v22, int v23, int v24,
695 //         int v25, int v26, int v27, int v28, int v29,
696 //         int v30, int v31, int v32, int v33, int v34,
697 //         int v35, int v36, int v37, int v38, int v39,
698 //         int v40, int v41, int v42, int v43, int v44,
699 //         int v45, int v46, int v47, int v48, int v49,
700 //         int v50);
StaticNonce_takeCoolHandLukeFast(JNIEnv * env,jclass clazz,jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)701 static jboolean StaticNonce_takeCoolHandLukeFast(JNIEnv *env, jclass clazz,
702         jint v1, jint v2, jint v3, jint v4,
703         jint v5, jint v6, jint v7, jint v8, jint v9,
704         jint v10, jint v11, jint v12, jint v13, jint v14,
705         jint v15, jint v16, jint v17, jint v18, jint v19,
706         jint v20, jint v21, jint v22, jint v23, jint v24,
707         jint v25, jint v26, jint v27, jint v28, jint v29,
708         jint v30, jint v31, jint v32, jint v33, jint v34,
709         jint v35, jint v36, jint v37, jint v38, jint v39,
710         jint v40, jint v41, jint v42, jint v43, jint v44,
711         jint v45, jint v46, jint v47, jint v48, jint v49,
712         jint v50) {
713     return StaticNonce_takeCoolHandLuke(
714             env, clazz, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
715             v11, v12, v13, v14, v15, v16, v17, v18, v19, v20,
716             v21, v22, v23, v24, v25, v26, v27, v28, v29, v30,
717             v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
718             v41, v42, v43, v44, v45, v46, v47, v48, v49, v50);
719 }
720 
721 // @CriticalNative
722 // public static native boolean takeCoolHandLukeCritical(
723 //         int v1, int v2, int v3, int v4,
724 //         int v5, int v6, int v7, int v8, int v9,
725 //         int v10, int v11, int v12, int v13, int v14,
726 //         int v15, int v16, int v17, int v18, int v19,
727 //         int v20, int v21, int v22, int v23, int v24,
728 //         int v25, int v26, int v27, int v28, int v29,
729 //         int v30, int v31, int v32, int v33, int v34,
730 //         int v35, int v36, int v37, int v38, int v39,
731 //         int v40, int v41, int v42, int v43, int v44,
732 //         int v45, int v46, int v47, int v48, int v49,
733 //         int v50);
StaticNonce_takeCoolHandLukeCritical(jint v1,jint v2,jint v3,jint v4,jint v5,jint v6,jint v7,jint v8,jint v9,jint v10,jint v11,jint v12,jint v13,jint v14,jint v15,jint v16,jint v17,jint v18,jint v19,jint v20,jint v21,jint v22,jint v23,jint v24,jint v25,jint v26,jint v27,jint v28,jint v29,jint v30,jint v31,jint v32,jint v33,jint v34,jint v35,jint v36,jint v37,jint v38,jint v39,jint v40,jint v41,jint v42,jint v43,jint v44,jint v45,jint v46,jint v47,jint v48,jint v49,jint v50)734 static jboolean StaticNonce_takeCoolHandLukeCritical(
735         jint v1, jint v2, jint v3, jint v4,
736         jint v5, jint v6, jint v7, jint v8, jint v9,
737         jint v10, jint v11, jint v12, jint v13, jint v14,
738         jint v15, jint v16, jint v17, jint v18, jint v19,
739         jint v20, jint v21, jint v22, jint v23, jint v24,
740         jint v25, jint v26, jint v27, jint v28, jint v29,
741         jint v30, jint v31, jint v32, jint v33, jint v34,
742         jint v35, jint v36, jint v37, jint v38, jint v39,
743         jint v40, jint v41, jint v42, jint v43, jint v44,
744         jint v45, jint v46, jint v47, jint v48, jint v49,
745         jint v50) {
746     return StaticNonce_takeCoolHandLuke(
747             NULL, NULL, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10,
748             v11, v12, v13, v14, v15, v16, v17, v18, v19, v20,
749             v21, v22, v23, v24, v25, v26, v27, v28, v29, v30,
750             v31, v32, v33, v34, v35, v36, v37, v38, v39, v40,
751             v41, v42, v43, v44, v45, v46, v47, v48, v49, v50);
752 }
753 
754 // @CriticalNative
755 // public static native boolean takeCoolHandLukeWithFloatsCritical(
756 //         int v1, int v2, int v3, int v4, int v5,
757 //         double v6, double v7, double v8, double v9, double v10,
758 //         double v11, double v12, double v13, double v14);
StaticNonce_takeCoolHandLukeWithFloatsCritical(jint v1,jint v2,jint v3,jint v4,jint v5,jdouble v6,jdouble v7,jdouble v8,jdouble v9,jdouble v10,jdouble v11,jdouble v12,jdouble v13,jdouble v14)759 static jboolean StaticNonce_takeCoolHandLukeWithFloatsCritical(
760         jint v1, jint v2, jint v3, jint v4, jint v5,
761         jdouble v6, jdouble v7, jdouble v8, jdouble v9,
762         jdouble v10, jdouble v11, jdouble v12, jdouble v13,
763         jdouble v14) {
764     return (v1 == 1) && (v2 == 2) && (v3 == 3) && (v4 == 4) && (v5 == 5) &&
765         (v6 == 6.0) && (v7 == 7.0) && (v8 == 8.0) && (v9 == 9.0) &&
766         (v10 == 10.0) && (v11 == 11.0) && (v12 == 12.0) && (v13 == 13.0) &&
767         (v14 == 14.0);
768 }
769 
770 static JNINativeMethod methods[] = {
771     // name, signature, function
772     { "nop",               "()V", StaticNonce_nop },
773     { "nopFast",           "()V", StaticNonce_nopFast },
774     { "nopCritical",       "()V", StaticNonce_nopCritical },
775     { "returnBoolean",     "()Z", StaticNonce_returnBoolean },
776     { "returnBooleanFast", "()Z", StaticNonce_returnBooleanFast },
777     { "returnBooleanCritical", "()Z", StaticNonce_returnBooleanCritical },
778     { "returnByte",        "()B", StaticNonce_returnByte },
779     { "returnByteFast",    "()B", StaticNonce_returnByteFast },
780     { "returnByteCritical", "()B", StaticNonce_returnByteCritical },
781     { "returnShort",       "()S", StaticNonce_returnShort },
782     { "returnShortFast",   "()S", StaticNonce_returnShortFast },
783     { "returnShortCritical", "()S", StaticNonce_returnShortCritical },
784     { "returnChar",        "()C", StaticNonce_returnChar },
785     { "returnCharFast",    "()C", StaticNonce_returnCharFast },
786     { "returnCharCritical", "()C", StaticNonce_returnCharCritical },
787     { "returnInt",         "()I", StaticNonce_returnInt },
788     { "returnIntFast",     "()I", StaticNonce_returnIntFast },
789     { "returnIntCritical", "()I", StaticNonce_returnIntCritical },
790     { "returnLong",        "()J", StaticNonce_returnLong },
791     { "returnLongFast",    "()J", StaticNonce_returnLongFast },
792     { "returnLongCritical", "()J", StaticNonce_returnLongCritical },
793     { "returnFloat",       "()F", StaticNonce_returnFloat },
794     { "returnFloatFast",   "()F", StaticNonce_returnFloatFast },
795     { "returnFloatCritical", "()F", StaticNonce_returnFloatCritical },
796     { "returnDouble",      "()D", StaticNonce_returnDouble },
797     { "returnDoubleFast",  "()D", StaticNonce_returnDoubleFast },
798     { "returnDoubleCritical", "()D", StaticNonce_returnDoubleCritical },
799     { "returnNull",        "()Ljava/lang/Object;", StaticNonce_returnNull },
800     { "returnNullFast",    "()Ljava/lang/Object;",
801       StaticNonce_returnNullFast },
802     { "returnString",      "()Ljava/lang/String;", StaticNonce_returnString },
803     { "returnStringFast",  "()Ljava/lang/String;",
804       StaticNonce_returnStringFast },
805     { "returnShortArray",  "()[S", StaticNonce_returnShortArray },
806     { "returnShortArrayFast", "()[S", StaticNonce_returnShortArrayFast },
807     { "returnStringArray", "()[Ljava/lang/String;",
808       StaticNonce_returnStringArray },
809     { "returnStringArrayFast", "()[Ljava/lang/String;",
810       StaticNonce_returnStringArrayFast },
811     { "returnThisClass",   "()Ljava/lang/Class;",
812       StaticNonce_returnThisClass },
813     { "returnThisClassFast", "()Ljava/lang/Class;",
814       StaticNonce_returnThisClassFast },
815     { "returnInstance",    "()Landroid/jni/cts/StaticNonce;",
816       StaticNonce_returnInstance },
817     { "returnInstanceFast", "()Landroid/jni/cts/StaticNonce;",
818       StaticNonce_returnInstanceFast },
819     { "takeBoolean",       "(Z)Z", StaticNonce_takeBoolean },
820     { "takeBooleanFast",   "(Z)Z", StaticNonce_takeBooleanFast },
821     { "takeBooleanCritical", "(Z)Z", StaticNonce_takeBooleanCritical },
822     { "takeByte",          "(B)Z", StaticNonce_takeByte },
823     { "takeByteFast",      "(B)Z", StaticNonce_takeByteFast },
824     { "takeByteCritical",  "(B)Z", StaticNonce_takeByteCritical },
825     { "takeShort",         "(S)Z", StaticNonce_takeShort },
826     { "takeShortFast",     "(S)Z", StaticNonce_takeShortFast },
827     { "takeShortCritical", "(S)Z", StaticNonce_takeShortCritical },
828     { "takeChar",          "(C)Z", StaticNonce_takeChar },
829     { "takeCharFast",      "(C)Z", StaticNonce_takeCharFast },
830     { "takeCharCritical",  "(C)Z", StaticNonce_takeCharCritical },
831     { "takeInt",           "(I)Z", StaticNonce_takeInt },
832     { "takeIntFast",       "(I)Z", StaticNonce_takeIntFast },
833     { "takeIntCritical",   "(I)Z", StaticNonce_takeIntCritical },
834     { "takeLong",          "(J)Z", StaticNonce_takeLong },
835     { "takeLongFast",      "(J)Z", StaticNonce_takeLongFast },
836     { "takeLongCritical",  "(J)Z", StaticNonce_takeLongCritical },
837     { "takeFloat",         "(F)Z", StaticNonce_takeFloat },
838     { "takeFloatFast",     "(F)Z", StaticNonce_takeFloatFast },
839     { "takeFloatCritical", "(F)Z", StaticNonce_takeFloatCritical },
840     { "takeDouble",        "(D)Z", StaticNonce_takeDouble },
841     { "takeDoubleFast",    "(D)Z", StaticNonce_takeDoubleFast },
842     { "takeDoubleCritical", "(D)Z", StaticNonce_takeDoubleCritical },
843     { "takeNull",          "(Ljava/lang/Object;)Z", StaticNonce_takeNull },
844     { "takeNullFast",      "(Ljava/lang/Object;)Z", StaticNonce_takeNullFast },
845     { "takeString",        "(Ljava/lang/String;)Z", StaticNonce_takeString },
846     { "takeStringFast",    "(Ljava/lang/String;)Z",
847       StaticNonce_takeStringFast },
848     { "takeThisClass",     "(Ljava/lang/Class;)Z", StaticNonce_takeThisClass },
849     { "takeThisClassFast", "(Ljava/lang/Class;)Z",
850       StaticNonce_takeThisClassFast },
851     { "takeIntLong",       "(IJ)Z", StaticNonce_takeIntLong },
852     { "takeIntLongFast",   "(IJ)Z", StaticNonce_takeIntLongFast },
853     { "takeIntLongCritical", "(IJ)Z", StaticNonce_takeIntLongCritical },
854     { "takeLongInt",       "(JI)Z", StaticNonce_takeLongInt },
855     { "takeLongIntFast",   "(JI)Z", StaticNonce_takeLongIntFast },
856     { "takeLongIntCritical", "(JI)Z", StaticNonce_takeLongIntCritical },
857     { "takeOneOfEach",     "(ZBSCIJLjava/lang/String;FD[I)Z",
858       StaticNonce_takeOneOfEach },
859     { "takeOneOfEachFast", "(ZBSCIJLjava/lang/String;FD[I)Z",
860       StaticNonce_takeOneOfEachFast },
861     { "takeOneOfEachCritical", "(ZBSCIJFD)Z",
862       StaticNonce_takeOneOfEachCritical },
863     { "takeCoolHandLuke",
864       "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
865       StaticNonce_takeCoolHandLuke },
866     { "takeCoolHandLukeFast",
867       "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
868       StaticNonce_takeCoolHandLukeFast },
869     { "takeCoolHandLukeCritical",
870       "(IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII)Z",
871       StaticNonce_takeCoolHandLukeCritical },
872     { "takeCoolHandLukeWithFloatsCritical",
873       "(IIIIIDDDDDDDDD)Z",
874       StaticNonce_takeCoolHandLukeWithFloatsCritical },
875 };
876 
register_StaticNonce(JNIEnv * env)877 int register_StaticNonce(JNIEnv *env) {
878     return registerJniMethods(
879             env, "android/jni/cts/StaticNonce",
880             methods, sizeof(methods) / sizeof(JNINativeMethod));
881 }
882