use dprintf(1,..) instead of buffered stderr
[libc-test] / common / t.c
index daf06fd..2373b09 100644 (file)
@@ -1,4 +1,3 @@
-#define _POSIX_C_SOURCE 200809L
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdarg.h>
@@ -17,6 +16,7 @@
 static int failed;
 static const char *name;
 
+static int slow;
 static int verbose;
 static int count;
 static int nfailed;
@@ -29,10 +29,12 @@ void reset_timer() { errtimer(); }
 void error__(const char *n, int l, const char *s, ...) {
        va_list ap;
 
+       if (failed == 0 && nfailed == 0)
+               dprintf(1, "FAIL\n", n);
        failed = 1;
-       fprintf(stderr, " ERROR %s %s:%d: ", name, n, l);
+       dprintf(1, " ERROR %s %s:%d: ", name, n, l);
        va_start(ap, s);
-       vfprintf(stderr, s, ap);
+       vdprintf(1, s, ap);
        va_end(ap);
 }
 
@@ -44,7 +46,7 @@ static void run(const char *n, void (*f)()) {
        failed = 0;
        name = n;
        if (verbose)
-               fprintf(stderr, "running %s:\n", name);
+               dprintf(1, "running %s:\n", name);
 
        pid = fork();
        if (pid == 0) {
@@ -66,17 +68,41 @@ static void run(const char *n, void (*f)()) {
 
        if (failed) {
                nfailed++;
-               fprintf(stderr, "FAILED %s\n", name);
+               dprintf(1, "FAILED %s\n", name);
        } else if (verbose)
-               fprintf(stderr, "PASSED %s\n", name);
+               dprintf(1, "PASSED %s\n", name);
 }
 
 static int summary() {
-       fprintf(stderr, "PASS:%d FAIL:%d\n", count-nfailed, nfailed);
+       if (nfailed)
+               dprintf(1, "FAIL (%d out of %d tests)\n", nfailed, count);
+       else
+               dprintf(1, "ok (%d tests)\n", count);
        return !!nfailed;
 }
 
-int main() {
+static void usage() {
+       dprintf(1, "usage: ./t [-vs]\n");
+       exit(1);
+}
+
+int main(int argc, char *argv[]) {
+       int c;
+
+       while((c = getopt(argc, argv, "vs")) != -1)
+               switch(c) {
+               case 'v':
+                       verbose = 1;
+                       break;
+               case 's':
+                       slow = 1; /* TODO */
+                       break;
+               default:
+                       usage();
+               }
+       if (optind != argc)
+               usage();
+
 #define T(t) run(#t, t);
 #include "tests.h"
        return summary();