annotate test/callback_suite/main.c @ 507:5a3c07a0f376

cleanups
author Tassilo Philipp
date Sat, 09 Apr 2022 14:00:59 +0200
parents 049e04af13c8
children f3d44195dbdf
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/main.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
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
9 Copyright (c) 2011-2022 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
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
26 #include <stdio.h>
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 #include <stdlib.h>
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
28 #include <assert.h>
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
29 #include "dyncall_callback.h"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
30 #include "globals.h"
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 #include "../common/platformInit.h"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 #include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
35
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
36
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
37 static void print_usage(const char* appName)
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
38 {
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
39 printf("usage:\n\
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
40 %s [ from [to] ]\n\
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
41 where\n\
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
42 from, to: test range (0-based, runs single test if \"to\" is omitted)\n\
410
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
43 options\n\
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
44 -h help on usage\n\
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
45 \n\
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
46 ", appName);
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
47 }
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
48
7608e34098b0 - cleanups, simplifications, some api clarification, ...
Tassilo Philipp
parents: 281
diff changeset
49
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
50 /* -------------- this was do_test.c -------------------------- this was do_test.c ------------> */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
51
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
52 static int cmp_values(char type, DCValue* a, DCValue* b)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
53 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
54 switch(type)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
55 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
56 case DC_SIGCHAR_BOOL: return (a->B == b->B);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
57 case DC_SIGCHAR_CHAR: return (a->c == b->c);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
58 case DC_SIGCHAR_UCHAR: return (a->C == b->C);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
59 case DC_SIGCHAR_SHORT: return (a->s == b->s);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
60 case DC_SIGCHAR_USHORT: return (a->S == b->S);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
61 case DC_SIGCHAR_INT: return (a->i == b->i);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
62 case DC_SIGCHAR_UINT: return (a->I == b->I);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
63 case DC_SIGCHAR_LONG: return (a->j == b->j);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
64 case DC_SIGCHAR_ULONG: return (a->J == b->J);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
65 case DC_SIGCHAR_LONGLONG: return (a->l == b->l);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
66 case DC_SIGCHAR_ULONGLONG: return (a->L == b->L);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
67 case DC_SIGCHAR_FLOAT: return (a->f == b->f);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
68 case DC_SIGCHAR_DOUBLE: return (a->d == b->d);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
69 case DC_SIGCHAR_POINTER: return (a->p == b->p);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
70 default: assert(0);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
71 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
72 return 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
73 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
74
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
75
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
76 static int cmp(const char* signature)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
77 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
78 DCValue ref;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
79 int r = 1;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
80 int pos;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
81 char ch;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
82
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
83 /* check arguments */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
84 pos = 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
85 for(;;)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
86 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
87 ch = *signature++;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
88
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
89 if(ch == DC_SIGCHAR_CC_PREFIX) {
507
5a3c07a0f376 cleanups
Tassilo Philipp
parents: 505
diff changeset
90 ++signature; /* skip cconv prefix */
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
91 continue;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
92 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
93
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
94 if (!ch || ch == DC_SIGCHAR_ENDARG)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
95 break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
96
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
97 get_reference_arg(&ref, ch, pos);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
98
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
99 if ( !cmp_values( ch, &ref, &Args[pos] ) ) {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
100 r = 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
101 printf(" @%d[%c] ", pos, ch);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
102 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
103 ++pos;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
104 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
105
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
106 if(ch == DC_SIGCHAR_ENDARG)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
107 ch = *signature;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
108
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
109 /* check result */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
110 get_reference_result(&ref, ch);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
111
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
112 if (!cmp_values(ch, &ref, &Result)) {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
113 r = 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
114 printf(" @-1 ");
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
115 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
116
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
117 return r;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
118 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
119
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
120
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
121 static char handler(DCCallback* that, DCArgs* input, DCValue* output, void* userdata)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
122 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
123 const char* signature = (const char*) userdata;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
124 int pos = 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
125 char ch;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
127 for(;;) {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
128 ch = *signature++;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
129 if (!ch || ch == DC_SIGCHAR_ENDARG) break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
130 Args[pos].L = 0xDEADC0DECAFEBABELL;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
131 switch(ch) {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
132 case DC_SIGCHAR_BOOL: Args[pos].B = dcbArgBool (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
133 case DC_SIGCHAR_CHAR: Args[pos].c = dcbArgChar (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
134 case DC_SIGCHAR_UCHAR: Args[pos].C = dcbArgUChar (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
135 case DC_SIGCHAR_SHORT: Args[pos].s = dcbArgShort (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
136 case DC_SIGCHAR_USHORT: Args[pos].S = dcbArgUShort (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
137 case DC_SIGCHAR_INT: Args[pos].i = dcbArgInt (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
138 case DC_SIGCHAR_UINT: Args[pos].I = dcbArgUInt (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
139 case DC_SIGCHAR_LONG: Args[pos].j = dcbArgLong (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
140 case DC_SIGCHAR_ULONG: Args[pos].J = dcbArgULong (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
141 case DC_SIGCHAR_LONGLONG: Args[pos].l = dcbArgLongLong (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
142 case DC_SIGCHAR_ULONGLONG:Args[pos].L = dcbArgULongLong(input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
143 case DC_SIGCHAR_FLOAT: Args[pos].f = dcbArgFloat (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
144 case DC_SIGCHAR_DOUBLE: Args[pos].d = dcbArgDouble (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
145 case DC_SIGCHAR_STRING:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
146 case DC_SIGCHAR_POINTER: Args[pos].p = dcbArgPointer (input); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
147 case DC_SIGCHAR_CC_PREFIX: ++signature; /* skip cconv prefix */ continue;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
148 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
149 ++pos;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
150 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
151
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
152 if(ch == DC_SIGCHAR_ENDARG)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
153 ch = *signature;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
154
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
155 /* @@@ unsupported result types or missing retval sig char */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
156 switch(ch) {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
157 case DC_SIGCHAR_BOOL:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
158 case DC_SIGCHAR_CHAR:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
159 case DC_SIGCHAR_UCHAR:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
160 case DC_SIGCHAR_SHORT:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
161 case DC_SIGCHAR_USHORT:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
162 case DC_SIGCHAR_INT:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
163 case DC_SIGCHAR_UINT:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
164 case DC_SIGCHAR_LONG:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
165 case DC_SIGCHAR_ULONG:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
166 case DC_SIGCHAR_LONGLONG:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
167 case DC_SIGCHAR_ULONGLONG:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
168 case DC_SIGCHAR_FLOAT:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
169 case DC_SIGCHAR_DOUBLE:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
170 case DC_SIGCHAR_STRING:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
171 case DC_SIGCHAR_POINTER:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
172 break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
173 case DC_SIGCHAR_VOID:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
174 case DC_SIGCHAR_AGGREGATE:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
175 default:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
176 assert(0); return DC_SIGCHAR_VOID;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
177 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
178
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
179 get_reference_result(output, ch);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
180
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
181 return ch;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
182 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
183
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
184
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
185
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
186
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
187 static int run_test(int id)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
188 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
189 const char* signature;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
190 DCCallback* pcb;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
191 int result;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
192
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
193 /* index range: [0,nsigs[ */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
194 signature = G_sigtab[id];
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
195 printf("%d:%s", id, signature);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
196
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
197 pcb = dcbNewCallback(signature, handler, (void*)signature, NULL);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
198 assert(pcb != NULL);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
199
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
200 /* invoke call */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
201 G_funtab[id]((void*)pcb);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
202
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
203 result = cmp(signature);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
204 printf(":%d\n", result);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
205 dcbFreeCallback(pcb);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
206
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
207 return result;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
208 }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
209
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
210
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
211 static int run_all(int from, int to)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
212 {
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
213 int i;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
214 int failure = 0;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
215 for(i=from; i<=to ;++i)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
216 failure |= !( run_test(i) );
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
217
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
218 return !failure;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
219 }
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
222 #define Error(X, Y, N) { fprintf(stderr, X, Y); print_usage(N); exit(1); }
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
223
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
224 int main(int argc, char* argv[])
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
225 {
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
226 int from = 0, to = G_ncases-1;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
227 int i, pos = 0, total;
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
228
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
229 dcTest_initPlatform();
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
230
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
231
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
232 /* parse args */
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
233 for(i=1; i<argc; ++i)
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
234 {
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
235 if(argv[i][0] == '-')
495
45ac093ca822 - test/callback_suite: make it use shared random sig generator from call_suite and call_suite_aggrs
Tassilo Philipp
parents: 487
diff changeset
236 {
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
237 switch(argv[i][1]) {
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
238 case 'h':
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
239 case '?':
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
240 print_usage(argv[0]);
495
45ac093ca822 - test/callback_suite: make it use shared random sig generator from call_suite and call_suite_aggrs
Tassilo Philipp
parents: 487
diff changeset
241 return 0;
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
242 default:
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
243 Error("invalid option: %s\n\n", argv[i], argv[0]);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
244 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
245 }
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
246 switch(pos++) {
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
247 case 0: from = to = atoi(argv[i]); break;
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
248 case 1: to = atoi(argv[i]); break;
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
249 default: Error("too many arguments (%d given, 2 allowed)\n\n", pos, argv[0]);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
250 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
251 }
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
252 if(from < 0 || to >= G_ncases || from > to)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
253 Error("invalid arguments (provided from or to not in order or outside of range [0,%d])\n\n", G_ncases-1, argv[0]);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
254
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
255
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
256 init_test_data();
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
257 total = run_all(from, to);
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
258 deinit_test_data();
487
d8f0e6cecdab - simplified test/callback_suite
Tassilo Philipp
parents: 410
diff changeset
259
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
260 printf("result: callback_suite: %d\n", total);
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
261
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
262 dcTest_deInitPlatform();
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
263
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents: 495
diff changeset
264 return !total;
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
265 }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
266