+ fprintf(stderr, "\n%s:%d: Assertion failed %s with %s\n", __FILE__, __LINE__, #A, (B));\
+ create_core(); \
+ return TEST_FAILURE; \
+ } \
+} while (0)
+
+template <class T_comparable>
+bool _compare(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual)
+{
+ if (__expected != __actual)
+ {
+ libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\"";
+ return false;
+ }
+
+ return true;
+}
+
+template <class T_comparable>
+bool _compare_zero(const char *file, int line, const char *func, T_comparable __actual)
+{
+ if (T_comparable(0) != __actual)
+ {
+ libtest::stream::make_cerr(file, line, func) << "Expected 0 got \"" << __actual << "\"";
+ return false;
+ }
+
+ return true;
+}
+
+template <class T_comparable, class T_hint>
+bool _compare_hint(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual, T_hint __hint)
+{
+ if (__expected != __actual)
+ {
+ libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\" Additionally: \"" << __hint << "\"";
+
+ return false;
+ }
+
+ return true;
+}
+
+#define test_compare(__expected, __actual) \
+do \
+{ \
+ if (not _compare(__FILE__, __LINE__, __func__, ((__expected)), ((__actual)))) \
+ { \
+ create_core(); \
+ return TEST_FAILURE; \
+ } \
+} while (0)
+
+#define test_zero(__actual) \
+do \
+{ \
+ if (not _compare_zero(__FILE__, __LINE__, __func__, ((__actual)))) \
+ { \
+ create_core(); \
+ return TEST_FAILURE; \
+ } \
+} while (0)
+
+#define test_compare_got(__expected, __actual, __hint) \
+do \
+{ \
+ if (not _compare_hint(__FILE__, __LINE__, __func__, (__expected), (__actual), (__hint))) \
+ { \