-.BI "void test_do(const test_suite " suite [],
-.BI " FILE *" fp ,
-.BI " test_results *" results );
-.BI "void test_run(int " argc ", char *" argv [],
-.BI " const test_chunk " chunk [],
-.BI " const char *" def );
+.B "#define TEST_FIELDMAX ..."
+
+.B "typedef struct {"
+.B "\h'4n'unsigned tests, failed;"
+.B "} test_results";
+
+.B "typedef struct {"
+.BI "\h'4n'void (*cvt)(const char *" buf ", dstr *" d );
+.BI "\h'4n'void (*dump)(dstr *" d ", FILE *" fp );
+.B "} test_type";
+
+.B "typedef struct {"
+.B "\h'4n'const char *name;"
+.BI "\h'4n'void (*test)(dstr " dv "[]);"
+.B "\h'4n'const test_type *f[TEST_FIELDMAX];"
+.B "} test_chunk";
+
+.B "typedef struct {"
+.B "\h'4n'const char *name;"
+.B "\h'4n'const test_chunk *chunks;"
+.B "} test_suite";
+
+.B "const test_type type_hex;"
+.B "const test_type type_string;"
+.B "const test_type type_int;"
+.B "const test_type type_long;"
+.B "const test_type type_ulong;"
+.B "const test_type type_uint32;"
+
+.ds mT \fBint test_do(
+.BI "\*(mTconst test_suite " suite [],
+.BI "\h'\w'\*(mT'u'FILE *" fp ,
+.BI "\h'\w'\*(mT'u'test_results *" results );
+.ds mT \fBvoid test_run(
+.BI "\*(mTint " argc ", char *" argv [],
+.BI "\h'\w'\*(mT'u'const test_chunk " chunk [],
+.BI "\h'\w'\*(mT'u'const char *" def );