summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-05-11 17:21:45 +0300
committerAndrei Karas <akaras@inbox.ru>2016-05-11 17:21:45 +0300
commit7f5f2394d3f3dccf2e6a07a466f3840dafed8e04 (patch)
tree5a239f75c18d6a8f959409f4714d6b9ec861e253 /src/utils
parent5b5f27a70fd8b3c421f350c39d7fe05f692df2ed (diff)
downloadmv-7f5f2394d3f3dccf2e6a07a466f3840dafed8e04.tar.gz
mv-7f5f2394d3f3dccf2e6a07a466f3840dafed8e04.tar.bz2
mv-7f5f2394d3f3dccf2e6a07a466f3840dafed8e04.tar.xz
mv-7f5f2394d3f3dccf2e6a07a466f3840dafed8e04.zip
In checkutils with unit tests enabled, any failed assert will throw exception.
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/checkutils.h87
-rw-r--r--src/utils/checkutils_unittest.cc20
2 files changed, 95 insertions, 12 deletions
diff --git a/src/utils/checkutils.h b/src/utils/checkutils.h
index 9966203dc..23b1fc965 100644
--- a/src/utils/checkutils.h
+++ b/src/utils/checkutils.h
@@ -89,6 +89,54 @@
"Detected false value", #val), \
throw new std::exception(), true) : false)
+#define returnFailFalseV(val) \
+ if (!val) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected false value", #val); \
+ throw new std::exception(); \
+ }
+
+#define returnFailTrueV(val) \
+ if (val) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected true value", #val); \
+ throw new std::exception(); \
+ }
+
+#define returnFailFalse(ret, val) \
+ if (!val) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected false value", #val); \
+ throw new std::exception(); \
+ }
+
+#define returnFailTrue(ret, val) \
+ if (val) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected true value", #val); \
+ throw new std::exception(); \
+ }
+
+#define returnFailNullptrV(val) \
+ if ((val) == nullptr) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected null value", #val); \
+ throw new std::exception(); \
+ }
+
+#define returnFailNullptr(ret, val) \
+ if ((val) == nullptr) \
+ { \
+ reportStack(__FILE__, __LINE__, __func__, \
+ "Detected null value", #val); \
+ throw new std::exception(); \
+ }
+
void reportStack(const char *const file,
const unsigned int line,
const char *const func,
@@ -118,17 +166,51 @@ void reportStack(const char *const file,
#define returnNullptrVReal(val) \
if ((val) == nullptr) \
- return; \
+ return;
#define returnNullptrReal(ret, val) \
if ((val) == nullptr) \
- return ret; \
+ return ret;
#define failFalse(val) (val)
#define failTrue(val) (val)
+#define returnFailFalseV(val) \
+ if (!val) \
+ return;
+
+#define returnFailTrueV(val) \
+ if (val) \
+ return;
+
+#define returnFailFalse(ret, val) \
+ if (!val) \
+ return ret;
+
+#define returnFailTrue(ret, val) \
+ if (val) \
+ return ret;
+
+#define returnFailNullptrV(val) \
+ if ((val) == nullptr) \
+ return;
+
+#define returnFailNullptr(ret, val) \
+ if ((val) == nullptr) \
+ return ret;
+
#endif // ENABLE_ASSERTS
+#ifdef UNITTESTS
+#define reportFalse(val) failFalse(val)
+#define reportTrue(val) failTrue(val)
+#define returnFalseV(val) returnFailFalseV(val)
+#define returnTrueV(val) returnFailTrueV(val)
+#define returnFalse(ret, val) returnFailFalse(ret, val)
+#define returnTrue(ret, val) returnFailTrue(ret, val)
+#define returnNullptrV(val) returnFailNullptrV(val)
+#define returnNullptr(ret, val) returnFailNullptr(ret, val)
+#else // UNITTESTS
#define reportFalse(val) reportFalseReal(val)
#define reportTrue(val) reportTrueReal(val)
#define returnFalseV(val) returnFalseVReal(val)
@@ -137,5 +219,6 @@ void reportStack(const char *const file,
#define returnTrue(ret, val) returnTrueReal(ret, val)
#define returnNullptrV(val) returnNullptrVReal(val)
#define returnNullptr(ret, val) returnNullptrReal(ret, val)
+#endif // UNITTESTS
#endif // UTILS_CHECKUTILS_H
diff --git a/src/utils/checkutils_unittest.cc b/src/utils/checkutils_unittest.cc
index 0d09143c3..cbf26fa7b 100644
--- a/src/utils/checkutils_unittest.cc
+++ b/src/utils/checkutils_unittest.cc
@@ -35,39 +35,39 @@ namespace
static void testReturnFalseV(const bool val)
{
flag = false;
- returnFalseV(val);
+ returnFalseVReal(val);
flag = true;
}
static void testReturnTrueV(const bool val)
{
flag = false;
- returnTrueV(val);
+ returnTrueVReal(val);
flag = true;
}
static int testReturnFalse(const bool val)
{
- returnFalse(0, val);
+ returnFalseReal(0, val);
return 1;
}
static int testReturnTrue(const bool val)
{
- returnTrue(0, val);
+ returnTrueReal(0, val);
return 1;
}
static int testReturnNullptr(void *val)
{
- returnNullptr(0, val);
+ returnNullptrReal(0, val);
return 1;
}
static void testReturnNullptrV(void *val)
{
flag = false;
- returnNullptrV(val);
+ returnNullptrVReal(val);
flag = true;
}
@@ -77,14 +77,14 @@ TEST_CASE("CheckUtils")
SECTION("reportFalse")
{
- REQUIRE(reportFalse(false) == false);
- REQUIRE(reportFalse(true) == true);
+ REQUIRE(reportFalseReal(false) == false);
+ REQUIRE(reportFalseReal(true) == true);
}
SECTION("reportTrue")
{
- REQUIRE(reportTrue(false) == false);
- REQUIRE(reportTrue(true) == true);
+ REQUIRE(reportTrueReal(false) == false);
+ REQUIRE(reportTrueReal(true) == true);
}
SECTION("failFalse")