diff test/suite_aggrs/main.c @ 438:b4ddad459690

suite_aggr; - made generator produce unique signatures - reduced dcNewStruct() calls to once only per sig - added missing free()s - cleanup: removal of unused decl, func renaming for clarity, static for tu-local symbols, ...
author Tassilo Philipp
date Wed, 26 Jan 2022 13:37:19 +0100
parents a29baee68340
children e4ae6753a276
line wrap: on
line diff
--- a/test/suite_aggrs/main.c	Wed Jan 26 13:26:39 2022 +0100
+++ b/test/suite_aggrs/main.c	Wed Jan 26 13:37:19 2022 +0100
@@ -30,7 +30,7 @@
 #include "../common/platformInit.c" /* Impl. for functions only used in this translation unit */
 
 
-void* G_callvm;
+static void* G_callvm;
 
 
 static int find_agg_idx(int* len, const char* sig)
@@ -70,9 +70,9 @@
     rtype = *sig;
     sig += len;
 
-	rtype_st_cmp = G_agg_cmpfuncs[i];
-    rtype_st = ((DCstruct*(*)())G_agg_newdcstfuncs[i])();
-    dcBeginCallStruct(p, rtype_st, DC_FALSE);
+    rtype_st_cmp = G_agg_cmpfuncs[i];
+    rtype_st = ((DCstruct*(*)())G_agg_touchdcstfuncs[i])();
+    dcBeginCallStruct(p, rtype_st);
   }
   else
     rtype = *sig++;
@@ -98,7 +98,7 @@
           printf("unknown sig at '%s' ;", sig);
           return 0;
         }
-        DCstruct *st = ((DCstruct*(*)())G_agg_newdcstfuncs[i])();
+        DCstruct *st = ((DCstruct*(*)())G_agg_touchdcstfuncs[i])();
         dcArgStruct(p, st, K_a[pos]);
         sig += len-1; /* advance to next arg char */
         break;
@@ -120,9 +120,9 @@
     case 'f': s = (dcCallFloat   (p,t) == K_f[pos]) ; break;
     case 'd': s = (dcCallDouble  (p,t) == K_d[pos]) ; break;
     case '{': {
-      s = ((int(*)())rtype_st_cmp)(dcCallStruct(p,t,rtype_st, V_a[pos]), K_a[pos]);
-	  break;
-	}
+      s = ((int(*)(const void*,const void*))rtype_st_cmp)(dcCallStruct(p,t,rtype_st, V_a[pos]), K_a[pos]);
+      break;
+    }
     default: printf("unknown rtype '%c'", rtype); return 0;
   }
 
@@ -145,7 +145,7 @@
         /* no check: guaranteed to exist, or invoke func would've exited when passing args, above */
         int len;
         int i = find_agg_idx(&len, sig);
-        s = ((int(*)())G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]);
+        s = ((int(*)(const void*,const void*))G_agg_cmpfuncs[i])(V_a[pos], K_a[pos]);
         if (!s) printf("'{':%d:  *%p != *%p ; ", pos, V_a[pos], K_a[pos]);
         sig += len-1; /* advance to next arg char */
         break;
@@ -187,14 +187,23 @@
 
 int main(int argc, char* argv[])
 {
-  int total;
+  int total, i;
 
   dcTest_initPlatform();
 
-  init_K(G_maxargs);
+  init_test_data(G_maxargs);
   G_callvm = (DCCallVM*) dcNewCallVM(32768);
+
   dcReset(G_callvm);
   total = run_all();
+
+  /* free all DCstructs created on the fly */
+  for(i=0; i<G_naggs; ++i)
+    dcFreeStruct(((DCstruct*(*)())G_agg_touchdcstfuncs[i])());
+
+  dcFree(G_callvm);
+  deinit_test_data(G_maxargs);
+
   printf("result: call_aggrs: %d\n", total);
 
   dcTest_deInitPlatform();