debug: add XFAIL exit codes

This commit is contained in:
Danny Robson 2014-04-16 19:16:48 +10:00
parent 028dee034a
commit 16b81f2a07

View File

@ -28,6 +28,7 @@
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
///////////////////////////////////////////////////////////////////////////////
#ifdef ENABLE_DEBUGGING #ifdef ENABLE_DEBUGGING
#define DEBUG_ONLY(X) \ #define DEBUG_ONLY(X) \
X; X;
@ -35,6 +36,14 @@
#define DEBUG_ONLY(X) #define DEBUG_ONLY(X)
#endif #endif
///////////////////////////////////////////////////////////////////////////////
#define EXIT_XSUCCESS 0
#define EXIT_XSKIP 77
#define EXIT_XHARD_ERROR 99
///////////////////////////////////////////////////////////////////////////////
#define TRACE { \ #define TRACE { \
std::cerr << __FILE__ << ":" << __func__ << ":" << __LINE__ << std::endl; \ std::cerr << __FILE__ << ":" << __func__ << ":" << __LINE__ << std::endl; \
} }
@ -52,6 +61,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define VERIFY_SOFT(C, COND) ({ \ #define VERIFY_SOFT(C, COND) ({ \
const auto __DEBUG_value = (C); \ const auto __DEBUG_value = (C); \
CHECK_SOFT(__DEBUG_value COND); \ CHECK_SOFT(__DEBUG_value COND); \
@ -66,6 +76,7 @@
}) })
///////////////////////////////////////////////////////////////////////////////
#define _CHECK_META(C, SUCCESS, FAILURE) do { \ #define _CHECK_META(C, SUCCESS, FAILURE) do { \
const auto __DEBUG_value = (C); \ const auto __DEBUG_value = (C); \
if (unlikely (!__DEBUG_value)) { \ if (unlikely (!__DEBUG_value)) { \
@ -94,6 +105,7 @@
#endif #endif
///////////////////////////////////////////////////////////////////////////////
#define CHECK_EQ(A,B) do { \ #define CHECK_EQ(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -111,6 +123,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_LT(A,B) do { \ #define CHECK_LT(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -128,6 +141,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_LE(A,B) do { \ #define CHECK_LE(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -145,6 +159,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_GT(A,B) do { \ #define CHECK_GT(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -162,6 +177,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_GE(A,B) do { \ #define CHECK_GE(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -179,6 +195,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_NEQ(A,B) do { \ #define CHECK_NEQ(A,B) do { \
const auto __a = (A); \ const auto __a = (A); \
const auto __b = (B); \ const auto __b = (B); \
@ -195,6 +212,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_THROWS(E,C) do { \ #define CHECK_THROWS(E,C) do { \
bool caught = false; \ bool caught = false; \
\ \
@ -208,6 +226,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
#define CHECK_NOTHROW(C) do { \ #define CHECK_NOTHROW(C) do { \
try { \ try { \
C; \ C; \
@ -217,6 +236,7 @@
} while (0) } while (0)
///////////////////////////////////////////////////////////////////////////////
class panic_error { class panic_error {
protected: protected:
std::string m_what; std::string m_what;
@ -232,22 +252,27 @@ void panic (const std::string&) terminal;
void panic (void) terminal; void panic (void) terminal;
///////////////////////////////////////////////////////////////////////////////
void not_implemented (void) terminal; void not_implemented (void) terminal;
void not_implemented (const char*) terminal; void not_implemented (const char*) terminal;
///////////////////////////////////////////////////////////////////////////////
void unreachable (void) terminal; void unreachable (void) terminal;
void unreachable (const std::string&) terminal; void unreachable (const std::string&) terminal;
void unusual (void); void unusual (void);
///////////////////////////////////////////////////////////////////////////////
void breakpoint (void); void breakpoint (void);
///////////////////////////////////////////////////////////////////////////////
void enable_fpe (void); void enable_fpe (void);
void disable_fpe (void); void disable_fpe (void);
///////////////////////////////////////////////////////////////////////////////
namespace debug { namespace debug {
void init (void); void init (void);
} }