G+Smo  25.01.0
Geometry + Simulation Modules
 
Loading...
Searching...
No Matches
CheckMacros.h
1#ifndef UNITTEST_CHECKMACROS_H
2#define UNITTEST_CHECKMACROS_H
3
4#include "HelperMacros.h"
5#include "ExceptionMacros.h"
6#include "Checks.h"
7#include "AssertException.h"
8#include "MemoryOutStream.h"
9#include "TestDetails.h"
10#include "CurrentTest.h"
11#include "ReportAssertImpl.h"
12
13#ifdef CHECK
14 #error UnitTest++ redefines CHECK
15#endif
16
17#ifdef CHECK_EQUAL
18 #error UnitTest++ redefines CHECK_EQUAL
19#endif
20
21#ifdef CHECK_CLOSE
22 #error UnitTest++ redefines CHECK_CLOSE
23#endif
24
25#ifdef CHECK_ARRAY_EQUAL
26 #error UnitTest++ redefines CHECK_ARRAY_EQUAL
27#endif
28
29#ifdef CHECK_ARRAY_CLOSE
30 #error UnitTest++ redefines CHECK_ARRAY_CLOSE
31#endif
32
33#ifdef CHECK_ARRAY2D_CLOSE
34 #error UnitTest++ redefines CHECK_ARRAY2D_CLOSE
35#endif
36
37#define CHECK(value) \
38 UNITTEST_MULTILINE_MACRO_BEGIN \
39 UT_TRY \
40 ({ \
41 if (!UnitTest::Check(value)) \
42 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), #value); \
43 }) \
44 UT_CATCH (std::exception, e, \
45 { \
46 UnitTest::MemoryOutStream message; \
47 message << "Unhandled exception (" << e.what() << ") in CHECK(" #value ")"; \
48 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
49 message.GetText()); \
50 }) \
51 UT_CATCH_ALL \
52 ({ \
53 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
54 "Unhandled exception in CHECK(" #value ")"); \
55 }) \
56 UNITTEST_MULTILINE_MACRO_END
57
58#define CHECK_EQUAL(expected, actual) \
59 UNITTEST_MULTILINE_MACRO_BEGIN \
60 UT_TRY \
61 ({ \
62 UnitTest::CheckEqual(*UnitTest::CurrentTest::Results(), expected, actual, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
63 }) \
64 UT_CATCH (std::exception, e, \
65 { \
66 UnitTest::MemoryOutStream message; \
67 message << "Unhandled exception (" << e.what() << ") in CHECK_EQUAL(" #expected ", " #actual ")"; \
68 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
69 message.GetText()); \
70 }) \
71 UT_CATCH_ALL \
72 ({ \
73 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
74 "Unhandled exception in CHECK_EQUAL(" #expected ", " #actual ")"); \
75 }) \
76 UNITTEST_MULTILINE_MACRO_END
77
78#define CHECK_CLOSE(expected, actual, tolerance) \
79 UNITTEST_MULTILINE_MACRO_BEGIN \
80 UT_TRY \
81 ({ \
82 UnitTest::CheckClose(*UnitTest::CurrentTest::Results(), expected, actual, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
83 }) \
84 UT_CATCH (std::exception, e, \
85 { \
86 UnitTest::MemoryOutStream message; \
87 message << "Unhandled exception (" << e.what() << ") in CHECK_CLOSE(" #expected ", " #actual ")"; \
88 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
89 message.GetText()); \
90 }) \
91 UT_CATCH_ALL \
92 ({ \
93 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
94 "Unhandled exception in CHECK_CLOSE(" #expected ", " #actual ")"); \
95 }) \
96 UNITTEST_MULTILINE_MACRO_END
97
98#define CHECK_ARRAY_EQUAL(expected, actual, count) \
99 UNITTEST_MULTILINE_MACRO_BEGIN \
100 UT_TRY \
101 ({ \
102 UnitTest::CheckArrayEqual(*UnitTest::CurrentTest::Results(), expected, actual, count, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
103 }) \
104 UT_CATCH (std::exception, e, \
105 { \
106 UnitTest::MemoryOutStream message; \
107 message << "Unhandled exception (" << e.what() << ") in CHECK_ARRAY_EQUAL(" #expected ", " #actual ")"; \
108 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
109 message.GetText()); \
110 }) \
111 UT_CATCH_ALL \
112 ({ \
113 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
114 "Unhandled exception in CHECK_ARRAY_EQUAL(" #expected ", " #actual ")"); \
115 }) \
116 UNITTEST_MULTILINE_MACRO_END
117
118#define CHECK_ARRAY_CLOSE(expected, actual, count, tolerance) \
119 UNITTEST_MULTILINE_MACRO_BEGIN \
120 UT_TRY \
121 ({ \
122 UnitTest::CheckArrayClose(*UnitTest::CurrentTest::Results(), expected, actual, count, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
123 }) \
124 UT_CATCH (std::exception, e, \
125 { \
126 UnitTest::MemoryOutStream message; \
127 message << "Unhandled exception (" << e.what() << ") in CHECK_ARRAY_CLOSE(" #expected ", " #actual ")"; \
128 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
129 message.GetText()); \
130 }) \
131 UT_CATCH_ALL \
132 ({ \
133 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
134 "Unhandled exception in CHECK_ARRAY_CLOSE(" #expected ", " #actual ")"); \
135 }) \
136 UNITTEST_MULTILINE_MACRO_END
137
138#define CHECK_ARRAY2D_CLOSE(expected, actual, rows, columns, tolerance) \
139 UNITTEST_MULTILINE_MACRO_BEGIN \
140 UT_TRY \
141 ({ \
142 UnitTest::CheckArray2DClose(*UnitTest::CurrentTest::Results(), expected, actual, rows, columns, tolerance, UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__)); \
143 }) \
144 UT_CATCH (std::exception, e, \
145 { \
146 UnitTest::MemoryOutStream message; \
147 message << "Unhandled exception (" << e.what() << ") in CHECK_ARRAY2D_CLOSE(" #expected ", " #actual ")"; \
148 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
149 message.GetText()); \
150 }) \
151 UT_CATCH_ALL \
152 ({ \
153 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
154 "Unhandled exception in CHECK_ARRAY2D_CLOSE(" #expected ", " #actual ")"); \
155 }) \
156 UNITTEST_MULTILINE_MACRO_END
157
158
159// CHECK_THROW and CHECK_ASSERT only exist when UNITTEST_NO_EXCEPTIONS isn't defined (see config.h)
160#ifndef UNITTEST_NO_EXCEPTIONS
161#define CHECK_THROW(expression, ExpectedExceptionType) \
162 UNITTEST_MULTILINE_MACRO_BEGIN \
163 bool caught_ = false; \
164 try { expression; } \
165 catch (ExpectedExceptionType const&) { caught_ = true; } \
166 catch (...) {} \
167 if (!caught_) \
168 UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), "Expected exception: \"" #ExpectedExceptionType "\" not thrown"); \
169 UNITTEST_MULTILINE_MACRO_END
170
171
172#define CHECK_ASSERT(expression) \
173 UNITTEST_MULTILINE_MACRO_BEGIN \
174 UnitTest::Detail::ExpectAssert(true); \
175 CHECK_THROW(expression, UnitTest::AssertException); \
176 UnitTest::Detail::ExpectAssert(false); \
177 UNITTEST_MULTILINE_MACRO_END
178#endif
179#endif