aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/debug/assert.h
diff options
context:
space:
mode:
authorcathook <b01902109@csie.ntu.edu.tw>2014-09-24 13:37:42 +0800
committercathook <b01902109@csie.ntu.edu.tw>2014-09-29 16:55:57 +0800
commit8b76fbb408f8eedab24195655c45c891af01eaab (patch)
tree414d7fc87885cb77e181a3ab99e334b837621036 /meowpp/debug/assert.h
parentef9af0d577c3a6b5d11fdeed7a9149d09973171b (diff)
downloadmeow-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.h76
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__