X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/568c39ad1836f8cf87ccc1b2ba577b6f6ba37e25..b8b1c8789189cf94ec1e1a15623531ebecc3eb85:/test/testlib.c diff --git a/test/testlib.c b/test/testlib.c index e5143c2..2c859a9 100644 --- a/test/testlib.c +++ b/test/testlib.c @@ -23,6 +23,9 @@ #include #include "test.h" +static size_t printbuf_size; +static char *printbuf; + void *realloc_nofail(void *ptr, size_t size) { void *p; @@ -43,19 +46,32 @@ void *malloc_nofail(size_t size) void test_print_decl(struct cdecl *decl) { - static size_t bufsz; - static char *buf; size_t rc; retry: - rc = cdecl_declare(buf, bufsz, decl); - if (rc >= bufsz) { - bufsz = rc + 1; - buf = realloc_nofail(buf, bufsz); + rc = cdecl_declare(printbuf, printbuf_size, decl); + if (rc >= printbuf_size) { + printbuf_size = rc + 1; + printbuf = realloc_nofail(printbuf, printbuf_size); goto retry; } - printf("%s\n", buf); + printf("%s\n", printbuf); +} + +void test_explain_decl(struct cdecl *decl) +{ + size_t rc; + +retry: + rc = cdecl_explain(printbuf, printbuf_size, decl); + if (rc >= printbuf_size) { + printbuf_size = rc + 1; + printbuf = realloc_nofail(printbuf, printbuf_size); + goto retry; + } + + printf("%s\n", printbuf); } bool strict_strtoul(unsigned long *val, const char *str, int base) @@ -69,3 +85,12 @@ bool strict_strtoul(unsigned long *val, const char *str, int base) return true; } + +void test_print_version(const char *program) +{ + printf("%s (%s) %s\n", program, PACKAGE_NAME, PACKAGE_VERSION); + puts("Copyright (C) 2011 Nick Bowler."); + puts("License GPLv3+: GNU GPL version 3 or later ."); + puts("This is free software: you are free to change and redistribute it."); + puts("There is NO WARRANTY, to the extent permitted by law."); +}