1 #define _POSIX_C_SOURCE 200809L
11 #define T(t) void t();
15 struct test test__ = {0};
21 static void run(const char *n, void (*f)()) {
29 fprintf(stderr, "running %s:\n", test__.name);
33 /* run test in a child process */
39 error("fork failed: %s\n", strerror(errno));
41 if (waitpid(pid, &status, 0) == -1)
42 error("waitpid failed: %s\n", strerror(errno));
43 else if (!WIFEXITED(status))
44 error("abnormal exit: %s\n", WIFSIGNALED(status) ? strsignal(WTERMSIG(status)) : "(unknown)");
46 test__.failed = !!WEXITSTATUS(status);
51 fprintf(stderr, "FAILED %s\n", test__.name);
53 fprintf(stderr, "PASSED %s\n", test__.name);
56 static int summary() {
57 fprintf(stderr, "PASS:%d FAIL:%d\n", count-nfailed, nfailed);
62 #define T(t) run(#t, t);