78#define TEST_CASE(name) static bool name(void)
89#define REQUIRE(expr) \
91 if (!pu_require((expr) ? true : false, (#expr), __FILE__, __LINE__)) \
103#define RUN_TEST_CASE(test_fp) (pu_run_test(#test_fp, test_fp))
110#define TEST_SUITE(name) void name(void)
118#define RUN_TEST_SUITE(suite_fp) pu_run_suite(#suite_fp, suite_fp)
176 const char*
const expr,
177 const char*
const file,
196#ifdef PICO_UNIT_IMPLEMENTATION
200#ifndef PICO_UNIT_NO_CLOCK
204#define TERM_COLOR_CODE 0x1B
205#define TERM_COLOR_RED "[1;31m"
206#define TERM_COLOR_GREEN "[1;32m"
207#define TERM_COLOR_BOLD "[1m"
208#define TERM_COLOR_RESET "[0m"
210static unsigned pu_num_asserts = 0;
211static unsigned pu_num_passed = 0;
212static unsigned pu_num_failed = 0;
213static unsigned pu_num_suites = 0;
214static bool pu_colors =
false;
215static bool pu_time =
false;
223 pu_setup_fp = fp_setup;
224 pu_teardown_fp = fp_teardown;
231 pu_teardown_fp = NULL;
249 return (pu_num_failed != 0);
254 const char*
const expr,
255 const char*
const file,
267 printf(
"(%c%sFAILED%c%s: %s (%d): %s)\n",
268 TERM_COLOR_CODE, TERM_COLOR_RED,
269 TERM_COLOR_CODE, TERM_COLOR_RESET,
274 printf(
"(FAILED: %s (%d): %s)\n", file, line, expr);
283 if (NULL != pu_setup_fp)
288 printf(
"Running: %s ", name);
290 #ifndef PICO_UNIT_NO_CLOCK
292 clock_t start_time = 0;
293 clock_t end_time = 0;
297 start_time = clock();
306 if (NULL != pu_teardown_fp)
314 #ifndef PICO_UNIT_NO_CLOCK
325 printf(
"(%c%sOK%c%s)", TERM_COLOR_CODE, TERM_COLOR_GREEN,
326 TERM_COLOR_CODE, TERM_COLOR_RESET);
333 #ifndef PICO_UNIT_NO_CLOCK
337 printf(
" (%f secs)", (
double)(end_time - start_time) / CLOCKS_PER_SEC);
346 if (NULL != pu_teardown_fp)
355 printf(
"===============================================================\n");
359 printf(
"%c%sRunning: %s%c%s\n", TERM_COLOR_CODE, TERM_COLOR_BOLD,
361 TERM_COLOR_CODE, TERM_COLOR_RESET);
365 printf(
"Running: %s\n", name);
368 printf(
"---------------------------------------------------------------\n");
376 printf(
"===============================================================\n");
380 printf(
"Summary: Passed: %c%s%u%c%s "
381 "Failed: %c%s%u%c%s "
382 "Total: %u Suites: %u "
384 TERM_COLOR_CODE, TERM_COLOR_GREEN, pu_num_passed,
385 TERM_COLOR_CODE, TERM_COLOR_RESET,
386 TERM_COLOR_CODE, TERM_COLOR_RED, pu_num_failed,
387 TERM_COLOR_CODE, TERM_COLOR_RESET,
388 pu_num_passed + pu_num_failed,
389 pu_num_suites, pu_num_asserts);
393 printf(
"Summary: Passed: %u "
395 "Total: %u Suites: %u "
399 pu_num_passed + pu_num_failed,
400 pu_num_suites, pu_num_asserts);
void pu_clear_setup(void)
Disables the setup and teardown functions by setting them to NULL.
bool(* pu_test_fn)(void)
Definition pico_unit.h:169
void(* pu_suite_fn)(void)
Definition pico_unit.h:170
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.
bool pu_require(bool passed, const char *const expr, const char *const file, int line)
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:123
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_setup(pu_setup_fn setup_fp, pu_setup_fn teardown_fp)
Sets the current setup and teardown functions.