9 #include "benchmark/export.h"
10 #include "internal_macros.h"
13 #if defined(__GNUC__) || defined(__clang__)
14 #define BENCHMARK_NOEXCEPT noexcept
15 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
16 #elif defined(_MSC_VER) && !defined(__clang__)
18 #define BENCHMARK_NOEXCEPT noexcept
19 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
21 #define BENCHMARK_NOEXCEPT
22 #define BENCHMARK_NOEXCEPT_OP(x)
24 #define __func__ __FUNCTION__
26 #define BENCHMARK_NOEXCEPT
27 #define BENCHMARK_NOEXCEPT_OP(x)
33 typedef void(AbortHandlerT)();
36 AbortHandlerT*& GetAbortHandler();
38 BENCHMARK_NORETURN
inline void CallAbortHandler() {
40 std::flush(std::cout);
41 std::flush(std::cerr);
50 CheckHandler(std::string_view check, std::string_view file,
51 std::string_view func,
int line)
52 : log_(GetErrorLogInstance()) {
53 log_ << file <<
":" << line <<
": " << func <<
": Check `" << check
57 LogType& GetLog() {
return log_; }
59 #if defined(COMPILER_MSVC)
61 #pragma warning(disable : 4722)
63 BENCHMARK_NORETURN ~
CheckHandler() BENCHMARK_NOEXCEPT_OP(
false) {
67 #if defined(COMPILER_MSVC)
86 (b ? ::benchmark::internal::GetNullLogInstance() \
87 : ::benchmark::internal::CheckHandler( \
88 std::string_view(#b), std::string_view(__FILE__), \
89 std::string_view(__func__), __LINE__) \
92 #define BM_CHECK(b) ::benchmark::internal::GetNullLogInstance()
97 #define BM_CHECK_EQ(a, b) BM_CHECK((a) == (b))
98 #define BM_CHECK_NE(a, b) BM_CHECK((a) != (b))
99 #define BM_CHECK_GE(a, b) BM_CHECK((a) >= (b))
100 #define BM_CHECK_LE(a, b) BM_CHECK((a) <= (b))
101 #define BM_CHECK_GT(a, b) BM_CHECK((a) > (b))
102 #define BM_CHECK_LT(a, b) BM_CHECK((a) < (b))
104 #define BM_CHECK_FLOAT_EQ(a, b, eps) BM_CHECK(std::fabs((a) - (b)) < (eps))
105 #define BM_CHECK_FLOAT_NE(a, b, eps) BM_CHECK(std::fabs((a) - (b)) >= (eps))
106 #define BM_CHECK_FLOAT_GE(a, b, eps) BM_CHECK((a) - (b) > -(eps))
107 #define BM_CHECK_FLOAT_LE(a, b, eps) BM_CHECK((b) - (a) > -(eps))
108 #define BM_CHECK_FLOAT_GT(a, b, eps) BM_CHECK((a) - (b) > (eps))
109 #define BM_CHECK_FLOAT_LT(a, b, eps) BM_CHECK((b) - (a) > (eps))