PRINTF_FORMAT(2, 3) static void test_verdict(int pass, const char *extra, ...) { va_list ap; test_flush_stdout(); test_flush_stderr(); test_printf_stdout("%*s%s", level, "", pass ? "ok" : "not ok"); if (extra != NULL) { test_printf_stdout(" "); va_start(ap, extra); test_vprintf_stdout(extra, ap); va_end(ap); } test_printf_stdout("\n"); test_flush_stdout(); }
int run_tests(const char *test_prog_name) { int num_failed = 0; char *verdict = NULL; int i, j; if (num_tests < 1) test_printf_stdout("%*s1..0 # Skipped: %s\n", level, "", test_prog_name); else if (level > 0) test_printf_stdout("%*s1..%d # Subtest: %s\n", level, "", num_tests, test_prog_name); else test_printf_stdout("%*s1..%d\n", level, "", num_tests); test_flush_stdout(); for (i = 0; i != num_tests; ++i) { if (all_tests[i].num == -1) { int ret = all_tests[i].test_fn(); test_flush_stdout(); test_flush_stderr(); verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, i + 1, all_tests[i].test_case_name); test_flush_stdout(); finalize(ret); } else { int num_failed_inner = 0; level += 4; if (all_tests[i].subtest) { test_printf_stdout("%*s# Subtest: %s\n", level, "", all_tests[i].test_case_name); test_printf_stdout("%*s%d..%d\n", level, "", 1, all_tests[i].num); test_flush_stdout(); } for (j = 0; j < all_tests[i].num; j++) { int ret = all_tests[i].param_test_fn(j); test_flush_stdout(); test_flush_stderr(); if (!ret) ++num_failed_inner; finalize(ret); if (all_tests[i].subtest) { verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed_inner; } test_printf_stdout("%*s%s %d\n", level, "", verdict, j + 1); test_flush_stdout(); } } level -= 4; verdict = "ok"; if (num_failed_inner) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, i + 1, all_tests[i].test_case_name); test_flush_stdout(); } } if (num_failed != 0) return EXIT_FAILURE; return EXIT_SUCCESS; }
int run_tests(const char *test_prog_name) { int num_failed = 0; char *verdict = NULL; int ii, i, jj, j, jstep; int permute[OSSL_NELEM(all_tests)]; if (num_tests < 1) { test_printf_stdout("%*s1..0 # Skipped: %s\n", level, "", test_prog_name); } else { if (level > 0) test_printf_stdout("%*s# Subtest: %s\n", level, "", test_prog_name); test_printf_stdout("%*s1..%d\n", level, "", num_tests); } test_flush_stdout(); for (i = 0; i < num_tests; i++) permute[i] = i; if (seed != 0) for (i = num_tests - 1; i >= 1; i--) { j = rand() % (1 + i); ii = permute[j]; permute[j] = permute[i]; permute[i] = ii; } for (ii = 0; ii != num_tests; ++ii) { i = permute[ii]; if (all_tests[i].num == -1) { int ret = 0; set_test_title(all_tests[i].test_case_name); ret = all_tests[i].test_fn(); test_flush_stdout(); test_flush_stderr(); verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, ii + 1, test_title); test_flush_stdout(); finalize(ret); } else { int num_failed_inner = 0; level += 4; if (all_tests[i].subtest) { test_printf_stdout("%*s# Subtest: %s\n", level, "", all_tests[i].test_case_name); test_printf_stdout("%*s%d..%d\n", level, "", 1, all_tests[i].num); test_flush_stdout(); } j = -1; if (seed == 0 || all_tests[i].num < 3) jstep = 1; else do jstep = rand() % all_tests[i].num; while (jstep == 0 || gcd(all_tests[i].num, jstep) != 1); for (jj = 0; jj < all_tests[i].num; jj++) { int ret; j = (j + jstep) % all_tests[i].num; set_test_title(NULL); ret = all_tests[i].param_test_fn(j); test_flush_stdout(); test_flush_stderr(); if (!ret) ++num_failed_inner; finalize(ret); if (all_tests[i].subtest) { verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed_inner; } if (test_title != NULL) test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, jj + 1, test_title); else test_printf_stdout("%*s%s %d - iteration %d\n", level, "", verdict, jj + 1, j + 1); test_flush_stdout(); } } level -= 4; verdict = "ok"; if (num_failed_inner) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, ii + 1, all_tests[i].test_case_name); test_flush_stdout(); } } if (num_failed != 0) return EXIT_FAILURE; return EXIT_SUCCESS; }