]> git.lizzy.rs Git - nothing.git/blob - test/test.h
f8a092d8cef274d738410d14d62c5e353a5a817a
[nothing.git] / test / test.h
1 #ifndef TEST_H_
2 #define TEST_H_
3
4 #include "math.h"
5
6 #define TEST_RUN(name)                          \
7     if (name() < 0) {                           \
8         return -1;                              \
9     }
10
11 #define TEST(name)                              \
12     static int name##_body(void);               \
13     static int name(void) {                     \
14         printf("%s() ...", #name);              \
15         if (name##_body() == 0) {               \
16             printf(" OK\n");                    \
17             return 0;                           \
18         } else {                                \
19             printf(" FAILED\n");                \
20             return -1;                          \
21         }                                       \
22     }                                           \
23     static int name##_body(void)
24
25 // TODO(#308): ASSERT_* macros evaluate expressions several times
26
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");                                          \
37         return -1;                                                      \
38     }
39
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);                      \
46         return -1;                                                      \
47     }
48
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);                      \
55         return -1;                                                      \
56     }
57
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);                     \
64         return -1;                                                      \
65     }
66
67
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);                      \
75         return -1;                                                      \
76     }
77
78 #define ASSERT_TRUE(condition, message)                                 \
79     if (!(condition)) {                                                 \
80         fprintf(stderr, "\n%s:%d: ASSERT_TRUE: false\n",                \
81                 __FILE__, __LINE__);                                    \
82         fprintf(stderr, "%s\n", message);                               \
83         return -1;                                                      \
84     }
85
86 #define ASSERT_FALSE(condition, message)                                \
87     if (condition) {                                                    \
88         fprintf(stderr, "\n%s:%d: ASSERT_FALSE: false\n",               \
89                 __FILE__, __LINE__);                                    \
90         fprintf(stderr, "%s\n", message);                               \
91         return -1;                                                      \
92     }
93
94 #define TEST_SUITE(name)                        \
95     static int name##_body(void);               \
96     static int name(void) {                     \
97         if (name##_body() < 0) {                \
98             return -1;                          \
99         }                                       \
100         return 0;                               \
101     }                                           \
102     static int name##_body(void)
103
104 #define TEST_MAIN()                             \
105     static int main_body(void);                 \
106     int main(void) {                            \
107         if (main_body() < 0) {                  \
108             return -1;                          \
109         }                                       \
110         return 0;                               \
111     }                                           \
112     static int main_body(void)
113
114 #endif  // TEST_H_