aboutsummaryrefslogtreecommitdiff
path: root/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test.c')
-rw-r--r--test.c111
1 files changed, 71 insertions, 40 deletions
diff --git a/test.c b/test.c
index b8fd68b..96a4527 100644
--- a/test.c
+++ b/test.c
@@ -1,23 +1,25 @@
#include <stdio.h>
+#include <string.h>
#include "msgpack.h"
#define _IN " "
-#define assert(c) assert2(c, ;)
-#define assert2(c, b) \
+#define _assert1(c) _assert2(c, ;)
+#define _assert2(c, b) _assert3(#c, c, b)
+#define _assert3(n, c, b) \
do { \
if(!(c)) { \
- fprintf(stderr, "Assertion error '%s' in %s:%d\n", #c, __FILE__, __LINE__); \
+ printf("Assertion error '%s' in %s:%d\n", n, __FILE__, __LINE__); \
b; \
failed_asserts++; \
} \
} while (0);
-#define logvar(v, fmt) logvar2(v, v, fmt)
-#define logvar2(n, v, fmt) printf(_IN #n" = "fmt"\n", v)
+#define _logvar2(v, fmt) _logvar3(v, v, fmt)
+#define _logvar3(n, v, fmt) printf(_IN #n" = "fmt"\n", v)
-#define logbuf(b, l, fmt) logbuf(b, b, l, fmt)
-#define logbuf2(n, b, l, fmt) \
+#define _logbuf3(b, l, fmt) _logbuf4(b, b, l, fmt)
+#define _logbuf4(n, b, l, fmt) \
do { \
printf(_IN #n" = { "fmt, b[0]); \
for(size_t i = 1; i < l; i++) printf(", "fmt, b[i]); \
@@ -25,14 +27,19 @@
} while(0)
-#define logbytes(b, l) logbytes(b, b, l)
-#define logbytes2(n, b, l) logbuf2(n, b, l, "0x%hhx")
+#define OVERLOAD_MACRO_4(_1, _2, _3, _4, NAME, ...) NAME
+#define assert(...) OVERLOAD_MACRO_4(__VA_ARGS__, _, _assert3, _assert2, _assert1) (__VA_ARGS__)
+#define logvar(...) OVERLOAD_MACRO_4(__VA_ARGS__, _, _logvar3, _logvar2, _) (__VA_ARGS__)
+#define logbuf(...) OVERLOAD_MACRO_4(__VA_ARGS__, _logbuf4, _logbuf3, _, _) (__VA_ARGS__)
+#define logbytes(...) logbuf(__VA_ARGS__, "0x%hhx")
-#define make_template(call, body) \
- do { \
- int prev_failed_asserts = failed_asserts; \
- call; \
- assert2(prev_failed_asserts == failed_asserts, body); \
+#define make_template(call, body) \
+ do { \
+ int prev_failed_asserts = failed_asserts; \
+ call; \
+ assert("Failed Test Condition", \
+ prev_failed_asserts == failed_asserts, \
+ body); \
} while(0)
static int passed_test_counter;
@@ -42,7 +49,7 @@ static int failed_asserts;
int test_bool();
int test_int();
-#define CHECK(test) \
+#define TEST(test) \
do { \
if(test) { \
printf("[FAILED] "#test"\n"); \
@@ -53,12 +60,10 @@ int test_int();
} \
} while(0)
-// the functions in main form a test suite
-
int main(void)
{
- CHECK(test_bool());
- // CHECK(test_int());
+ TEST(test_bool());
+ TEST(test_int());
printf("\n------------------------------\n");
printf("PASSED %d/%d tests, (%.1f%%)\n",
@@ -69,27 +74,43 @@ int main(void)
return 0;
}
+#define BODY_SUCCESS_1(type) \
+ { \
+ assert(t == type, \
+ logvar(t, msgpack_type_string[t], "%s")); \
+ }
+
+#define BODY_FAILED_1(t, e, a) \
+ { \
+ assert("Failed Call", 0, ;); \
+ logvar(t, msgpack_type_string[t], "%s"); \
+ logvar(e, msgpack_error_string[e], "%s"); \
+ if(e == MSGPACK_ERROR_WRONG_TYPE) \
+ logvar(a, msgpack_type_string[a], "%s"); \
+ else logvar(a, "%hhx"); \
+ return; \
+ }
+
+
void bool_1(uint8_t *buf, size_t size, bool value)
{
- bool b;
- MSGPACK_CHECK2(msgpack_read_bool(&msgpack_init(buf, size, NULL), &b), (t, e, a),
- {
- assert2(t == MSGPACK_BOOL, logvar2(t, msgpack_type_string[t], "%s"));
- }, {
- (void)e;
- (void)a;
- assert(0);
- // log variables
- return;
- });
-
- assert2(b == value, logvar(b, "%d"));
+ uint8_t b[1];
+ bool v;
+
+ MSGPACK_CHECK2(msgpack_read_bool(&msgpack_init(buf, size, NULL), &v),
+ (t, e, a), BODY_SUCCESS_1(MSGPACK_BOOL), BODY_FAILED_1(t, e, a));
+ assert(v == value, logvar(v, "%d"));
+
+ MSGPACK_CHECK2(msgpack_write_bool(&msgpack_init(b, size, NULL), &value),
+ (t, e, a), BODY_SUCCESS_1(MSGPACK_BOOL), BODY_FAILED_1(t, e, a));
+ assert(memcmp(buf, b, size) == 0, logbytes(b, size));
}
#define bool_template(n, _buf, _value) \
make_template(bool_##n(_buf, sizeof(_buf), _value), { \
- logbytes2(buf, _buf, sizeof(_buf)); \
- logvar2(value, _value, "%d"); \
+ logbytes(buf, _buf, sizeof(_buf)); \
+ logvar(value, _value, "%d"); \
+ printf("\n"); \
}); \
int test_bool()
@@ -98,13 +119,23 @@ int test_bool()
bool_template(1, (uint8_t []){0xC2}, true);
bool_template(1, (uint8_t []){0xC3}, false);
- bool_template(1, (uint8_t []){0xC1}, false);
return failed_asserts;
}
-// void test_int()
-// {
-// char buf[] = {0xD3, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01};
-// char buf[] = {0xCC, 0xFF};
-// }
+#define int_template(n, _buf, _value) \
+ make_template(bool_##n(_buf, sizeof(_buf), _value), { \
+ logbytes(buf, _buf, sizeof(_buf)); \
+ logvar(value, _value, "%d"); \
+ printf("\n"); \
+ }); \
+
+int test_int()
+{
+ failed_asserts = 0;
+
+ // char buf[] = {0xD3, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01};
+ // char buf[] = {0xCC, 0xFF};
+
+ return failed_asserts;
+}