6 #define TEST_RUN(name) \
12 static int name##_body(void); \
13 static int name(void) { \
14 printf("%s() ...", #name); \
15 if (name##_body() == 0) { \
19 printf(" FAILED\n"); \
23 static int name##_body(void)
25 // TODO(#308): ASSERT_* macros evaluate expressions several times
27 #define ASSERT_STREQN(expected, actual, n) \
28 if (strncmp(expected, actual, n) != 0) { \
29 fprintf(stderr, "\n%s:%d: ASSERT_STREQN: \n", \
30 __FILE__, __LINE__); \
31 fprintf(stderr, " Expected: "); \
32 fwrite(expected, sizeof(char), n, stderr); \
33 fprintf(stderr, "\n"); \
34 fprintf(stderr, " Actual: "); \
35 fwrite(actual, sizeof(char), n, stderr); \
36 fprintf(stderr, "\n"); \
40 #define ASSERT_STREQ(expected, actual) \
41 if (strcmp(expected, actual) != 0) { \
42 fprintf(stderr, "\n%s:%d: ASSERT_STREQ: \n", \
43 __FILE__, __LINE__); \
44 fprintf(stderr, " Expected: %s\n", expected); \
45 fprintf(stderr, " Actual: %s\n", actual); \
49 #define ASSERT_INTEQ(expected, actual) \
50 if (expected != actual) { \
51 fprintf(stderr, "\n%s:%d: ASSERT_INTEQ: \n", \
52 __FILE__, __LINE__); \
53 fprintf(stderr, " Expected: %d\n", expected); \
54 fprintf(stderr, " Actual: %d\n", actual); \
58 #define ASSERT_LONGINTEQ(expected, actual) \
59 if (expected != actual) { \
60 fprintf(stderr, "\n%s:%d: ASSERT_LONGINTEQ: \n", \
61 __FILE__, __LINE__); \
62 fprintf(stderr, " Expected: %ld\n", expected); \
63 fprintf(stderr, " Actual: %ld\n", actual); \
68 #define ASSERT_FLOATEQ(expected, actual, margin) \
69 if (fabsf(expected - actual) > margin) { \
70 fprintf(stderr, "\n%s:%d: ASSERT_FLOATEQ: \n", \
71 __FILE__, __LINE__); \
72 fprintf(stderr, " Expected: %f\n", expected); \
73 fprintf(stderr, " Actual: %f\n", actual); \
74 fprintf(stderr, " Margin: %f\n", margin); \
78 #define ASSERT_TRUE(condition, message) \
80 fprintf(stderr, "\n%s:%d: ASSERT_TRUE: false\n", \
81 __FILE__, __LINE__); \
82 fprintf(stderr, "%s\n", message); \
86 #define ASSERT_FALSE(condition, message) \
88 fprintf(stderr, "\n%s:%d: ASSERT_FALSE: false\n", \
89 __FILE__, __LINE__); \
90 fprintf(stderr, "%s\n", message); \
94 #define TEST_SUITE(name) \
95 static int name##_body(void); \
96 static int name(void) { \
97 if (name##_body() < 0) { \
102 static int name##_body(void)
104 #define TEST_MAIN() \
105 static int main_body(void); \
107 if (main_body() < 0) { \
112 static int main_body(void)