ref: d8ddc90c497260a1f22cfbbc72c58ba1434eb366
dir: /test/run.c/
#include <stdlib.h> #include <stdio.h> #include <string.h> #include "soundpipe.h" #include "md5.h" #include "tap.h" #include "test.h" #define TEST(str, desc, md5hash) int str(sp_test *tst, sp_data *sp, const char *hash); #include "all_tests.h" #undef TEST #define SIZE(x) sizeof(x) / sizeof(*x) typedef struct { sp_data *sp; uint32_t size; } test_data; static void print_help() { printf("Commands:\n"); printf("\tgen_header: print header.\n"); printf("\tregen_header: regenerate header\n"); printf("\trender NUM: render output at position NUM\n"); printf("\ttest NUM: test position NUM\n"); } /* TODO: refactor */ int main(int argc, char *argv[]) { uint32_t n; sp_test_entry tests [] = { #define TEST(str, desc, md5hash) {str, desc, md5hash}, #include "all_tests.h" #undef TEST }; int err = 0; unsigned int rc; unsigned int errcnt; sp_test *tst; sp_data *sp; sp_create(&sp); uint32_t size = 44100 * 5; errcnt = 0; if(argc == 1) { plan(SIZE(tests)); for(n = 0; n < SIZE(tests); n++) { sp_test_create(&tst, size); rc = ok(tests[n].func(tst, sp, tests[n].hash) == SP_OK, tests[n].desc); #ifdef WRITE_RAW if(n != 0) sp_test_write_raw(tst, n); #endif if(n != 0 && !rc) { errcnt++; } sp_test_destroy(&tst); } if(errcnt > 0) { fprintf(stderr, "Testing resulted in %d error(s).\n", errcnt); } } else { if (!strcmp(argv[1], "gen_header")) { for(n = 0; n < SIZE(tests); n++) { printf("TEST(t_%s, \"%s\", \"%s\")\n", tests[n].desc, tests[n].desc, tests[n].hash); } } else if (!strcmp(argv[1], "test")) { if(argc < 3) { fprintf(stderr, "Not enough options for test!\n"); err = 1; } else { unsigned int pos = atoi(argv[2]) - 1; if(pos > SIZE(tests)) { fprintf(stderr, "Test number %d exceeds size\n", pos); } else { plan(SIZE(tests)); sp_test_create(&tst, size); ok(tests[pos].func(tst, sp, tests[pos].hash) == SP_OK, tests[pos].desc); sp_test_destroy(&tst); } } } else if (!strcmp(argv[1], "regen_header")) { for(n = 0; n < SIZE(tests); n++) { sp_test_create(&tst, size); tst->mode = HEADER; tst->cur_entry = &tests[n]; tests[n].func(tst, sp, tests[n].hash); sp_test_destroy(&tst); } } else if (!strcmp(argv[1], "render")) { if(argc < 3) { fprintf(stderr, "Not enough options for render!\n"); err = 1; } else { unsigned int pos = atoi(argv[2]) - 1; if(pos > SIZE(tests)) { fprintf(stderr, "Test number %d exceeds size\n", pos); } else { sp_test_create(&tst, size); tests[pos].func(tst, sp, tests[pos].hash); sp_test_write_raw(tst, pos + 1); sp_test_destroy(&tst); } } } else if (!strcmp(argv[1], "help")) { print_help(); } else { fprintf(stderr, "Invalid command %s\n", argv[1]); err = 1; } } sp_destroy(&sp); return err; }