1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 // 5 // Macros specific to the RLZ library. 6 7 #ifndef RLZ_LIB_ASSERT_H_ 8 #define RLZ_LIB_ASSERT_H_ 9 10 #include <string> 11 #include "base/logging.h" 12 13 // An assertion macro. 14 // Can mute expected assertions in debug mode. 15 16 #ifndef ASSERT_STRING 17 #ifndef MUTE_EXPECTED_ASSERTS 18 #define ASSERT_STRING(expr) LOG_IF(FATAL, false) << (expr) 19 #else 20 #define ASSERT_STRING(expr) \ 21 do { \ 22 std::string expr_string(expr); \ 23 if (rlz_lib::expected_assertion_ != expr_string) { \ 24 LOG_IF(FATAL, false) << (expr); \ 25 } \ 26 } while (0) 27 #endif 28 #endif 29 30 31 #ifndef VERIFY 32 #ifdef _DEBUG 33 #define VERIFY(expr) LOG_IF(FATAL, !(expr)) << #expr 34 #else 35 #define VERIFY(expr) (void)(expr) 36 #endif 37 #endif 38 39 namespace rlz_lib { 40 41 #ifdef MUTE_EXPECTED_ASSERTS 42 extern std::string expected_assertion_; 43 #endif 44 SetExpectedAssertion(const char * s)45inline void SetExpectedAssertion(const char* s) { 46 #ifdef MUTE_EXPECTED_ASSERTS 47 expected_assertion_ = s; 48 #endif 49 } 50 51 } // rlz_lib 52 53 #endif // RLZ_LIB_ASSERT_H_ 54