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)
32typedef void(AbortHandlerT)();
35AbortHandlerT*& GetAbortHandler();
37BENCHMARK_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))