Mercurial > pub > dyncall > dyncall
comparison test/plain/test_structs.c @ 335:5fe52b7c6e02
- test/plain additions mainly for preparing future struct support, experimental at best currently
author | Tassilo Philipp |
---|---|
date | Wed, 27 Nov 2019 21:27:58 +0100 |
parents | 1cf6a4a94aca |
children |
comparison
equal
deleted
inserted
replaced
334:1cf6a4a94aca | 335:5fe52b7c6e02 |
---|---|
35 DCsize expected = sizeof(type), computed = dcStructSize(s);\ | 35 DCsize expected = sizeof(type), computed = dcStructSize(s);\ |
36 printf("struct_%s size: expected = %d, computed = %d: %d\n", sig, (int)expected, (int)computed, (expected == 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 | 39 |
40 /* @@@ incomplete and should be makde generally available in dyncall once struct support will make it in */ | |
41 #if defined(DC__OS_Plan9) | |
42 # define DEFAULT_STRUCT_ALIGNMENT 4 | |
43 #else | |
44 # define DEFAULT_STRUCT_ALIGNMENT DEFAULT_ALIGNMENT | |
45 #endif | |
46 | |
40 int testStructSizes() | 47 int testStructSizes() |
41 { | 48 { |
42 int ret = 1; | 49 int ret = 1; |
43 | 50 |
44 { | 51 { |
45 typedef struct { | 52 typedef struct { |
46 char a, b; | 53 char a, b; |
47 } S; | 54 } S; |
48 | 55 |
49 size_t size; | 56 size_t size; |
50 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT); | 57 DCstruct* s = dcNewStruct(2, DEFAULT_STRUCT_ALIGNMENT); |
51 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 58 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
52 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 59 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
53 dcCloseStruct(s); | 60 dcCloseStruct(s); |
54 | 61 |
55 DC_TEST_STRUCT_SIZE("cc", S, s); | 62 DC_TEST_STRUCT_SIZE("cc", S, s); |
59 typedef struct { | 66 typedef struct { |
60 char a, b, c; | 67 char a, b, c; |
61 } S; | 68 } S; |
62 | 69 |
63 size_t size; | 70 size_t size; |
64 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); | 71 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT); |
65 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 72 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
66 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 73 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
67 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 74 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
68 dcCloseStruct(s); | 75 dcCloseStruct(s); |
69 | 76 |
75 char a; | 82 char a; |
76 short b; | 83 short b; |
77 } S; | 84 } S; |
78 | 85 |
79 size_t size; | 86 size_t size; |
80 DCstruct* s = dcNewStruct(2, DEFAULT_ALIGNMENT); | 87 DCstruct* s = dcNewStruct(2, DEFAULT_STRUCT_ALIGNMENT); |
81 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 88 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
82 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); | 89 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); |
83 dcCloseStruct(s); | 90 dcCloseStruct(s); |
84 | 91 |
85 DC_TEST_STRUCT_SIZE("cs", S, s); | 92 DC_TEST_STRUCT_SIZE("cs", S, s); |
89 typedef struct { | 96 typedef struct { |
90 double a, b, c, d; | 97 double a, b, c, d; |
91 } S; | 98 } S; |
92 | 99 |
93 size_t size; | 100 size_t size; |
94 DCstruct* s = dcNewStruct(4, DEFAULT_ALIGNMENT); | 101 DCstruct* s = dcNewStruct(4, DEFAULT_STRUCT_ALIGNMENT); |
95 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); | 102 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); |
96 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); | 103 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); |
97 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); | 104 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); |
98 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); | 105 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 1); |
99 dcCloseStruct(s); | 106 dcCloseStruct(s); |
106 char a, b; | 113 char a, b; |
107 void* p[3]; | 114 void* p[3]; |
108 } S; | 115 } S; |
109 | 116 |
110 size_t size; | 117 size_t size; |
111 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); | 118 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT); |
112 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 119 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
113 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 120 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
114 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); | 121 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); |
115 dcCloseStruct(s); | 122 dcCloseStruct(s); |
116 | 123 |
126 } sub; | 133 } sub; |
127 short b; | 134 short b; |
128 } S; | 135 } S; |
129 | 136 |
130 size_t size; | 137 size_t size; |
131 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); | 138 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT); |
132 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); | 139 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); |
133 dcSubStruct(s, 3, DEFAULT_ALIGNMENT, 1); | 140 dcSubStruct(s, 3, DEFAULT_STRUCT_ALIGNMENT, 1); |
134 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 141 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
135 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 142 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
136 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); | 143 dcStructField(s, DC_SIGCHAR_POINTER, DEFAULT_ALIGNMENT, 3); |
137 dcCloseStruct(s); | 144 dcCloseStruct(s); |
138 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); | 145 dcStructField(s, DC_SIGCHAR_SHORT, DEFAULT_ALIGNMENT, 1); |
146 { \ | 153 { \ |
147 typedef struct { \ | 154 typedef struct { \ |
148 type v; \ | 155 type v; \ |
149 } S; \ | 156 } S; \ |
150 \ | 157 \ |
151 DCstruct* s = dcNewStruct(1, DEFAULT_ALIGNMENT); \ | 158 DCstruct* s = dcNewStruct(1, DEFAULT_STRUCT_ALIGNMENT); \ |
152 dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \ | 159 dcStructField(s, sigchar, DEFAULT_ALIGNMENT, 1); \ |
153 dcCloseStruct(s); \ | 160 dcCloseStruct(s); \ |
154 \ | 161 \ |
155 DC_TEST_STRUCT_SIZE(sig, S, s); \ | 162 DC_TEST_STRUCT_SIZE(sig, S, s); \ |
156 dcFreeStruct(s); \ | 163 dcFreeStruct(s); \ |
205 | 212 |
206 DCCallVM* pc = dcNewCallVM(4096); | 213 DCCallVM* pc = dcNewCallVM(4096); |
207 { | 214 { |
208 FewValues values; | 215 FewValues values; |
209 double calledSum, expectedSum; | 216 double calledSum, expectedSum; |
210 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); | 217 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT); |
211 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 218 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
212 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 219 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
213 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 220 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
214 dcCloseStruct(s); | 221 dcCloseStruct(s); |
215 | 222 |
231 dcFreeStruct(s); | 238 dcFreeStruct(s); |
232 } | 239 } |
233 { | 240 { |
234 SomeValues values; | 241 SomeValues values; |
235 double calledSum, expectedSum; | 242 double calledSum, expectedSum; |
236 DCstruct* s = dcNewStruct(3, DEFAULT_ALIGNMENT); | 243 DCstruct* s = dcNewStruct(3, DEFAULT_STRUCT_ALIGNMENT); |
237 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 244 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
238 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); | 245 dcStructField(s, DC_SIGCHAR_CHAR, DEFAULT_ALIGNMENT, 1); |
239 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10); | 246 dcStructField(s, DC_SIGCHAR_DOUBLE, DEFAULT_ALIGNMENT, 10); |
240 dcCloseStruct(s); | 247 dcCloseStruct(s); |
241 | 248 |