printf("\n");
}
-void is_hex(unsigned long wanted, unsigned long seen, const char *fmt, ...) {
+void is_hex(unsigned long have, unsigned long want, const char *fmt, ...) {
va_list args;
+ int pass;
+
+ pass = have == want;
if (fmt) {
va_start(args, fmt);
- okv(wanted == seen, fmt, args);
+ okv(pass, fmt, args);
va_end(args);
} else {
- ok(wanted == seen, NULL);
+ ok(pass, NULL);
}
- if (wanted != seen) {
- diag("wanted: %ld", wanted);
- diag("got : %ld", seen);
+ if (!pass) {
+ diag("wanted: %ld", want);
+ diag("got : %ld", have);
}
}
+void is_int(long have, long want, const char *fmt, ...) {
+ va_list args;
+ int pass;
+
+ pass = have == want;
+ if (fmt) {
+ va_start(args, fmt);
+ okv(pass, fmt, args);
+ va_end(args);
+ } else {
+ ok(pass, NULL);
+ }
+ if (!pass) {
+ diag("wanted: %ld", want);
+ diag("got : %ld", have);
+ }
+}
-void is_int(long wanted, long seen, const char *fmt, ...) {
+void is_double(double have, double want, double eps, const char *fmt, ...) {
+ int pass;
va_list args;
+
+ pass = fabs(want - have) <= eps;
if (fmt) {
va_start(args, fmt);
- okv(wanted == seen, fmt, args);
+ okv(pass, fmt, args);
va_end(args);
} else {
- ok(wanted == seen, NULL);
+ ok(pass, NULL);
}
- if (wanted != seen) {
- diag("wanted: %ld", wanted);
- diag("got : %ld", seen);
+ if (!pass) {
+ diag("wanted: %f", want);
+ diag("got : %f", have);
}
}
-void is_double(double wanted, double seen, double eps, const char *fmt, ...) {
+void is_compare(void *have, void *want,
+ int (*cmp)(void *,void *),
+ const char *fmt, ...
+ ) {
int pass;
va_list args;
- pass = fabs(wanted - seen) <= eps;
+ pass = !cmp(have, want);
if (fmt) {
va_start(args, fmt);
okv(pass, fmt, args);
va_end(args);
} else {
- ok(wanted == seen, NULL);
+ ok(pass, NULL);
}
+ /* no way to print them with out more functions
if (!pass) {
- diag("wanted: %f", wanted);
- diag("got : %f", seen);
+ diag("wanted: %s", want);
+ diag("got : %s", have);
}
+ */
}
-void is_string(const char *wanted, const char *seen, const char *fmt, ...) {
+void is_string(const char *have, const char *want, const char *fmt, ...) {
int pass;
va_list args;
- pass = !strcmp(wanted,seen);
+ pass = !strcmp(have,want);
if (fmt) {
va_start(args, fmt);
okv(pass, fmt, args);
va_end(args);
} else {
- ok(wanted == seen, NULL);
+ ok(pass, NULL);
}
if (!pass) {
- diag("wanted: %s", wanted);
- diag("got : %s", seen);
+ diag("wanted: %s", want);
+ diag("got : %s", have);
}
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <regex.h>
close(1); /* close stdout */
dup(pipefd[1]); /* set stdout to the write end of the pipe */
execlp(run->name, run->name, NULL);
+ /* only gets here if exec failed */
+ printf("Bail Out! exec %s failed: %s\n", run->name, strerror(errno));
+ exit(EXIT_FAILURE);
}
close(pipefd[1]);
int skip = 0;
int pass = 0;
+ run->ran++;
+
+ if (run->interactive) {
+ backup(written);
+ written = printf("%d/%d", run->ran, run->plan);
+ fflush(stdout);
+ }
+
+
/* if the "not" match fails, the test passed */
pass = match[1].rm_so == -1;
}
/* check for diagnostics */
- if (test != run->ran+1) {
+ if (test != run->ran) {
fprintf(stderr, "expected test %d, got %d\n", run->ran+1, test);
}
- run->ran++;
-
- if (pass || todo) {
+ /* pass, todo, or skip are all pass */
+ if (pass || todo || skip) {
run->pass++;
+ } else {
+ run->fail++;
}
- if (todo) {
- if (pass) {
- run->todo_pass++;
- }
+ if (todo && pass) {
+ run->todo_pass++;
}
+
if (skip) {
run->skip++;
}
- if (!pass) {
+ if (!pass && !todo) {
struct result *r;
r = malloc(sizeof *r);
/* push test number onto fail list */
}
- if (run->interactive) {
- backup(written);
- written = printf("%d/%d", run->ran, run->plan);
- fflush(stdout);
- }
}
else if (rmatch(&diagnostic, line, match)) {
for (i=optind; i<ac; i++) {
run = clear;
run.name = av[i];
- run.plan = -1;
run.interactive = interactive;
if (progress) {
total.ran += run.ran;
total.pass += run.pass;
total.fail += run.fail;
+ total.skip += run.skip;
if (progress) {
- if (run.fail > 0 ) printf("not ");
- printf("ok\n");
+ if (run.bailout) {
+ printf("Bail out!\n");
+ } else {
+ if (run.fail > 0 ) printf("not ");
+ printf("ok\n");
+ }
}
runs[i-optind] = run;
}
if (summary) {
- printf("ran: %d/%d, pass: %d, fail: %d, %.2f%% ok\n",
+ printf("ran: %d/%d, pass: %d, fail: %d, skip: %d",
total.ran, total.plan, total.pass, total.fail,
- 100.0*(double)total.pass/(double)total.plan
+ total.skip
);
+ if (total.plan > 0) {
+ printf(", %.2f%% ok",
+ 100.0*(double)total.pass/(double)total.plan
+ );
+ }
+ printf("\n");
}