]> git.draconx.ca Git - cdecl99.git/blobdiff - test/testlib.c
Hand-code the normalized specifier ordering.
[cdecl99.git] / test / testlib.c
index e5143c20cc49a69805aa1d516d1b72151250d6a3..7471ece57e11ccf33ecd2408e7be0e25f829815b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Miscellaneous functions used by the cdecl99 test suite.
- *  Copyright © 2011 Nick Bowler
+ *  Copyright © 2011-2012, 2021 Nick Bowler
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -23,6 +23,9 @@
 #include <cdecl.h>
 #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) 2021 Nick Bowler.");
+       puts("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.");
+       puts("This is free software: you are free to change and redistribute it.");
+       puts("There is NO WARRANTY, to the extent permitted by law.");
+}