#define KNRM "\x1B[0m" #define KRED "\x1B[31m" #define KGRN "\x1B[32m" #define KBLU "\x1B[34m" #define red(str) KRED str KNRM #define green(str) KGRN str KNRM #define blue(str) KBLU str KNRM #define ALERT KRED"[!]"KNRM #define INFO KNRM"[~]"KNRM #define GOOD KGRN"[*]"KNRM #define lenofarr(axx) (sizeof(axx)/sizeof(axx[0])) typedef struct { int error; int cases_passed; } unit_result; #define MU_UNIT_INIT() int err = 0; int unit_cases_run = 0; #define MU_UNIT_EXIT() return (unit_result){err, unit_cases_run}; #define mu_assert(error_format, test, ...) \ do { \ unit_cases_run++; \ if (!(test)) { \ printf( ALERT"\t%s: " error_format "\n\n", __func__, ##__VA_ARGS__); \ err = 1; \ }\ } while (0) #define mu_run_test(unit) \ do { \ printf(INFO" Testing "#unit"\n"); \ unit_result result = unit();\ units_run++; \ /*if (result.error) return result.error; */\ if (result.error){ printf(ALERT" Unit Failed \n"); err = 1; break;}\ printf(GOOD" Unit Passed \n"); \ } while (0) extern int units_run; extern int unit_cases_run;