summaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.jni/calls.c
blob: 709e55d13ba2405c96a718fa6996a4b56ca64df5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <calls.h>

JNIEXPORT jint JNICALL
Java_calls_docall (JNIEnv *env, jobject _this)
{
  jmethodID method;
  jclass klass, super;

  jbyte b;
  jshort s;
  jchar c;
  jint i;
  jlong l;
  jfloat f;
  jdouble d;

  jvalue val;

  jint fails = 0;

  klass = (*env)->GetObjectClass (env, _this);
  super = (*env)->GetSuperclass (env, klass);

  method = (*env)->GetMethodID (env, klass, "byte_f", "()B");
  b = (*env)->CallByteMethod (env, _this, method);
  if (b != 23)
    ++fails;

  method = (*env)->GetMethodID (env, klass, "char_f", "(I)C");
  val.i = 10;
  c = (*env)->CallCharMethodA (env, _this, method, &val);
  if (c != ('a' + 10))
    ++fails;

  method = (*env)->GetMethodID (env, super, "int_f", "()I");
  i = (*env)->CallNonvirtualIntMethod (env, _this, super, method);
  if (i != 27)
    ++fails;

  i = (*env)->CallIntMethod (env, _this, method);
  if (i != 1023)
    ++fails;

  method = (*env)->GetStaticMethodID (env, klass, "long_f", "(J)J");
  l = (*env)->CallStaticLongMethod (env, klass, method, (jlong) 10);
  if (l != 2033)
    ++fails;

  method = (*env)->GetStaticMethodID (env, klass, "longpb_f", "(BJBJBJ)J");
  l = (*env)->CallStaticLongMethod (env, klass, method, (jbyte) 13, (jlong) 3,
		  		   (jbyte) 13, (jlong) 3, (jbyte) 13, (jlong) 4);
  if (l != 3033)
    ++fails;

  method = (*env)->GetMethodID (env, klass, "void_f", "()V");
  (*env)->CallVoidMethod (env, _this, method);

  method = (*env)->GetStaticMethodID (env, klass, "short_f", "()S");
  s = (*env)->CallStaticShortMethod (env, klass, method);
  if (s != 2)
    ++fails;

  method = (*env)->GetMethodID (env, klass, "double_f", "()D");
  d = (*env)->CallDoubleMethod (env, _this, method);
  if (d != -1.0)
    ++fails;

  method = (*env)->GetMethodID (env, klass, "float_f", "()F");
  f = (*env)->CallFloatMethod (env, _this, method);
  if (f != 1.0)
    ++fails;

  return fails;
}