comparison test/plain/test_structs.c @ 334:1cf6a4a94aca

- better output for plain test's struct size testing (maybe in prep for full struct support)
author Tassilo Philipp
date Wed, 27 Nov 2019 20:43:51 +0100
parents dd78bd0152af
children 5fe52b7c6e02
comparison
equal deleted inserted replaced
333:4e9d3cb9870f 334:1cf6a4a94aca
29 #include "../../dyncall/dyncall.h" 29 #include "../../dyncall/dyncall.h"
30 #include "../../dyncall/dyncall_signature.h" 30 #include "../../dyncall/dyncall_signature.h"
31 #include "../../dyncall/dyncall_struct.h" 31 #include "../../dyncall/dyncall_struct.h"
32 #include "../common/platformInit.h" 32 #include "../common/platformInit.h"
33 33
34 #define DC_TEST_INT_EQUAL(expected, computed) { \ 34 #define DC_TEST_STRUCT_SIZE(sig, type, s) { \
35 if (expected != computed) \ 35 DCsize expected = sizeof(type), computed = dcStructSize(s);\
36 printf("expected = %d, computed = %d\n\n", (int)expected, (int)computed); \ 36 printf("struct_%s size: expected = %d, computed = %d: %d\n", sig, (int)expected, (int)computed, (expected == computed)); \
37 ret = (expected == computed) && ret; \ 37 ret = (expected == computed) && ret; \
38 } 38 }
39 #define DC_TEST_STRUCT_SIZE(type, s) { \
40 DCsize expected = sizeof(type), computed = dcStructSize(s);\
41 DC_TEST_INT_EQUAL(expected, computed); \
42 }
43 39
44 int testStructSizes() 40 int testStructSizes()
45 { 41 {
46 int ret = 1; 42 int ret = 1;
47 43
48 { 44 {
49 typedef struct { 45 typedef struct {
46 char a, b;
47 } S;
48
49 size_t size;
50 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT);
51 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
52 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
53 dcCloseStruct(s);
54
55 DC_TEST_STRUCT_SIZE("cc", S, s);
56 dcFreeStruct(s);
57 }
58 {
59 typedef struct {
60 char a, b, c;
61 } S;
62
63 size_t size;
64 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT);
65 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
66 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
67 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
68 dcCloseStruct(s);
69
70 DC_TEST_STRUCT_SIZE("ccc", S, s);
71 dcFreeStruct(s);
72 }
73 {
74 typedef struct {
75 char a;
76 short b;
77 } S;
78
79 size_t size;
80 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT);
81 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
82 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
83 dcCloseStruct(s);
84
85 DC_TEST_STRUCT_SIZE("cs", S, s);
86 dcFreeStruct(s);
87 }
88 {
89 typedef struct {
50 double a, b, c, d; 90 double a, b, c, d;
51 } S; 91 } S;
52 92
53 size_t size; 93 size_t size;
54 DCstruct* s = dcNewStruct(4, DEFAULT_ALIGNMENT); 94 DCstruct* s = dcNewStruct(4, DEFAULT_ALIGNMENT);
56 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); 96 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
57 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); 97 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
58 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); 98 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1);
59 dcCloseStruct(s); 99 dcCloseStruct(s);
60 100
61 DC_TEST_STRUCT_SIZE(S, s); 101 DC_TEST_STRUCT_SIZE("dddd", S, s);
62 dcFreeStruct(s); 102 dcFreeStruct(s);
63 } 103 }
64 { 104 {
65 typedef struct { 105 typedef struct {
66 char a, b; 106 char a, b;
72 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 112 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
73 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 113 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
74 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); 114 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
75 dcCloseStruct(s); 115 dcCloseStruct(s);
76 116
77 DC_TEST_STRUCT_SIZE(S, s); 117 DC_TEST_STRUCT_SIZE("cc[ppp]", S, s);
78 dcFreeStruct(s); 118 dcFreeStruct(s);
79 } 119 }
80 { 120 {
81 typedef struct { 121 typedef struct {
82 short a; 122 short a;
96 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); 136 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3);
97 dcCloseStruct(s); 137 dcCloseStruct(s);
98 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); 138 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1);
99 dcCloseStruct(s); 139 dcCloseStruct(s);
100 140
101 DC_TEST_STRUCT_SIZE(S, s); 141 DC_TEST_STRUCT_SIZE("s{cc[ppp]}s", S, s);
102 dcFreeStruct(s); 142 dcFreeStruct(s);
103 } 143 }
104 144
105 #define TEST_MONO_STRUCT(type, sig) \ 145 #define TEST_MONO_STRUCT(sig, type, sigchar) \
106 { \ 146 { \
107 typedef struct { \ 147 typedef struct { \
108 type v; \ 148 type v; \
109 } S; \ 149 } S; \
110 \ 150 \
111 DCstruct* s = dcNewStruct(1, DEFAULT_ALIGNMENT); \ 151 DCstruct* s = dcNewStruct(1, DEFAULT_ALIGNMENT); \
112 dcStructField(s, sig, DEFAULT_ALIGNMENT, 1); \ 152 dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \
113 dcCloseStruct(s); \ 153 dcCloseStruct(s); \
114 \ 154 \
115 DC_TEST_STRUCT_SIZE(S, s); \ 155 DC_TEST_STRUCT_SIZE(sig, S, s); \
116 dcFreeStruct(s); \ 156 dcFreeStruct(s); \
117 } 157 }
118 158
119 TEST_MONO_STRUCT(char, DC_SIGCHAR_CHAR); 159 TEST_MONO_STRUCT("c", char, DC_SIGCHAR_CHAR); // 4 on plan 9 |
120 TEST_MONO_STRUCT(unsigned char, DC_SIGCHAR_UCHAR); 160 TEST_MONO_STRUCT("C", unsigned char, DC_SIGCHAR_UCHAR); // 4 on plan 9 |
121 TEST_MONO_STRUCT(short, DC_SIGCHAR_SHORT); 161 TEST_MONO_STRUCT("s", short, DC_SIGCHAR_SHORT); // 4 on plan 9 | minimal size of a struct, period?
122 TEST_MONO_STRUCT(unsigned short, DC_SIGCHAR_USHORT); 162 TEST_MONO_STRUCT("S", unsigned short, DC_SIGCHAR_USHORT); // 4 on plan 9 |
123 TEST_MONO_STRUCT(int, DC_SIGCHAR_INT); 163 TEST_MONO_STRUCT("i", int, DC_SIGCHAR_INT);
124 TEST_MONO_STRUCT(unsigned int, DC_SIGCHAR_UINT); 164 TEST_MONO_STRUCT("I", unsigned int, DC_SIGCHAR_UINT);
125 TEST_MONO_STRUCT(long, DC_SIGCHAR_LONG); 165 TEST_MONO_STRUCT("j", long, DC_SIGCHAR_LONG);
126 TEST_MONO_STRUCT(unsigned long, DC_SIGCHAR_ULONG); 166 TEST_MONO_STRUCT("J", unsigned long, DC_SIGCHAR_ULONG);
127 TEST_MONO_STRUCT(long long, DC_SIGCHAR_LONGLONG); 167 TEST_MONO_STRUCT("l", long long, DC_SIGCHAR_LONGLONG);
128 TEST_MONO_STRUCT(unsigned long long, DC_SIGCHAR_ULONGLONG); 168 TEST_MONO_STRUCT("L", unsigned long long, DC_SIGCHAR_ULONGLONG);
129 TEST_MONO_STRUCT(void*, DC_SIGCHAR_POINTER); 169 TEST_MONO_STRUCT("p", void*, DC_SIGCHAR_POINTER);
130 TEST_MONO_STRUCT(float, DC_SIGCHAR_FLOAT); 170 TEST_MONO_STRUCT("f", float, DC_SIGCHAR_FLOAT);
131 TEST_MONO_STRUCT(double, DC_SIGCHAR_DOUBLE); 171 TEST_MONO_STRUCT("d", double, DC_SIGCHAR_DOUBLE);
132 172
133 return ret; 173 return ret;
134 } 174 }
135 175
136 176
157 { 197 {
158 return ((double)values.a) + ((double)values.b) + values.p[0] + values.p[1] + values.p[2]; 198 return ((double)values.a) + ((double)values.b) + values.p[0] + values.p[1] + values.p[2];
159 } 199 }
160 200
161 201
162 int testCallStructs() 202 /*int testCallStructs()
163 { 203 {
164 int ret = 1; 204 int ret = 1;
165 205
166 DCCallVM* pc = dcNewCallVM(4096); 206 DCCallVM* pc = dcNewCallVM(4096);
167 { 207 {
171 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 211 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
172 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 212 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
173 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 213 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
174 dcCloseStruct(s); 214 dcCloseStruct(s);
175 215
176 DC_TEST_STRUCT_SIZE(FewValues, s); 216 DC_TEST_STRUCT_SIZE("ccc", FewValues, s);
177 217
178 values.a = 1; 218 values.a = 1;
179 values.b = 2; 219 values.b = 2;
180 values.c = 3; 220 values.c = 3;
181 221
197 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 237 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
198 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); 238 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1);
199 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10); 239 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10);
200 dcCloseStruct(s); 240 dcCloseStruct(s);
201 241
202 DC_TEST_STRUCT_SIZE(SomeValues, s); 242 DC_TEST_STRUCT_SIZE("ccd", SomeValues, s);
203 243
204 values.a = 1; 244 values.a = 1;
205 values.b = 2; 245 values.b = 2;
206 values.p[0] = 10; 246 values.p[0] = 10;
207 values.p[1] = 11; 247 values.p[1] = 11;
218 } 258 }
219 259
220 dcFree(pc); 260 dcFree(pc);
221 261
222 return ret; 262 return ret;
223 } 263 }*/
224 264