8 #include "benchmark/export.h"
9 #include "internal_macros.h"
12 #if defined(__GNUC__) || defined(__clang__)
13 #define BENCHMARK_NOEXCEPT noexcept
14 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
15 #elif defined(_MSC_VER) && !defined(__clang__)
17 #define BENCHMARK_NOEXCEPT noexcept
18 #define BENCHMARK_NOEXCEPT_OP(x) noexcept(x)
20 #define BENCHMARK_NOEXCEPT
21 #define BENCHMARK_NOEXCEPT_OP(x)
23 #define __func__ __FUNCTION__
25 #define BENCHMARK_NOEXCEPT
26 #define BENCHMARK_NOEXCEPT_OP(x)
32 typedef void(AbortHandlerT)();
35 AbortHandlerT*& GetAbortHandler();
37 BENCHMARK_NORETURN
inline void CallAbortHandler() {
47 CheckHandler(
const char* check,
const char* file,
const char* func,
int line)
48 : log_(GetErrorLogInstance()) {
49 log_ << file <<
":" << line <<
": " << func <<
": Check `" << check
53 LogType& GetLog() {
return log_; }
55 #if defined(COMPILER_MSVC)
57 #pragma warning(disable : 4722)
59 BENCHMARK_NORETURN ~
CheckHandler() BENCHMARK_NOEXCEPT_OP(
false) {
63 #if defined(COMPILER_MSVC)
82 (b ? ::benchmark::internal::GetNullLogInstance() \
83 : ::benchmark::internal::CheckHandler(#b, __FILE__, __func__, __LINE__) \
86 #define BM_CHECK(b) ::benchmark::internal::GetNullLogInstance()
91 #define BM_CHECK_EQ(a, b) BM_CHECK((a) == (b))
92 #define BM_CHECK_NE(a, b) BM_CHECK((a) != (b))
93 #define BM_CHECK_GE(a, b) BM_CHECK((a) >= (b))
94 #define BM_CHECK_LE(a, b) BM_CHECK((a) <= (b))
95 #define BM_CHECK_GT(a, b) BM_CHECK((a) > (b))
96 #define BM_CHECK_LT(a, b) BM_CHECK((a) < (b))
98 #define BM_CHECK_FLOAT_EQ(a, b, eps) BM_CHECK(std::fabs((a) - (b)) < (eps))
99 #define BM_CHECK_FLOAT_NE(a, b, eps) BM_CHECK(std::fabs((a) - (b)) >= (eps))
100 #define BM_CHECK_FLOAT_GE(a, b, eps) BM_CHECK((a) - (b) > -(eps))
101 #define BM_CHECK_FLOAT_LE(a, b, eps) BM_CHECK((b) - (a) > -(eps))
102 #define BM_CHECK_FLOAT_GT(a, b, eps) BM_CHECK((a) - (b) > (eps))
103 #define BM_CHECK_FLOAT_LT(a, b, eps) BM_CHECK((b) - (a) > (eps))