1 /*
2 * Assert definitions for tests.
3 *
4 * Copyright (c) 2020 Dmitry V. Levin <ldv@altlinux.org>
5 */
6
7 #ifndef TEST_ASSERT_H
8 # define TEST_ASSERT_H
9
10 # ifdef HAVE_CONFIG_H
11 # include <config.h>
12 # endif
13
14 # include <stdio.h>
15 # include <stdlib.h>
16
17 # define ASSERT_(expected_, expected_str_, op_, seen_, seen_str_) \
18 do { \
19 __typeof__(expected_) e_ = (expected_); \
20 __typeof__(seen_) s_ = (seen_); \
21 if (e_ op_ s_) break; \
22 fprintf(stderr, \
23 "%s:%d: Assertion failed: %s (%#lx) %s %s (%#lx)\n", \
24 __FILE__, __LINE__, \
25 (expected_str_), (unsigned long) e_, #op_, \
26 (seen_str_), (unsigned long) s_); \
27 abort(); \
28 } while (0) \
29 /* End of ASSERT_ definition. */
30
31 # define ASSERT_EQ(expected_, seen_) \
32 ASSERT_((expected_), #expected_, ==, (seen_), #seen_) \
33 /* End of ASSERT_EQ definition. */
34
35 # define ASSERT_NE(expected_, seen_) \
36 ASSERT_((expected_), #expected_, !=, (seen_), #seen_) \
37 /* End of ASSERT_NE definition. */
38
39 # define ASSERT_LT(expected_, seen_) \
40 ASSERT_((expected_), #expected_, <, (seen_), #seen_) \
41 /* End of ASSERT_LT definition. */
42
43 # define ASSERT_LE(expected_, seen_) \
44 ASSERT_((expected_), #expected_, <=, (seen_), #seen_) \
45 /* End of ASSERT_LT definition. */
46
47 # define ASSERT_GT(expected_, seen_) \
48 ASSERT_((expected_), #expected_, >, (seen_), #seen_) \
49 /* End of ASSERT_LT definition. */
50
51 # define ASSERT_GE(expected_, seen_) \
52 ASSERT_((expected_), #expected_, >=, (seen_), #seen_) \
53 /* End of ASSERT_LT definition. */
54
55 #endif /* TEST_ASSERT_H */