]>
Commit | Line | Data |
---|---|---|
2e7d35d2 | 1 | /* |
e721b882 | 2 | * Simple unit test library |
2e7d35d2 SG |
3 | * |
4 | * Copyright (c) 2013 Google, Inc | |
5 | * | |
6 | * SPDX-License-Identifier: GPL-2.0+ | |
7 | */ | |
8 | ||
e721b882 JH |
9 | #ifndef __TEST_UT_H |
10 | #define __TEST_UT_H | |
2e7d35d2 | 11 | |
85aeda4a SG |
12 | #include <linux/err.h> |
13 | ||
e721b882 | 14 | struct unit_test_state; |
2e7d35d2 SG |
15 | |
16 | /** | |
17 | * ut_fail() - Record failure of a unit test | |
18 | * | |
e721b882 | 19 | * @uts: Test state |
2e7d35d2 SG |
20 | * @fname: Filename where the error occured |
21 | * @line: Line number where the error occured | |
22 | * @func: Function name where the error occured | |
23 | * @cond: The condition that failed | |
24 | */ | |
e721b882 | 25 | void ut_fail(struct unit_test_state *uts, const char *fname, int line, |
2e7d35d2 SG |
26 | const char *func, const char *cond); |
27 | ||
28 | /** | |
29 | * ut_failf() - Record failure of a unit test | |
30 | * | |
e721b882 | 31 | * @uts: Test state |
2e7d35d2 SG |
32 | * @fname: Filename where the error occured |
33 | * @line: Line number where the error occured | |
34 | * @func: Function name where the error occured | |
35 | * @cond: The condition that failed | |
36 | * @fmt: printf() format string for the error, followed by args | |
37 | */ | |
e721b882 | 38 | void ut_failf(struct unit_test_state *uts, const char *fname, int line, |
2e7d35d2 SG |
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)) { \ | |
e721b882 | 46 | ut_fail(uts, __FILE__, __LINE__, __func__, #cond); \ |
fe3f6a65 | 47 | return CMD_RET_FAILURE; \ |
2e7d35d2 SG |
48 | } |
49 | ||
50 | /* Assert that a condition is non-zero, with printf() string */ | |
51 | #define ut_assertf(cond, fmt, args...) \ | |
52 | if (!(cond)) { \ | |
e721b882 | 53 | ut_failf(uts, __FILE__, __LINE__, __func__, #cond, \ |
2e7d35d2 | 54 | fmt, ##args); \ |
fe3f6a65 | 55 | return CMD_RET_FAILURE; \ |
2e7d35d2 SG |
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) { \ | |
e721b882 | 63 | ut_failf(uts, __FILE__, __LINE__, __func__, \ |
2e7d35d2 SG |
64 | #expr1 " == " #expr2, \ |
65 | "Expected %d, got %d", val1, val2); \ | |
fe3f6a65 | 66 | return CMD_RET_FAILURE; \ |
2e7d35d2 SG |
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)) { \ | |
e721b882 | 75 | ut_failf(uts, __FILE__, __LINE__, __func__, \ |
2e7d35d2 SG |
76 | #expr1 " = " #expr2, \ |
77 | "Expected \"%s\", got \"%s\"", val1, val2); \ | |
fe3f6a65 | 78 | return CMD_RET_FAILURE; \ |
2e7d35d2 SG |
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) { \ | |
e721b882 | 87 | ut_failf(uts, __FILE__, __LINE__, __func__, \ |
2e7d35d2 SG |
88 | #expr1 " = " #expr2, \ |
89 | "Expected %p, got %p", val1, val2); \ | |
fe3f6a65 | 90 | return CMD_RET_FAILURE; \ |
2e7d35d2 SG |
91 | } \ |
92 | } | |
93 | ||
ecc2ed55 SG |
94 | /* Assert that a pointer is not NULL */ |
95 | #define ut_assertnonnull(expr) { \ | |
96 | const void *val = (expr); \ | |
97 | \ | |
98 | if (val == NULL) { \ | |
e721b882 | 99 | ut_failf(uts, __FILE__, __LINE__, __func__, \ |
ecc2ed55 SG |
100 | #expr " = NULL", \ |
101 | "Expected non-null, got NULL"); \ | |
fe3f6a65 | 102 | return CMD_RET_FAILURE; \ |
ecc2ed55 SG |
103 | } \ |
104 | } | |
105 | ||
85aeda4a SG |
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 | ||
2e7d35d2 SG |
119 | /* Assert that an operation succeeds (returns 0) */ |
120 | #define ut_assertok(cond) ut_asserteq(0, cond) | |
121 | ||
122 | #endif |