2002-07-18 Dietmar Maurer <dietmar@ximian.com>
[mono.git] / mono / tests / libtest.c
1 #include <stdio.h>
2
3 int mono_test_many_int_arguments (int a, int b, int c, int d, int e,
4                                   int f, int g, int h, int i, int j);
5 short mono_test_many_short_arguments (short a, short b, short c, short d, short e,
6                                       short f, short g, short h, short i, short j);
7 char mono_test_many_char_arguments (char a, char b, char c, char d, char e,
8                                     char f, char g, char h, char i, char j);
9
10 int
11 mono_test_many_int_arguments (int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
12 {
13         return a + b + c + d + e + f + g + h + i + j;
14 }
15
16 short
17 mono_test_many_short_arguments (short a, short b, short c, short d, short e, short f, short g, short h, short i, short j)
18 {
19         return a + b + c + d + e + f + g + h + i + j;
20 }
21
22 char
23 mono_test_many_byte_arguments (char a, char b, char c, char d, char e, char f, char g, char h, char i, char j)
24 {
25         return a + b + c + d + e + f + g + h + i + j;
26 }
27
28 int
29 mono_test_puts_static (char *s)
30 {
31         printf ("TEST %s\n", s);
32         return 1;
33 }
34
35 typedef int (*SimpleDelegate3) (int a, int b);
36
37 int
38 mono_invoke_delegate (SimpleDelegate3 delegate)
39 {
40         int res;
41
42         printf ("start invoke %p\n", delegate);
43
44         res = delegate (2, 3);
45
46         printf ("end invoke\n");
47
48         return res;
49 }
50
51 int 
52 mono_test_marshal_char (short a1)
53 {
54         if (a1 = 'a')
55                 return 0;
56         
57         return 1;
58 }
59
60 int 
61 mono_test_marshal_array (int *a1)
62 {
63         int i, sum = 0;
64
65         for (i = 0; i < 50; i++)
66                 sum += a1 [i];
67         
68         return sum;
69 }
70
71 typedef struct {
72         int a;
73         int b;
74         int c;
75         char *d;
76 } simplestruct;
77
78 simplestruct
79 mono_test_return_vtype ()
80 {
81         simplestruct res;
82
83         res.a = 0;
84         res.b = 1;
85         res.c = 0;
86         res.d = "TEST";
87
88         return res;
89 }
90
91 int 
92 mono_test_marshal_struct (simplestruct ss)
93 {
94         if (ss.a == 0 && ss.b == 1 && ss.c == 0 &&
95             !strcmp (ss.d, "TEST"))
96                 return 0;
97
98         return 1;
99 }
100
101
102 typedef int (*SimpleDelegate) (int a);
103
104 int
105 mono_test_marshal_delegate (SimpleDelegate delegate)
106 {
107         return delegate (2);
108 }
109
110 typedef int (*SimpleDelegate2) (simplestruct ss);
111
112 int
113 mono_test_marshal_delegate2 (SimpleDelegate2 delegate)
114 {
115         simplestruct ss;
116
117         ss.a = 0;
118         ss.b = 1;
119         ss.c = 0;
120         ss.d = "TEST";
121
122         return delegate (ss);
123 }
124