static void ptest_signal(int sig) { test_passing = 0; switch( sig ) { case SIGFPE: sprintf(assert_err_buff, " %i. Division by Zero\n", assert_err_num+1); break; case SIGILL: sprintf(assert_err_buff, " %i. Illegal Instruction\n", assert_err_num+1); break; case SIGSEGV: sprintf(assert_err_buff, " %i. Segmentation Fault\n", assert_err_num+1); break; } assert_err_num++; strcat(assert_err, assert_err_buff); pt_color(RED); printf("Failed! \n\n%s\n", assert_err); pt_color(DEFAULT); puts(" | Stopping Execution."); fflush(stdout); exit(0); }
void pt_run() { printf(" \n"); printf(" +-------------------------------------------+\n"); printf(" | ptest MicroTesting Magic for C |\n"); printf(" | |\n"); printf(" | Daniel Holden ([email protected]) |\n"); printf(" +-------------------------------------------+\n"); signal(SIGFPE, ptest_signal); signal(SIGILL, ptest_signal); signal(SIGSEGV, ptest_signal); start = clock(); strcpy(current_suite, ""); for(int i = 0; i < num_tests; i++) { test_t test = tests[i]; /* Check for transition to a new suite */ if (strcmp(test.suite, current_suite)) { /* Don't increment any counter for first entrance */ if (strcmp(current_suite, "")) { if (suite_passing) { num_suites_passes++; } else { num_suites_fails++; } } suite_passing = true; strcpy(current_suite, test.suite); printf("\n\n ===== %s =====\n\n", current_suite); } /* Run Test */ test_passing = true; strcpy(assert_err, ""); strcpy(assert_err_buff, ""); assert_err_num = 0; printf(" | %s ... ", test.name); test.func(); suite_passing = suite_passing && test_passing; if (test_passing) { num_tests_passes++; pt_color(GREEN); printf("Passed! \n"); pt_color(WHITE); } else { num_tests_fails++; pt_color(RED); printf("Failed! \n\n%s\n", assert_err); pt_color(WHITE); } } if (suite_passing) { num_suites_passes++; } else { num_suites_fails++; } end = clock(); printf(" \n"); printf(" +---------------------------------------------------+\n"); printf(" | Summary |\n"); printf(" +---------++------------+-------------+-------------+\n"); printf(" | Suites ||"); pt_color(YELLOW); printf(" Total %4d ", num_suites); pt_color(WHITE); printf("|"); pt_color(GREEN); printf(" Passed %4d ", num_suites_passes); pt_color(WHITE); printf("|"); pt_color(RED); printf(" Failed %4d ", num_suites_fails); pt_color(WHITE); printf("|\n"); printf(" | Tests ||"); pt_color(YELLOW); printf(" Total %4d ", num_tests); pt_color(WHITE); printf("|"); pt_color(GREEN); printf(" Passed %4d ", num_tests_passes); pt_color(WHITE); printf("|"); pt_color(RED); printf(" Failed %4d ", num_tests_fails); pt_color(WHITE); printf("|\n"); printf(" | Asserts ||"); pt_color(YELLOW); printf(" Total %4d ", num_asserts); pt_color(WHITE); printf("|"); pt_color(GREEN); printf(" Passed %4d ", num_assert_passes); pt_color(WHITE); printf("|"); pt_color(RED); printf(" Failed %4d ", num_assert_fails); pt_color(WHITE); printf("|\n"); printf(" +---------++------------+-------------+-------------+\n"); printf(" \n"); double total = (double)(end - start) / CLOCKS_PER_SEC; printf(" Total Running Time: %0.3fs\n\n", total); }
int pt_run(void) { unsigned int i; double total; test_t test; puts(""); puts(" +-------------------------------------------+"); puts(" | ptest MicroTesting Magic for C |"); puts(" | |"); puts(" | http://github.com/orangeduck/ptest |"); puts(" | |"); puts(" | Daniel Holden ([email protected]) |"); puts(" +-------------------------------------------+"); signal(SIGFPE, ptest_signal); signal(SIGILL, ptest_signal); signal(SIGSEGV, ptest_signal); start = clock(); strcpy(current_suite, ""); for(i = 0; i < num_tests; i++) { test = tests[i]; /* Check for transition to a new suite */ if (strcmp(test.suite, current_suite)) { /* Don't increment any counter for first entrance */ if (strcmp(current_suite, "")) { if (suite_passing) { num_suites_passes++; } else { num_suites_fails++; } } suite_passing = 1; strcpy(current_suite, test.suite); printf("\n\n ===== %s =====\n\n", current_suite); } /* Run Test */ test_passing = 1; strcpy(assert_err, ""); strcpy(assert_err_buff, ""); assert_err_num = 0; printf(" | %s ... ", test.name); fflush(stdout); test.func(); suite_passing = suite_passing && test_passing; if (test_passing) { num_tests_passes++; pt_color(GREEN); puts("Passed!"); pt_color(DEFAULT); } else { num_tests_fails++; pt_color(RED); printf("Failed! \n\n%s\n", assert_err); pt_color(DEFAULT); } } if (suite_passing) { num_suites_passes++; } else { num_suites_fails++; } end = clock(); puts(""); puts(" +---------------------------------------------------+"); puts(" | Summary |"); puts(" +---------++------------+-------------+-------------+"); printf(" | Suites ||"); pt_color(YELLOW); printf(" Total %4d ", num_suites); pt_color(DEFAULT); putchar('|'); pt_color(GREEN); printf(" Passed %4d ", num_suites_passes); pt_color(DEFAULT); putchar('|'); pt_color(RED); printf(" Failed %4d ", num_suites_fails); pt_color(DEFAULT); puts("|"); printf(" | Tests ||"); pt_color(YELLOW); printf(" Total %4d ", num_tests); pt_color(DEFAULT); putchar('|'); pt_color(GREEN); printf(" Passed %4d ", num_tests_passes); pt_color(DEFAULT); putchar('|'); pt_color(RED); printf(" Failed %4d ", num_tests_fails); pt_color(DEFAULT); puts("|"); printf(" | Asserts ||"); pt_color(YELLOW); printf(" Total %4d ", num_asserts); pt_color(DEFAULT); putchar('|'); pt_color(GREEN); printf(" Passed %4d ", num_assert_passes); pt_color(DEFAULT); putchar('|'); pt_color(RED); printf(" Failed %4d ", num_assert_fails); pt_color(DEFAULT); puts("|"); puts(" +---------++------------+-------------+-------------+"); puts(""); total = (double)(end - start) / CLOCKS_PER_SEC; printf(" Total Running Time: %0.3fs\n\n", total); if (num_suites_fails > 0) { return 1; } else { return 0; } }