]> git.mdlowis.com Git - projs/tide.git/commitdiff
updated qcheck interface
authorMichael D. Lowis <mike.lowis@gentex.com>
Fri, 8 Mar 2019 22:38:11 +0000 (17:38 -0500)
committerMichael D. Lowis <mike.lowis@gentex.com>
Fri, 8 Mar 2019 22:38:11 +0000 (17:38 -0500)
config.mk
inc/qcheck.h

index d7a9e035bb42945aef35b4d6e0604ffdb194a77b..a39e99cfab9e32538652dce4c4f86bed8b53859a 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -18,7 +18,7 @@ INCS += -I/usr/include/freetype2
 # Compiler Setup
 CC = ./acc
 CFLAGS  = -O2 -MMD $(INCS)
-CFLAGS += -Wno-missing-field-initializers -Wno-implicit-fallthrough
+CFLAGS += -Wno-missing-field-initializers -Wno-implicit-fallthrough -Wno-unknown-pragmas
 
 # Linker Setup
 LD = $(CC)
index ff0322b22b9ef3e03a74255e50cd75de2b9c49eb..16fcfb7ed88e79a4510894c0480a88a2b881dea6 100644 (file)
@@ -142,48 +142,54 @@ void qcshow(int nvals, QCValue** vals) {
     }
 }
 
-QCResult vqcheck(QCProp prop, int nvals, va_list vals) {
+QCResult qcheckone(QCProp prop, int ngenfns, QCGenFn* genfns) {
     /* generate the input values */
     QCValue** values = NULL;
-    if (nvals) {
-        values = malloc(sizeof(QCValue*) * nvals);
-        for (int i = 0; i < nvals; i++)
-            values[i] = (va_arg(vals, QCGenFn))();
+    if (ngenfns) {
+        values = malloc(sizeof(QCValue*) * ngenfns);
+        for (int i = 0; i < ngenfns; i++)
+            values[i] = (genfns[i])();
     }
     /* run the test and get the result */
     QCResult result = { .status = 0 };
-    result.status = prop(nvals, values);
-    result.nvals = nvals;
+    result.status = prop(ngenfns, values);
+    result.nvals = ngenfns;
     result.vals = values;
     return result;
 }
 
-int qcheck(char* desc, QCProp prop, int nvals, ...) {
-    int passed = 0;
+int qcheckall(char* desc, QCProp prop, int nvals, QCGenFn* vals) {
     QCResult result;
-    va_list vals;
-    #pragma omp parallel for
-    for (int i = 0; i < NTrials; i++) {
-        va_start(vals, nvals);
-        result = vqcheck(prop, nvals, vals);
-        va_end(vals);
+    int pass;
+    for (pass = 0; pass < NTrials; pass++) {
+        result = qcheckone(prop, nvals, vals);
         if (!result.status) break;
         qcfree(result.nvals, result.vals);
-        passed++;
     }
-    /* show 'em the results */
-    if (passed == NTrials) {
-        printf("%d tests passed for property: %s\n", passed, desc);
-    } else if (!result.status) {
-        printf("\nProperty: %s\nFalsifiable after %d tests (seed: %d)\n", desc, passed+1, Seed);
+    /* print the results */
+    if (!result.status) {
+        printf("\nProperty: %s\nFalsifiable after %d tests (seed: %d)\n", desc, pass+1, Seed);
         qcshow(result.nvals, result.vals);
         qcfree(result.nvals, result.vals);
         puts("");
         return 0;
+    } else {
+        printf("%d tests passed for property: %s\n", pass, desc);
     }
     return 1;
 }
 
+int qcheck(char* desc, QCProp prop, int nvals, ...) {
+    QCGenFn vals[nvals];
+    va_list vargs;
+    va_start(vargs, nvals);
+    for (int i = 0; i < nvals; i++)
+        vals[i] = va_arg(vargs, QCGenFn);
+    va_end(vargs);
+    return qcheckall(desc, prop, nvals, vals);
+    return 1;
+}
+
 void show_long(QCValue* val) {
     printf("%ld\n", (val->data[0]));
 }