| 1 | #include <stdio.h>
|
|---|
| 2 | #include <calls.h>
|
|---|
| 3 |
|
|---|
| 4 | JNIEXPORT jint JNICALL
|
|---|
| 5 | Java_calls_docall (JNIEnv *env, jobject _this)
|
|---|
| 6 | {
|
|---|
| 7 | jmethodID method;
|
|---|
| 8 | jclass klass, super;
|
|---|
| 9 |
|
|---|
| 10 | jbyte b;
|
|---|
| 11 | jshort s;
|
|---|
| 12 | jchar c;
|
|---|
| 13 | jint i;
|
|---|
| 14 | jlong l;
|
|---|
| 15 | jfloat f;
|
|---|
| 16 | jdouble d;
|
|---|
| 17 |
|
|---|
| 18 | jvalue val;
|
|---|
| 19 |
|
|---|
| 20 | jint fails = 0;
|
|---|
| 21 |
|
|---|
| 22 | klass = (*env)->GetObjectClass (env, _this);
|
|---|
| 23 | super = (*env)->GetSuperclass (env, klass);
|
|---|
| 24 |
|
|---|
| 25 | method = (*env)->GetMethodID (env, klass, "byte_f", "()B");
|
|---|
| 26 | b = (*env)->CallByteMethod (env, _this, method);
|
|---|
| 27 | if (b != 23)
|
|---|
| 28 | ++fails;
|
|---|
| 29 |
|
|---|
| 30 | method = (*env)->GetMethodID (env, klass, "char_f", "(I)C");
|
|---|
| 31 | val.i = 10;
|
|---|
| 32 | c = (*env)->CallCharMethodA (env, _this, method, &val);
|
|---|
| 33 | if (c != ('a' + 10))
|
|---|
| 34 | ++fails;
|
|---|
| 35 |
|
|---|
| 36 | method = (*env)->GetMethodID (env, super, "int_f", "()I");
|
|---|
| 37 | i = (*env)->CallNonvirtualIntMethod (env, _this, super, method);
|
|---|
| 38 | if (i != 27)
|
|---|
| 39 | ++fails;
|
|---|
| 40 |
|
|---|
| 41 | i = (*env)->CallIntMethod (env, _this, method);
|
|---|
| 42 | if (i != 1023)
|
|---|
| 43 | ++fails;
|
|---|
| 44 |
|
|---|
| 45 | method = (*env)->GetStaticMethodID (env, klass, "long_f", "(J)J");
|
|---|
| 46 | l = (*env)->CallStaticLongMethod (env, klass, method, (jlong) 10);
|
|---|
| 47 | if (l != 2033)
|
|---|
| 48 | ++fails;
|
|---|
| 49 |
|
|---|
| 50 | method = (*env)->GetStaticMethodID (env, klass, "longpb_f", "(BJBJBJ)J");
|
|---|
| 51 | l = (*env)->CallStaticLongMethod (env, klass, method, (jbyte) 13, (jlong) 3,
|
|---|
| 52 | (jbyte) 13, (jlong) 3, (jbyte) 13, (jlong) 4);
|
|---|
| 53 | if (l != 3033)
|
|---|
| 54 | ++fails;
|
|---|
| 55 |
|
|---|
| 56 | method = (*env)->GetMethodID (env, klass, "void_f", "()V");
|
|---|
| 57 | (*env)->CallVoidMethod (env, _this, method);
|
|---|
| 58 |
|
|---|
| 59 | method = (*env)->GetStaticMethodID (env, klass, "short_f", "()S");
|
|---|
| 60 | s = (*env)->CallStaticShortMethod (env, klass, method);
|
|---|
| 61 | if (s != 2)
|
|---|
| 62 | ++fails;
|
|---|
| 63 |
|
|---|
| 64 | method = (*env)->GetMethodID (env, klass, "double_f", "()D");
|
|---|
|
|---|