49inline void log(
const std::string& msg) { std::cout << msg << std::endl; }
53 const std::string& lhsExpression,
54 const std::string& opString,
55 const std::string& filename,
60 int length =
static_cast<int>(lhsExpression.length());
61 ss <<
"========================================================================\n"
62 <<
"ASSUMPTION FAILED! (" << filename <<
":" << lineno <<
")\n\n"
63 <<
"Expression: " << opString <<
"( " << lhsExpression <<
" )\n"
64 <<
"Value: " << std::setw(length) << std::setfill(
' ') << lhsExpression <<
" = " << lhs;
68template <
typename T,
typename U>
71 const std::string& lhsExpression,
72 const std::string& rhsExpression,
73 const std::string& opString,
74 const std::string& filename,
79 int length =
static_cast<int>(std::max(lhsExpression.length(), rhsExpression.length()));
80 ss <<
"========================================================================\n"
81 <<
"ASSUMPTION FAILED! (" << filename <<
":" << lineno <<
")\n\n"
82 <<
"Expression: " << lhsExpression << opString << rhsExpression <<
"\n"
83 <<
"Values: " << std::setw(length) << std::setfill(
' ') << lhsExpression <<
" = " << lhs
85 <<
" " << std::setw(length) << std::setfill(
' ') << rhsExpression <<
" = " << rhs;
91 std::stringstream ss; \
93 assumption::log(ss.str()); \
100#define RETURN_ARG_COUNT(_1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, _9_, _10_, count, ...) count
101#define EXPAND_ARGS(args) RETURN_ARG_COUNT args
102#define COUNT_ARGS_MAX10(...) EXPAND_ARGS((__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
104#define OVERLOAD_MACRO2(name, count) name##count
105#define OVERLOAD_MACRO1(name, count) OVERLOAD_MACRO2(name, count)
106#define OVERLOAD_MACRO(name, count) OVERLOAD_MACRO1(name, count)
108#define MACRO_OVERLOAD(name, ...) \
109 GLUE(OVERLOAD_MACRO(name, COUNT_ARGS_MAX10(__VA_ARGS__)), (__VA_ARGS__))
111#define MRMD_VERBOSE_CHECK_1(X) \
117 LOG(assumption::generateAssertionMessage( \
118 (X), #X, "", __FILE__, __LINE__, __func__)); \
123#define MRMD_VERBOSE_CHECK_2(X, MSG) \
129 LOG(assumption::generateAssertionMessage( \
130 (X), #X, "", __FILE__, __LINE__, __func__) \
138#define MRMD_VERBOSE_CHECK_NULLPTR_1(X) \
142 if (!((X) == nullptr)) \
144 LOG(assumption::generateAssertionMessage( \
145 (X), #X, "nullptr", __FILE__, __LINE__, __func__)); \
150#define MRMD_VERBOSE_CHECK_NULLPTR_2(X, MSG) \
154 if (!((X) == nullptr)) \
156 LOG(assumption::generateAssertionMessage( \
157 (X), #X, "nullptr", __FILE__, __LINE__, __func__) \
165#define MRMD_VERBOSE_CHECK_NOT_NULLPTR_1(X) \
169 if (!((X) != nullptr)) \
171 LOG(assumption::generateAssertionMessage( \
172 (X), #X, "!nullptr", __FILE__, __LINE__, __func__)); \
177#define MRMD_VERBOSE_CHECK_NOT_NULLPTR_2(X, MSG) \
181 if (!((X) != nullptr)) \
183 LOG(assumption::generateAssertionMessage( \
184 (X), #X, "!nullptr", __FILE__, __LINE__, __func__) \
192#define MRMD_VERBOSE_CHECK_EQUAL_2(X, Y) \
198 LOG(assumption::generateAssertionMessage( \
199 (X), (Y), #X, #Y, " == ", __FILE__, __LINE__, __func__)); \
204#define MRMD_VERBOSE_CHECK_EQUAL_3(X, Y, MSG) \
210 LOG(assumption::generateAssertionMessage( \
211 (X), (Y), #X, #Y, " == ", __FILE__, __LINE__, __func__) \
219#define MRMD_VERBOSE_CHECK_FLOAT_EQUAL_2(X, Y) \
223 if (!(isFloatEqual((X), (Y)))) \
225 LOG(assumption::generateAssertionMessage( \
226 (X), (Y), #X, #Y, " == ", __FILE__, __LINE__, __func__)); \
231#define MRMD_VERBOSE_CHECK_FLOAT_EQUAL_3(X, Y, MSG) \
235 if (!(isFloatEqual((X), (Y)))) \
237 LOG(assumption::generateAssertionMessage( \
238 (X), (Y), #X, #Y, " == ", __FILE__, __LINE__, __func__) \
246#define MRMD_VERBOSE_CHECK_NOT_EQUAL_2(X, Y) \
252 LOG(assumption::generateAssertionMessage( \
253 (X), (Y), #X, #Y, " != ", __FILE__, __LINE__, __func__)); \
258#define MRMD_VERBOSE_CHECK_NOT_EQUAL_3(X, Y, MSG) \
264 LOG(assumption::generateAssertionMessage( \
265 (X), (Y), #X, #Y, " != ", __FILE__, __LINE__, __func__) \
273#define MRMD_VERBOSE_CHECK_GREATER_2(X, Y) \
279 LOG(assumption::generateAssertionMessage( \
280 (X), (Y), #X, #Y, " > ", __FILE__, __LINE__, __func__)); \
285#define MRMD_VERBOSE_CHECK_GREATER_3(X, Y, MSG) \
291 LOG(assumption::generateAssertionMessage( \
292 (X), (Y), #X, #Y, " > ", __FILE__, __LINE__, __func__) \
300#define MRMD_VERBOSE_CHECK_LESS_2(X, Y) \
306 LOG(assumption::generateAssertionMessage( \
307 (X), (Y), #X, #Y, " < ", __FILE__, __LINE__, __func__)); \
312#define MRMD_VERBOSE_CHECK_LESS_3(X, Y, MSG) \
318 LOG(assumption::generateAssertionMessage( \
319 (X), (Y), #X, #Y, " < ", __FILE__, __LINE__, __func__) \
327#define MRMD_VERBOSE_CHECK_GREATEREQUAL_2(X, Y) \
333 LOG(assumption::generateAssertionMessage( \
334 (X), (Y), #X, #Y, " >= ", __FILE__, __LINE__, __func__)); \
339#define MRMD_VERBOSE_CHECK_GREATEREQUAL_3(X, Y, MSG) \
345 LOG(assumption::generateAssertionMessage( \
346 (X), (Y), #X, #Y, " >= ", __FILE__, __LINE__, __func__) \
354#define MRMD_VERBOSE_CHECK_LESSEQUAL_2(X, Y) \
360 LOG(assumption::generateAssertionMessage( \
361 (X), (Y), #X, #Y, " <= ", __FILE__, __LINE__, __func__)); \
366#define MRMD_VERBOSE_CHECK_LESSEQUAL_3(X, Y, MSG) \
372 LOG(assumption::generateAssertionMessage( \
373 (X), (Y), #X, #Y, " <= ", __FILE__, __LINE__, __func__) \
381#define MRMD_VERBOSE_CHECK(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_, __VA_ARGS__)
382#define MRMD_VERBOSE_CHECK_NULLPTR(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_EQUAL_, __VA_ARGS__)
383#define MRMD_VERBOSE_CHECK_NOT_NULLPTR(...) \
384 MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_NOT_NULLPTR_, __VA_ARGS__)
385#define MRMD_VERBOSE_CHECK_EQUAL(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_EQUAL_, __VA_ARGS__)
386#define MRMD_VERBOSE_CHECK_FLOAT_EQUAL(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_EQUAL_, __VA_ARGS__)
387#define MRMD_VERBOSE_CHECK_NOT_EQUAL(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_NOT_EQUAL_, __VA_ARGS__)
388#define MRMD_VERBOSE_CHECK_GREATER(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_GREATER_, __VA_ARGS__)
389#define MRMD_VERBOSE_CHECK_LESS(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_LESS_, __VA_ARGS__)
390#define MRMD_VERBOSE_CHECK_GREATEREQUAL(...) \
391 MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_GREATEREQUAL_, __VA_ARGS__)
392#define MRMD_VERBOSE_CHECK_LESSEQUAL(...) MACRO_OVERLOAD(MRMD_VERBOSE_CHECK_LESSEQUAL_, __VA_ARGS__)
Copyright (c) 2020 Sebastian Eibl.
Definition verbose.hpp:48
void log(const std::string &msg)
Definition verbose.hpp:49
std::string generateAssertionMessage(const T &lhs, const std::string &lhsExpression, const std::string &opString, const std::string &filename, const int64_t lineno, const std::string &)
Definition verbose.hpp:52