comparison test/suite_aggrs/main.c @ 462:653b65580cb4

suite_aggr: - added arrays (inside of structs/unions, only, as only way to pass/return them by value) - cleanups and pregen of source
author Tassilo Philipp
date Tue, 01 Feb 2022 21:44:18 +0100
parents 236015fdf7a8
children 0f3b6898078d
comparison
equal deleted inserted replaced
461:236015fdf7a8 462:653b65580cb4
92 case 'p': dcArgPointer (p,K_p[pos]); break; 92 case 'p': dcArgPointer (p,K_p[pos]); break;
93 case 'f': dcArgFloat (p,K_f[pos]); break; 93 case 'f': dcArgFloat (p,K_f[pos]); break;
94 case 'd': dcArgDouble (p,K_d[pos]); break; 94 case 'd': dcArgDouble (p,K_d[pos]); break;
95 case '<': /* union */ 95 case '<': /* union */
96 case '{': /* struct */ 96 case '{': /* struct */
97 { 97 {
98 /* find aggregate sig */ 98 /* find aggregate sig */
99 int len; 99 int len;
100 DCstruct *st; 100 DCstruct *st;
101 int i = find_agg_idx(&len, sig); 101 int i = find_agg_idx(&len, sig);
102 if(i == -1) { 102 if(i == -1) {
124 case 'p': s = (dcCallPointer (p,t) == K_p[pos]) ; break; 124 case 'p': s = (dcCallPointer (p,t) == K_p[pos]) ; break;
125 case 'f': s = (dcCallFloat (p,t) == K_f[pos]) ; break; 125 case 'f': s = (dcCallFloat (p,t) == K_f[pos]) ; break;
126 case 'd': s = (dcCallDouble (p,t) == K_d[pos]) ; break; 126 case 'd': s = (dcCallDouble (p,t) == K_d[pos]) ; break;
127 case '<': /* union */ 127 case '<': /* union */
128 case '{': /* struct */ 128 case '{': /* struct */
129 { 129 {
130 /* bound check memory adjacent to returned aggregate, to check for overflows by dcCallStruct */ 130 /* bound check memory adjacent to returned aggregate, to check for overflows by dcCallStruct */
131 long long* adj_ll = (get_max_aggr_size() - rtype_size) > sizeof(long long) ? (long long*)((char*)V_a[0] + rtype_size) : NULL; 131 long long* adj_ll = (get_max_aggr_size() - rtype_size) > sizeof(long long) ? (long long*)((char*)V_a[0] + rtype_size) : NULL;
132 if(adj_ll) 132 if(adj_ll)
133 *adj_ll = 0x0123456789abcdef; 133 *adj_ll = 0x0123456789abcdef;
134 134
158 case 'p': s = ( V_p[pos] == K_p[pos] ); if (!s) printf("'p':%d: %p != %p ; ", pos, V_p[pos], K_p[pos]); break; 158 case 'p': s = ( V_p[pos] == K_p[pos] ); if (!s) printf("'p':%d: %p != %p ; ", pos, V_p[pos], K_p[pos]); break;
159 case 'f': s = ( V_f[pos] == K_f[pos] ); if (!s) printf("'f':%d: %f != %f ; ", pos, V_f[pos], K_f[pos]); break; 159 case 'f': s = ( V_f[pos] == K_f[pos] ); if (!s) printf("'f':%d: %f != %f ; ", pos, V_f[pos], K_f[pos]); break;
160 case 'd': s = ( V_d[pos] == K_d[pos] ); if (!s) printf("'d':%d: %f != %f ; ", pos, V_d[pos], K_d[pos]); break; 160 case 'd': s = ( V_d[pos] == K_d[pos] ); if (!s) printf("'d':%d: %f != %f ; ", pos, V_d[pos], K_d[pos]); break;
161 case '<': /* union */ 161 case '<': /* union */
162 case '{': /* struct */ 162 case '{': /* struct */
163 { 163 {
164 /* no check: guaranteed to exist, or invoke func would've exited when passing args, above */ 164 /* no check: guaranteed to exist, or invoke func would've exited when passing args, above */
165 int len; 165 int len;
166 int i = find_agg_idx(&len, sig); 166 int i = find_agg_idx(&len, sig);
167 s = ((int(*)(const void*,const void*))G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]); 167 s = ((int(*)(const void*,const void*))G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]);
168 if (!s) printf("'%c':%d: *%p != *%p ; ", atype, pos, V_a[pos], K_a[pos]); 168 if (!s) printf("'%c':%d: *%p != *%p ; ", atype, pos, V_a[pos], K_a[pos]);
221 dcFreeStruct(((DCstruct*(*)())G_agg_touchdcstfuncs[i])()); 221 dcFreeStruct(((DCstruct*(*)())G_agg_touchdcstfuncs[i])());
222 222
223 dcFree(G_callvm); 223 dcFree(G_callvm);
224 deinit_test_data(G_maxargs); 224 deinit_test_data(G_maxargs);
225 225
226 printf("result: suite_aggrs: %d %d\n", total, get_max_aggr_size()); 226 printf("result: suite_aggrs: %d\n", total);
227 227
228 dcTest_deInitPlatform(); 228 dcTest_deInitPlatform();
229 229
230 return !total; 230 return !total;
231 } 231 }