From: Nathan Wagner Date: Fri, 12 Oct 2018 11:12:48 +0000 (+0000) Subject: add c tap files X-Git-Tag: v0.2.16~95 X-Git-Url: https://pd.if.org/git/?p=zpackage;a=commitdiff_plain;h=e8fbd976703ac893302c8264f8ad4f540b271829 add c tap files --- diff --git a/t/ctap/ctap.c b/t/ctap/ctap.c new file mode 100644 index 0000000..b1caf7e --- /dev/null +++ b/t/ctap/ctap.c @@ -0,0 +1,268 @@ +#include +#include +#include +#include +#include +#include + +#include "ctap.h" + +/* global variable testnum? */ +static int test = 0; /* the test number */ +static int planned = 0; +static int intodo = 0; + +void begin_todo(void) { + intodo = 1; +} + +void end_todo(void) { + intodo = 0; +} + +void plan(int tests) { + test = 0; + planned = tests; + printf("1..%d\n", tests); +} + +static void print_lazy_plan(void) { + printf("1..%d\n", test); + fflush(stdout); +} + +void plan_lazy(void) { + test = 0; + planned = 0; + atexit(print_lazy_plan); +} + +void skip_all(const char *why, ...) { + printf("1..0"); + if (why) { + va_list args; + printf(" # SKIP "); + va_start(args, why); + vfprintf(stdout, why, args); + va_end(args); + } + printf("\n"); +} + +static void vfmtline(int pass, const char *directive, const char *fmt, va_list args) { + printf("%sok %d", pass ? "" : "not ", ++test); + if (fmt && !directive) { + printf(" -"); + } + if (directive) { + printf(" # %s", directive); + } + if (fmt) { + printf(" "); + vfprintf(stdout, fmt, args); + } + printf("\n"); +} + +#if 0 +static void fmtline(int pass, const char *info, const char *fmt, ...) { + va_list args; + + va_start(args,fmt); + vfmtline(pass, info, fmt, args); + va_end(args); +} +#endif + +void okv(int pass, const char *fmt, va_list args) { + vfmtline(pass, intodo ? "TODO" : 0, fmt, args); +} + +void ok(int pass, char *fmt, ...) { + va_list args; + + va_start(args, fmt); + okv(pass, fmt, args); + va_end(args); +} + +void ok_block(unsigned long count, int pass, const char *fmt, ...) { + va_list args; + va_list copy; + + if (count == 0) { + return; + } + + va_start(args, fmt); + while (count--) { + va_copy(copy, args); + okv(pass, fmt, copy); + va_end(copy); + } + va_end(args); +} + +void skip(const char *why, ...) { + va_list args; + + va_start(args, why); + vfmtline(1, "SKIP", why, args); + va_end(args); +} + +void skip_block(unsigned long count, const char *why, ...) { + va_list args; + va_list copy; + va_start(args, why); + + while (count--) { + va_copy(copy, args); + vfmtline(1, "SKIP", why, args); + va_end(copy); + } + + va_end(args); +} + +void bail(const char *fmt, ...) { + va_list args; + printf("Bail out!"); + if (fmt) { + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); + } + printf("\n"); + fflush(stdout); + exit(1); +} + +void sysbail(const char *fmt, ...) { + va_list args; + printf("Bail out!"); + if (fmt) { + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); + } + printf(": %s\n", strerror(errno)); + fflush(stdout); + exit(1); +} + +void sysdiag(const char *fmt, ...) { + va_list args; + if (!fmt) { return; } + printf("# "); + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); + printf(": %s\n", strerror(errno)); +} + +void diag(const char *fmt, ...) { + va_list args; + if (!fmt) { return; } + printf("# "); + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); + printf("\n"); +} + +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(pass, fmt, args); + va_end(args); + } else { + ok(pass, NULL); + } + 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_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(pass, fmt, args); + va_end(args); + } else { + ok(pass, NULL); + } + if (!pass) { + diag("wanted: %f", want); + diag("got : %f", have); + } +} + +void is_compare(void *have, void *want, + int (*cmp)(void *,void *), + const char *fmt, ... + ) { + int pass; + va_list args; + + pass = !cmp(have, want); + if (fmt) { + va_start(args, fmt); + okv(pass, fmt, args); + va_end(args); + } else { + ok(pass, NULL); + } + /* no way to print them with out more functions + if (!pass) { + diag("wanted: %s", want); + diag("got : %s", have); + } + */ +} + +int is_string(const char *have, const char *want, const char *fmt, ...) { + int pass; + va_list args; + + pass = !strcmp(have,want); + if (fmt) { + va_start(args, fmt); + okv(pass, fmt, args); + va_end(args); + } else { + ok(pass, NULL); + } + if (!pass) { + diag("wanted: %s", want); + diag("got : %s", have); + } + return pass; +} diff --git a/t/ctap/ctap.h b/t/ctap/ctap.h new file mode 100644 index 0000000..022d10d --- /dev/null +++ b/t/ctap/ctap.h @@ -0,0 +1,28 @@ +#ifndef TAP_H_ +#define TAP_H_ 1 + +#include + +void begin_todo(void); +void end_todo(void); +void plan(int tests); +void plan_lazy(void); +void skip_all(const char *why, ...); +void okv(int pass, const char *fmt, va_list args); +void ok(int pass, char *fmt, ...); +void ok_block(unsigned long count, int pass, const char *fmt, ...); +void skip(const char *why, ...); +void skip_block(unsigned long count, const char *why, ...); +void bail(const char *fmt, ...); +void sysbail(const char *fmt, ...); +void sysdiag(const char *fmt, ...); +void diag(const char *fmt, ...); +void is_hex(unsigned long wanted, unsigned long seen, const char *fmt, ...); +void is_int(long wanted, long seen, const char *fmt, ...); +void is_double(double wanted, double seen, double eps, const char *fmt, ...); +int is_string(const char *wanted, const char *seen, const char *fmt, ...); +void is_compare(void *have, void *want, int (*cmp)(void *,void *), + const char *fmt, ... + ); + +#endif