Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
test.qh
Go to the documentation of this file.
1
#pragma once
2
3
// public:
4
6
#define TEST(suite, test) \
7
void _TEST_##suite##_##test(); \
8
ACCUMULATE int TEST_RunAll_accumulated(int f) \
9
{ \
10
if (!TEST_Run(#suite "_" #test)) \
11
++f; \
12
return = f; \
13
} \
14
void _TEST_##suite##_##test()
15
17
#define SUCCEED() (TEST_ok = true)
18
20
#define ADD_FAILURE(msg) MACRO_BEGIN \
21
++TEST_failed; \
22
LOG_WARN(msg); \
23
MACRO_END
24
26
#define FAIL(msg) _TEST_ASSERT(ADD_FAILURE(msg))
27
28
#define HasFatalFailure() (TEST_fatal > 0)
29
30
bool
RUN_ALL_TESTS
();
31
32
// difference between expect/assert: assert returns early
33
34
#define EXPECT_EQ(expected_, actual_) MACRO_BEGIN \
35
int expected = expected_; \
36
int actual = actual_; \
37
if (expected != actual) \
38
ADD_FAILURE(sprintf( \
39
"Value of: " #actual_ "\n" \
40
" Actual: %d\n" \
41
"Expected: %d\n", \
42
actual, expected \
43
)); \
44
MACRO_END
45
#define ASSERT_EQ(expected, actual) _TEST_ASSERT(EXPECT_EQ(expected, actual))
46
47
#define EXPECT_TRUE(condition) EXPECT_EQ(true, condition)
48
#define ASSERT_TRUE(condition) ASSERT_EQ(true, condition)
49
50
#define EXPECT_FALSE(condition) EXPECT_EQ(false, condition)
51
#define ASSERT_FALSE(condition) ASSERT_EQ(false, condition)
52
53
#define EXPECT_NE(val1, val2) EXPECT_TRUE((val1) != (val2))
54
#define ASSERT_NE(val1, val2) _TEST_ASSERT(EXPECT_NE(val1, val2))
55
56
#define EXPECT_LT(val1, val2) EXPECT_TRUE((val1) < (val2))
57
#define ASSERT_LT(val1, val2) _TEST_ASSERT(EXPECT_LT(val1, val2))
58
59
#define EXPECT_LE(val1, val2) EXPECT_TRUE((val1) <= (val2))
60
#define ASSERT_LE(val1, val2) _TEST_ASSERT(EXPECT_LE(val1, val2))
61
62
#define EXPECT_GT(val1, val2) EXPECT_TRUE((val1) > (val2))
63
#define ASSERT_GT(val1, val2) _TEST_ASSERT(EXPECT_GT(val1, val2))
64
65
#define EXPECT_GE(val1, val2) EXPECT_TRUE((val1) >= (val2))
66
#define ASSERT_GE(val1, val2) _TEST_ASSERT(EXPECT_GE(val1, val2))
67
68
#define EXPECT_NO_FATAL_FAILURE(statement) EXPECT_NO_FATAL_FAILURE_(statement, { })
69
#define ASSERT_NO_FATAL_FAILURE(statement) EXPECT_NO_FATAL_FAILURE_(statement, { ++TEST_fatal; return; })
70
71
// private:
72
73
bool
TEST_Run
(
string
test);
74
int
TEST_fatal
;
75
bool
TEST_ok
;
76
int
TEST_failed
;
77
78
#define _TEST_ASSERT(statement) MACRO_BEGIN \
79
LAMBDA(statement) \
80
++TEST_fatal; return; \
81
MACRO_END
82
83
#define EXPECT_NO_FATAL_FAILURE__(statement, then) MACRO_BEGIN \
84
int TEST_prevfatal = TEST_fatal; \
85
LAMBDA(statement) \
86
if (TEST_fatal != TEST_prevfatal) \
87
LAMBDA(then) \
88
MACRO_END
89
90
#define EXPECT_NO_FATAL_FAILURE_(statement, then) \
91
EXPECT_NO_FATAL_FAILURE__(statement, \
92
{ \
93
LOG_WARNF( \
94
" Actual: %d fatal failures\n" \
95
"Expected: no fatal failures\n", \
96
TEST_fatal - TEST_prevfatal \
97
); \
98
LAMBDA(then) \
99
})
TEST_failed
int TEST_failed
Definition
test.qh:76
TEST_ok
bool TEST_ok
Definition
test.qh:75
RUN_ALL_TESTS
bool RUN_ALL_TESTS()
Definition
test.qc:4
TEST_Run
bool TEST_Run(string test)
Definition
test.qc:19
TEST_fatal
int TEST_fatal
Definition
test.qh:74
lib
test.qh
Generated on
for Xonotic QuakeC by
1.16.1