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