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
39namespace rlz_lib {
40
41#ifdef MUTE_EXPECTED_ASSERTS
42extern std::string expected_assertion_;
43#endif
44
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