xref: /aosp_15_r20/external/fmtlib/test/test-assert.h (revision 5c90c05cd622c0a81b57953a4d343e0e489f2e08)
1*5c90c05cSAndroid Build Coastguard Worker // Formatting library for C++ - test version of FMT_ASSERT
2*5c90c05cSAndroid Build Coastguard Worker //
3*5c90c05cSAndroid Build Coastguard Worker // Copyright (c) 2012 - present, Victor Zverovich
4*5c90c05cSAndroid Build Coastguard Worker // All rights reserved.
5*5c90c05cSAndroid Build Coastguard Worker //
6*5c90c05cSAndroid Build Coastguard Worker // For the license information refer to format.h.
7*5c90c05cSAndroid Build Coastguard Worker 
8*5c90c05cSAndroid Build Coastguard Worker #ifndef FMT_TEST_ASSERT_H_
9*5c90c05cSAndroid Build Coastguard Worker #define FMT_TEST_ASSERT_H_
10*5c90c05cSAndroid Build Coastguard Worker 
11*5c90c05cSAndroid Build Coastguard Worker #include <stdexcept>
12*5c90c05cSAndroid Build Coastguard Worker 
13*5c90c05cSAndroid Build Coastguard Worker void throw_assertion_failure(const char* message);
14*5c90c05cSAndroid Build Coastguard Worker #define FMT_ASSERT(condition, message) \
15*5c90c05cSAndroid Build Coastguard Worker   ((condition) ? (void)0 : throw_assertion_failure(message))
16*5c90c05cSAndroid Build Coastguard Worker 
17*5c90c05cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*5c90c05cSAndroid Build Coastguard Worker 
19*5c90c05cSAndroid Build Coastguard Worker class assertion_failure : public std::logic_error {
20*5c90c05cSAndroid Build Coastguard Worker  public:
assertion_failure(const char * message)21*5c90c05cSAndroid Build Coastguard Worker   explicit assertion_failure(const char* message) : std::logic_error(message) {}
22*5c90c05cSAndroid Build Coastguard Worker 
23*5c90c05cSAndroid Build Coastguard Worker  private:
24*5c90c05cSAndroid Build Coastguard Worker   virtual void avoid_weak_vtable();
25*5c90c05cSAndroid Build Coastguard Worker };
26*5c90c05cSAndroid Build Coastguard Worker 
avoid_weak_vtable()27*5c90c05cSAndroid Build Coastguard Worker void assertion_failure::avoid_weak_vtable() {}
28*5c90c05cSAndroid Build Coastguard Worker 
29*5c90c05cSAndroid Build Coastguard Worker // We use a separate function (rather than throw directly from FMT_ASSERT) to
30*5c90c05cSAndroid Build Coastguard Worker // avoid GCC's -Wterminate warning when FMT_ASSERT is used in a destructor.
throw_assertion_failure(const char * message)31*5c90c05cSAndroid Build Coastguard Worker inline void throw_assertion_failure(const char* message) {
32*5c90c05cSAndroid Build Coastguard Worker   throw assertion_failure(message);
33*5c90c05cSAndroid Build Coastguard Worker }
34*5c90c05cSAndroid Build Coastguard Worker 
35*5c90c05cSAndroid Build Coastguard Worker // Expects an assertion failure.
36*5c90c05cSAndroid Build Coastguard Worker #define EXPECT_ASSERT(stmt, message) \
37*5c90c05cSAndroid Build Coastguard Worker   FMT_TEST_THROW_(stmt, assertion_failure, message, GTEST_NONFATAL_FAILURE_)
38*5c90c05cSAndroid Build Coastguard Worker 
39*5c90c05cSAndroid Build Coastguard Worker #endif  // FMT_TEST_ASSERT_H_
40