annotate test/callback_suite/do_test.c @ 487:d8f0e6cecdab

- simplified test/callback_suite
author Tassilo Philipp
date Fri, 18 Mar 2022 09:47:18 +0100
parents 7608e34098b0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: test
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: test/callback_suite/do_test.c
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
281
f5577f6bf97a - file header cleanups for release
Tassilo Philipp
parents: 0
diff changeset
9 Copyright (c) 2011-2018 Daniel Adler <dadler@uni-goettingen.de>,
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 Tassilo Philipp <tphilipp@potion-studios.com>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 #include <assert.h>
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
27 #include <stdio.h>
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 #include "dyncall_callback.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 #include "env.h"
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
30
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
32 /* arguments filled-in by callback handlers, and return value */
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
33 DCValue Args[CONFIG_MAXARGS];
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
34 DCValue Result;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
35
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
36
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
37 static int CompareValues(char type, DCValue* a, DCValue* b)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 switch(type)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 {
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
41 case DC_SIGCHAR_BOOL: return (a->B == b->B);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
42 case DC_SIGCHAR_CHAR: return (a->c == b->c);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
43 case DC_SIGCHAR_UCHAR: return (a->C == b->C);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
44 case DC_SIGCHAR_SHORT: return (a->s == b->s);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
45 case DC_SIGCHAR_USHORT: return (a->S == b->S);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
46 case DC_SIGCHAR_INT: return (a->i == b->i);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
47 case DC_SIGCHAR_UINT: return (a->I == b->I);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
48 case DC_SIGCHAR_LONG: return (a->j == b->j);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
49 case DC_SIGCHAR_ULONG: return (a->J == b->J);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
50 case DC_SIGCHAR_LONGLONG: return (a->l == b->l);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
51 case DC_SIGCHAR_ULONGLONG: return (a->L == b->L);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
52 case DC_SIGCHAR_FLOAT: return (a->f == b->f);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
53 case DC_SIGCHAR_DOUBLE: return (a->d == b->d);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
54 case DC_SIGCHAR_POINTER: return (a->p == b->p);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 default: assert(0);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 }
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
57 return 0;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
60
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
61 static int Compare(const char* signature)
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 DCValue ref;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 int total = 1;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 int pos;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 int isequal;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 char ch;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 /* check arguments */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 pos = 0;
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
71 for(;;)
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
72 {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
73 ch = *signature++;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
74
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
75 if(ch == DC_SIGCHAR_CC_PREFIX) {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
76 ++signature; /* skip cconv prefix */
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
77 continue;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
78 }
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
80 if (!ch || ch == DC_SIGCHAR_ENDARG) break;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 GetReferenceArg(&ref, ch, pos);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 isequal = CompareValues( ch, &ref, &Args[pos] );
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 if ( !isequal ) {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 if (OptionVerbose) { total = 0; fprintf(stdout, " @%d[%c] ", pos, ch); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 else return 0;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 }
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
87 ++pos;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
90 if(ch == DC_SIGCHAR_ENDARG)
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
91 ch = *signature;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 /* check result */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 GetReferenceResult(&ref, ch);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 isequal = CompareValues(ch, &ref, &Result);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 if (!isequal) {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 if (OptionVerbose) { total = 0; fprintf(stdout, " @-1 "); }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 else return 0;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103 return total;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
107 static char handler(DCCallback* that, DCArgs* input, DCValue* output, void* userdata)
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
108 {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
109 const char* signature = (const char*) userdata;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
110 int pos = 0;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
111 char ch;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
112
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
113 for(;;) {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
114 ch = *signature++;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
115 if (!ch || ch == DC_SIGCHAR_ENDARG) break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
116 Args[pos].L = 0xDEADC0DECAFEBABELL;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
117 switch(ch) {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
118 case DC_SIGCHAR_BOOL: Args[pos].B = dcbArgBool (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
119 case DC_SIGCHAR_CHAR: Args[pos].c = dcbArgChar (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
120 case DC_SIGCHAR_UCHAR: Args[pos].C = dcbArgUChar (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
121 case DC_SIGCHAR_SHORT: Args[pos].s = dcbArgShort (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
122 case DC_SIGCHAR_USHORT: Args[pos].S = dcbArgUShort (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
123 case DC_SIGCHAR_INT: Args[pos].i = dcbArgInt (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
124 case DC_SIGCHAR_UINT: Args[pos].I = dcbArgUInt (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
125 case DC_SIGCHAR_LONG: Args[pos].j = dcbArgLong (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
126 case DC_SIGCHAR_ULONG: Args[pos].J = dcbArgULong (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
127 case DC_SIGCHAR_LONGLONG: Args[pos].l = dcbArgLongLong (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
128 case DC_SIGCHAR_ULONGLONG:Args[pos].L = dcbArgULongLong(input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
129 case DC_SIGCHAR_FLOAT: Args[pos].f = dcbArgFloat (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
130 case DC_SIGCHAR_DOUBLE: Args[pos].d = dcbArgDouble (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
131 case DC_SIGCHAR_STRING:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
132 case DC_SIGCHAR_POINTER: Args[pos].p = dcbArgPointer (input); break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
133 case DC_SIGCHAR_CC_PREFIX: ++signature; /* skip cconv prefix */ continue;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
134 }
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
135 ++pos;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
136 }
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
137
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
138 if(ch == DC_SIGCHAR_ENDARG)
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
139 ch = *signature;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
140
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
141 /* @@@ unsupported result types or missing retval sig char */
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
142 switch(ch) {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
143 case DC_SIGCHAR_BOOL:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
144 case DC_SIGCHAR_CHAR:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
145 case DC_SIGCHAR_UCHAR:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
146 case DC_SIGCHAR_SHORT:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
147 case DC_SIGCHAR_USHORT:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
148 case DC_SIGCHAR_INT:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
149 case DC_SIGCHAR_UINT:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
150 case DC_SIGCHAR_LONG:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
151 case DC_SIGCHAR_ULONG:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
152 case DC_SIGCHAR_LONGLONG:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
153 case DC_SIGCHAR_ULONGLONG:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
154 case DC_SIGCHAR_FLOAT:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
155 case DC_SIGCHAR_DOUBLE:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
156 case DC_SIGCHAR_STRING:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
157 case DC_SIGCHAR_POINTER:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
158 break;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
159 case DC_SIGCHAR_VOID:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
160 case DC_SIGCHAR_AGGREGATE:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
161 default:
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
162 assert(0); return 'v';
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
163 }
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
164
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
165 GetReferenceResult(output, ch);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
166
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
167 return ch;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
168 }
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
169
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
170
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
171 /* index range: [0,CONFIG_NSIGS[ */
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
172 static const char* GetSignature(int index)
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
173 {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
174 static const char* sigstrings[CONFIG_NSIGS] = {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
175 #include "_auto_sigstrings.h"
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
176 };
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
177
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
178 return sigstrings[index];
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
179 }
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
180
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
181
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
182 #define X(CH,T) typedef T CH;
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
183 DEF_TYPES
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
184 #undef X
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
185
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
186 #define M ValueMatrix
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
187 #include "_auto_invoke_macros.h"
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
188 #include "_auto_invokers.h"
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
189 #undef M
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
190
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
191 void (*invokers[CONFIG_NSIGS])(void*) = {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
192 #include "_auto_invoke_table.h"
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
193 };
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
194
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
195
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 int DoTest(int id)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198 {
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 const char* signature;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200 DCCallback* pcb;
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
201 int result, index = id - 1;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203 signature = GetSignature(index);
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
204 printf("f%d(\t%s", id, signature);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
206 pcb = dcbNewCallback(signature, handler, (void*)signature, NULL);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207 assert(pcb != NULL);
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
208
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
209 /* invoke call */
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
210 invokers[index]((void*)pcb);
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
211
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 result = Compare(signature);
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
213 printf(" :%d\n", result);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 dcbFreeCallback(pcb);
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
215
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 return result;
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218