• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)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