| 1 | #include <stdio.h>
|
|---|
| 2 | #include <calls.h>
|
|---|
| 3 |
|
|---|
| 4 | jint
|
|---|
| 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)->GetMethodID (env, klass, "void_f", "()V");
|
|---|
| 51 | (*env)->CallVoidMethod (env, _this, method);
|
|---|
| 52 |
|
|---|
| 53 | method = (*env)->GetStaticMethodID (env, klass, "short_f", "()S");
|
|---|
| 54 | s = (*env)->CallStaticShortMethod (env, klass, method);
|
|---|
| 55 | if (s != 2)
|
|---|
| 56 | ++fails;
|
|---|
| 57 |
|
|---|
| 58 | method = (*env)->GetMethodID (env, klass, "double_f", "()D");
|
|---|
| 59 | d = (*env)->CallDoubleMethod (env, _this, method);
|
|---|
| 60 | if (d != -1.0)
|
|---|
| 61 | ++fails;
|
|---|
| 62 |
|
|---|
| 63 | method = (*env)->GetMethodID (env, klass, "float_f", "()F");
|
|---|
| 64 | f = (*env)->CallFloatMethod (env, _this, method);
|
|---|
| 65 | if (f != 1.0)
|
|---|
| 66 | ++fails;
|
|---|
| 67 |
|
|---|
| 68 | return fails;
|
|---|
| 69 | }
|
|---|