1 /*****************************************************************************/
4 * \brief Some useful assert-style macros.
7 * \author Bjoern Doebel <doebel@tudos.org>
11 * economic rights: Technische Universität Dresden (Germany)
12 * This file is part of TUD:OS and distributed under the terms of the
13 * GNU Lesser General Public License 2.1.
14 * Please see the COPYING-LGPL-2.1 file for details.
17 /*****************************************************************************/
22 #define DO_NOTHING do {} while (0)
23 #define ASSERT_VALID(c) DO_NOTHING
24 #define ASSERT_EQUAL(a,b) DO_NOTHING
25 #define ASSERT_NOT_EQUAL(a,b) DO_NOTHING
26 #define ASSERT_LOWER_EQ(a,b) DO_NOTHING
27 #define ASSERT_GREATER_EQ(a,b) DO_NOTHING
28 #define ASSERT_BETWEEN(a,b,c) DO_NOTHING
29 #define ASSERT_IPC_OK(i) DO_NOTHING
30 #define ASSERT_OK(e) do { (void)e; } while (0)
31 #define ASSERT_NOT_NULL(p) DO_NOTHING
33 #define assert(cond) DO_NOTHING
40 #define ASSERT_PRINTF printf
44 #define ASSERT_ASSERT(x) assert(x)
47 #define ASSERT_VALID(cap) \
49 typeof(cap) _cap = cap; \
50 if (l4_is_invalid_cap(_cap)) { \
51 ASSERT_PRINTF("%s: Cap invalid.\n", __func__); \
52 ASSERT_ASSERT(!l4_is_invalid_cap(_cap)); \
57 #define ASSERT_EQUAL(a, b) \
62 ASSERT_PRINTF("%s:\n", __func__); \
63 ASSERT_PRINTF(" "#a" (%lx) != "#b" (%lx)\n", (unsigned long)_a, (unsigned long)_b); \
64 ASSERT_ASSERT(_a == _b); \
69 #define ASSERT_NOT_EQUAL(a, b) \
74 ASSERT_PRINTF("%s:\n", __func__); \
75 ASSERT_PRINTF(" "#a" (%lx) == "#b" (%lx)\n", (unsigned long)_a, (unsigned long)_b); \
76 ASSERT_ASSERT(_a != _b); \
81 #define ASSERT_LOWER_EQ(val, max) \
83 typeof(val) _val = val; \
84 typeof(max) _max = max; \
86 ASSERT_PRINTF("%s:\n", __func__); \
87 ASSERT_PRINTF(" "#val" (%lx) > "#max" (%lx)\n", (unsigned long)_val, (unsigned long)_max); \
88 ASSERT_ASSERT(_val <= _max); \
93 #define ASSERT_GREATER_EQ(val, min) \
95 typeof(val) _val = val; \
96 typeof(min) _min = min; \
98 ASSERT_PRINTF("%s:\n", __func__); \
99 ASSERT_PRINTF(" "#val" (%lx) < "#min" (%lx)\n", (unsigned long)_val, (unsigned long)_min); \
100 ASSERT_ASSERT(_val >= _min); \
105 #define ASSERT_BETWEEN(val, min, max) \
106 ASSERT_LOWER_EQ((val), (max)); \
107 ASSERT_GREATER_EQ((val), (min));
110 #define ASSERT_IPC_OK(msgtag) \
112 int _r = l4_ipc_error(msgtag, l4_utcb()); \
114 ASSERT_PRINTF("%s: IPC Error: %lx\n", __func__, _r); \
115 ASSERT_ASSERT(_r == 0); \
119 #define ASSERT_OK(val) ASSERT_EQUAL((val), 0)
120 #define ASSERT_NOT_NULL(ptr) ASSERT_NOT_EQUAL((ptr), (void *)0)