diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-03-22 11:34:53 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-03-22 12:56:02 +0000 |
commit | 8dfe34f9baa7ad7b89f4e07d5236a498050c0970 (patch) | |
tree | e9323271d5855abe8c255a73f5719c81d0fec044 /vespalib | |
parent | 9ce25b6088463aa7095b14010b34196adeb39e5b (diff) |
slightly better REQUIRE_EQ messages
Diffstat (limited to 'vespalib')
-rw-r--r-- | vespalib/src/vespa/vespalib/util/require.cpp | 14 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/require.h | 14 |
2 files changed, 20 insertions, 8 deletions
diff --git a/vespalib/src/vespa/vespalib/util/require.cpp b/vespalib/src/vespa/vespalib/util/require.cpp index e762bb7ce06..170e37ef21f 100644 --- a/vespalib/src/vespa/vespalib/util/require.cpp +++ b/vespalib/src/vespa/vespalib/util/require.cpp @@ -8,15 +8,21 @@ namespace vespalib { VESPA_IMPLEMENT_EXCEPTION(RequireFailedException, Exception); -void handle_require_failure(const char *description, const char *file, uint32_t line) +void throw_require_failed(const char *description, const char *file, uint32_t line) { asciistream msg; - msg << file << ":" << line << ": "; - msg << "error: (" << description << ") fails"; - std::cerr << msg.c_str() << "\n"; + msg << "error: (" << description << ") failed"; asciistream loc; loc << "file " << file << " line " << line; throw RequireFailedException(msg.c_str(), loc.c_str(), 2); } +void handle_require_failure(const char *description, const char *file, uint32_t line) +{ + asciistream msg; + std::cerr << file << ":" << line << ": "; + std::cerr << "error: (" << description << ") failed\n"; + throw_require_failed(description, file, line); +} + } // namespace diff --git a/vespalib/src/vespa/vespalib/util/require.h b/vespalib/src/vespa/vespalib/util/require.h index a6b4af24820..ef3efd3d6e2 100644 --- a/vespalib/src/vespa/vespalib/util/require.h +++ b/vespalib/src/vespa/vespalib/util/require.h @@ -11,14 +11,19 @@ VESPA_DEFINE_EXCEPTION(RequireFailedException, Exception); constexpr void handle_require_success() {} +void throw_require_failed [[noreturn]] (const char *description, const char *file, uint32_t line); + void handle_require_failure [[noreturn]] (const char *description, const char *file, uint32_t line); template<typename A, typename B> -void handle_require_eq_failure [[noreturn]] (const A& a, const B& b, +void handle_require_eq_failure [[noreturn]] (const A& a, const B& b, const char *a_desc, const char *b_desc, const char *description, const char *file, uint32_t line) { - std::cerr << "( " << a << " == " << b << " ) is false\n"; - handle_require_failure(description, file, line); + std::cerr << file << ":" << line << ": error: "; + std::cerr << "expected (" << a_desc << " == " << b_desc << ")\n"; + std::cerr << " lhs (" << a_desc << ") is: " << a << "\n"; + std::cerr << " rhs (" << b_desc << ") is: " << b << "\n"; + throw_require_failed(description, file, line); } #ifndef __STRING @@ -32,7 +37,8 @@ void handle_require_eq_failure [[noreturn]] (const A& a, const B& b, #define REQUIRE_EQ(a, b) \ (a == b) ? vespalib::handle_require_success() : \ - vespalib::handle_require_eq_failure(a, b, __STRING(a) " == " __STRING(b), \ + vespalib::handle_require_eq_failure(a, b, __STRING(a), __STRING(b), \ + __STRING(a) " == " __STRING(b), \ __FILE__, __LINE__) } // namespace |