79#define TEST_CASE(name) static bool name(void)
90#define REQUIRE(expr) \
92 if (!pu_require((expr) ? true : false, (#expr), __FILE__, __LINE__, \
105#define RUN_TEST_CASE(test_fp) (pu_run_test(#test_fp, test_fp))
112#define TEST_SUITE(name) void name(void)
120#define RUN_TEST_SUITE(suite_fp) pu_run_suite(#suite_fp, suite_fp)
188 const char*
const expr,
189 const char*
const file,
191 const char*
const fmt, ...);
209#ifdef PICO_UNIT_IMPLEMENTATION
214#ifndef PICO_UNIT_NO_CLOCK
218#define TERM_COLOR_CODE 0x1B
219#define TERM_COLOR_RED "[1;31m"
220#define TERM_COLOR_GREEN "[1;32m"
221#define TERM_COLOR_BOLD "[1m"
222#define TERM_COLOR_RESET "[0m"
224static unsigned pu_num_asserts = 0;
225static unsigned pu_num_passed = 0;
226static unsigned pu_num_failed = 0;
227static unsigned pu_num_suites = 0;
228static bool pu_colors =
false;
229static bool pu_time =
false;
230static bool pu_quiet =
false;
235#define pu_quiet_printf(...) \
239 printf(__VA_ARGS__); \
246 pu_setup_fp = fp_setup;
247 pu_teardown_fp = fp_teardown;
254 pu_teardown_fp = NULL;
284 return (pu_num_failed != 0);
289 const char*
const expr,
290 const char*
const file,
292 const char*
const fmt, ...)
303 fprintf(stderr,
"(%c%sFAILED%c%s: %s (%d): %s)\n",
304 TERM_COLOR_CODE, TERM_COLOR_RED,
305 TERM_COLOR_CODE, TERM_COLOR_RESET,
310 fprintf(stderr,
"(FAILED: %s (%d): %s)\n", file, line, expr);
317 fprintf(stderr,
" note: ");
318 vfprintf(stderr, fmt, args);
319 fprintf(stderr,
"\n");
329 if (NULL != pu_setup_fp)
334 pu_quiet_printf(
"Running: %s ", name);
336 #ifndef PICO_UNIT_NO_CLOCK
338 clock_t start_time = 0;
339 clock_t end_time = 0;
343 start_time = clock();
352 pu_quiet_printf(
"\n");
354 if (NULL != pu_teardown_fp)
362 #ifndef PICO_UNIT_NO_CLOCK
373 pu_quiet_printf(
"(%c%sOK%c%s)", TERM_COLOR_CODE, TERM_COLOR_GREEN,
374 TERM_COLOR_CODE, TERM_COLOR_RESET);
378 pu_quiet_printf(
"(OK)");
381 #ifndef PICO_UNIT_NO_CLOCK
385 pu_quiet_printf(
" (%f secs)", (
double)(end_time - start_time) / CLOCKS_PER_SEC);
390 pu_quiet_printf(
"\n");
394 if (NULL != pu_teardown_fp)
403 pu_quiet_printf(
"===============================================================\n");
407 pu_quiet_printf(
"%c%sRunning: %s%c%s\n", TERM_COLOR_CODE, TERM_COLOR_BOLD,
409 TERM_COLOR_CODE, TERM_COLOR_RESET);
413 pu_quiet_printf(
"Running: %s\n", name);
416 pu_quiet_printf(
"---------------------------------------------------------------\n");
425 pu_quiet_printf(
"===============================================================\n");
429 pu_quiet_printf(
"Summary: Passed: %c%s%u%c%s "
430 "Failed: %c%s%u%c%s "
431 "Total: %u Suites: %u "
433 TERM_COLOR_CODE, TERM_COLOR_GREEN, pu_num_passed,
434 TERM_COLOR_CODE, TERM_COLOR_RESET,
435 TERM_COLOR_CODE, TERM_COLOR_RED, pu_num_failed,
436 TERM_COLOR_CODE, TERM_COLOR_RESET,
437 pu_num_passed + pu_num_failed,
438 pu_num_suites, pu_num_asserts);
442 pu_quiet_printf(
"Summary: Passed: %u "
444 "Total: %u Suites: %u "
448 pu_num_passed + pu_num_failed,
449 pu_num_suites, pu_num_asserts);
bool pu_is_quiet(void)
Returns whether quiet mode is enabled.
void pu_clear_setup(void)
Disables the setup and teardown functions by setting them to NULL.
bool pu_require(bool passed, const char *const expr, const char *const file, int line, const char *const fmt,...)
Used internally.
bool(* pu_test_fn)(void)
Definition pico_unit.h:181
void(* pu_suite_fn)(void)
Definition pico_unit.h:182
void pu_run_test(const char *const name, pu_test_fn test_fp)
Used internally.
void pu_run_suite(const char *const name, pu_suite_fn suite_fp)
Used internally.
void pu_print_stats(void)
Prints test statistics.
void pu_display_colors(bool enabled)
Turns on terminal colors. NOTE: Off by default.
void(* pu_setup_fn)(void)
Functions that are run before or after a number of unit tests execute.
Definition pico_unit.h:125
void pu_display_time(bool enabled)
Turns on time measurement. NOTE: Off by default.
bool pu_test_failed(void)
Check whether at least one test failed.
void pu_display_quiet(bool enabled)
Turns on quiet mode. Only failures are printed.
void pu_setup(pu_setup_fn setup_fp, pu_setup_fn teardown_fp)
Sets the current setup and teardown functions.