diff options
author | cathook <b01902109@csie.ntu.edu.tw> | 2014-09-24 13:37:42 +0800 |
---|---|---|
committer | cathook <b01902109@csie.ntu.edu.tw> | 2014-09-29 16:55:57 +0800 |
commit | 8b76fbb408f8eedab24195655c45c891af01eaab (patch) | |
tree | 414d7fc87885cb77e181a3ab99e334b837621036 /meowpp/debug/assert.h | |
parent | ef9af0d577c3a6b5d11fdeed7a9149d09973171b (diff) | |
download | meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar.gz meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar.bz2 meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar.lz meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar.xz meow-8b76fbb408f8eedab24195655c45c891af01eaab.tar.zst meow-8b76fbb408f8eedab24195655c45c891af01eaab.zip |
Big change, detail see README.
Diffstat (limited to 'meowpp/debug/assert.h')
-rw-r--r-- | meowpp/debug/assert.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/meowpp/debug/assert.h b/meowpp/debug/assert.h new file mode 100644 index 0000000..30659b7 --- /dev/null +++ b/meowpp/debug/assert.h @@ -0,0 +1,76 @@ +/*! + * @file assert.h + * @brief Contains assert macro for meowpp's debugging tools. + * + * You can use + * @code{.cpp} + * #define MEOWPP_NODEBUG + * @endcode + * to remove all the debugging code. + * + * @author cathook + */ + +#ifndef __MEOWPP_ASSERT_H__ +#define __MEOWPP_ASSERT_H__ + +#include <cstdio> +#include <cstdlib> + + +namespace meow { + + +/*! + * @def Assert + * @brief A macro for assert whether a expression is failed or not. + * @param expr The expression to be tested. + * @param ... Error information to be printed to stderr when the expr is failed. + * + * When expression is failed, it will call `fprintf(stderr, ...)` to print out + * the message follows by calling `abort()` to halt the program. + * + * @note You can use + * @code{.cpp} + * #define MEOWPP_TESTING + * @endcode + * to tell this macro calls `test::abort()` instead of normal `abort()` + * function. + */ + + +#ifndef MEOWPP_NODEBUG + +#define MEOWPP_STRINGIFY(x) #x +#define MEOWPP_TOSTRING(x) MEOWPP_STRINGIFY(x) + +#ifndef MEOWPP_DEBUG_ASSERT_TESTING + +#define Assert(expr,...) \ + while (((expr) || \ + (fprintf(stderr, "Assertion error at " \ + __FILE__ ":" MEOWPP_TOSTRING(__LINE__) \ + " >>>" __VA_ARGS__), \ + abort(), false)) && false) + +#else // MEOWPP_DEBUG_ASSERT_TESTING + +#define Assert(expr,...) \ + while (((expr) || \ + (fprintf(stderr, "Assertion error at " \ + __FILE__ ":" MEOWPP_TOSTRING(__LINE__) \ + " >>> " __VA_ARGS__), \ + test::abort(), false)) && false) + +#endif // MEOWPP_DEBUG_ASSERT_TESTING + +#else // MEOWPP_NODEBUG + +#define Assert(expr,...) \ + while (false) + +#endif // MEOWPP_NODEBUG + +} // meow + +#endif // __MEOWPP_ASSERT_H__ |