]> git.sur5r.net Git - u-boot/blob - include/test/ut.h
dtoc: Add a way for tests to request the fallback library
[u-boot] / include / test / ut.h
1 /*
2  * Simple unit test library
3  *
4  * Copyright (c) 2013 Google, Inc
5  *
6  * SPDX-License-Identifier:     GPL-2.0+
7  */
8
9 #ifndef __TEST_UT_H
10 #define __TEST_UT_H
11
12 #include <linux/err.h>
13
14 struct unit_test_state;
15
16 /**
17  * ut_fail() - Record failure of a unit test
18  *
19  * @uts: Test state
20  * @fname: Filename where the error occurred
21  * @line: Line number where the error occurred
22  * @func: Function name where the error occurred
23  * @cond: The condition that failed
24  */
25 void ut_fail(struct unit_test_state *uts, const char *fname, int line,
26              const char *func, const char *cond);
27
28 /**
29  * ut_failf() - Record failure of a unit test
30  *
31  * @uts: Test state
32  * @fname: Filename where the error occurred
33  * @line: Line number where the error occurred
34  * @func: Function name where the error occurred
35  * @cond: The condition that failed
36  * @fmt: printf() format string for the error, followed by args
37  */
38 void ut_failf(struct unit_test_state *uts, const char *fname, int line,
39               const char *func, const char *cond, const char *fmt, ...)
40                         __attribute__ ((format (__printf__, 6, 7)));
41
42
43 /* Assert that a condition is non-zero */
44 #define ut_assert(cond)                                                 \
45         if (!(cond)) {                                                  \
46                 ut_fail(uts, __FILE__, __LINE__, __func__, #cond);      \
47                 return CMD_RET_FAILURE;                                 \
48         }
49
50 /* Assert that a condition is non-zero, with printf() string */
51 #define ut_assertf(cond, fmt, args...)                                  \
52         if (!(cond)) {                                                  \
53                 ut_failf(uts, __FILE__, __LINE__, __func__, #cond,      \
54                          fmt, ##args);                                  \
55                 return CMD_RET_FAILURE;                                 \
56         }
57
58 /* Assert that two int expressions are equal */
59 #define ut_asserteq(expr1, expr2) {                                     \
60         unsigned int val1 = (expr1), val2 = (expr2);                    \
61                                                                         \
62         if (val1 != val2) {                                             \
63                 ut_failf(uts, __FILE__, __LINE__, __func__,             \
64                          #expr1 " == " #expr2,                          \
65                          "Expected %d, got %d", val1, val2);            \
66                 return CMD_RET_FAILURE;                                 \
67         }                                                               \
68 }
69
70 /* Assert that two string expressions are equal */
71 #define ut_asserteq_str(expr1, expr2) {                                 \
72         const char *val1 = (expr1), *val2 = (expr2);                    \
73                                                                         \
74         if (strcmp(val1, val2)) {                                       \
75                 ut_failf(uts, __FILE__, __LINE__, __func__,             \
76                          #expr1 " = " #expr2,                           \
77                          "Expected \"%s\", got \"%s\"", val1, val2);    \
78                 return CMD_RET_FAILURE;                                 \
79         }                                                               \
80 }
81
82 /* Assert that two pointers are equal */
83 #define ut_asserteq_ptr(expr1, expr2) {                                 \
84         const void *val1 = (expr1), *val2 = (expr2);                    \
85                                                                         \
86         if (val1 != val2) {                                             \
87                 ut_failf(uts, __FILE__, __LINE__, __func__,             \
88                          #expr1 " = " #expr2,                           \
89                          "Expected %p, got %p", val1, val2);            \
90                 return CMD_RET_FAILURE;                                 \
91         }                                                               \
92 }
93
94 /* Assert that a pointer is not NULL */
95 #define ut_assertnonnull(expr) {                                        \
96         const void *val = (expr);                                       \
97                                                                         \
98         if (val == NULL) {                                              \
99                 ut_failf(uts, __FILE__, __LINE__, __func__,             \
100                          #expr " = NULL",                               \
101                          "Expected non-null, got NULL");                \
102                 return CMD_RET_FAILURE;                                 \
103         }                                                               \
104 }
105
106 /* Assert that a pointer is not an error pointer */
107 #define ut_assertok_ptr(expr) {                                 \
108         const void *val = (expr);                                       \
109                                                                         \
110         if (IS_ERR(val)) {                                              \
111                 ut_failf(uts, __FILE__, __LINE__, __func__,             \
112                          #expr " = NULL",                               \
113                          "Expected pointer, got error %ld",             \
114                          PTR_ERR(val));                                 \
115                 return CMD_RET_FAILURE;                                 \
116         }                                                               \
117 }
118
119 /* Assert that an operation succeeds (returns 0) */
120 #define ut_assertok(cond)       ut_asserteq(0, cond)
121
122 #endif