1 #include "incs.h"
2
3 #define TEST_MAX 100
4
5 struct test_entry {
6 testfunc func;
7 const char *name;
8 } entries[TEST_MAX];
9
10 int ntests = 0;
11
test_entry_cmp(const void * a,const void * b)12 int test_entry_cmp(const void *a, const void *b)
13 {
14 return strcmp(
15 ((struct test_entry *)a)->name,
16 ((struct test_entry *)b)->name);
17 }
18
main(void)19 int main(void)
20 {
21 srandom_deterministic(time(NULL));
22
23 qsort(entries, ntests, sizeof(struct test_entry), test_entry_cmp);
24
25 for (int i = 0; i < ntests; i++) {
26 fprintf(stderr, "running test %s\n", entries[i].name);
27 entries[i].func();
28 }
29
30 fprintf(stderr, "tests are successfully completed.\n");
31 return 0;
32 }
33
check_failed(const char * expr,const char * file,int line)34 void check_failed(const char *expr, const char *file, int line)
35 {
36 fprintf(stderr, "CHECK FAILED: %s at file %s line %d\n", expr, file, line);
37 exit(1);
38 }
39
add_test(testfunc fn,const char * name)40 void add_test(testfunc fn, const char *name)
41 {
42 entries[ntests].func = fn;
43 entries[ntests].name = name;
44 ntests++;
45 }
46