Example #1
0
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();
}
Example #2
0
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;
}
Example #3
0
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;
}