Home | History | Annotate | Download | only in lib
      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 
     45 inline 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