aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c116
1 files changed, 98 insertions, 18 deletions
diff --git a/main.c b/main.c
index 3ec1606..3468c01 100644
--- a/main.c
+++ b/main.c
@@ -1,25 +1,105 @@
#include <stdio.h>
#include "msgpack.h"
-#define BODY_SUCCESS printf("%s\n", msgpack_type_string[t])
-#define BODY_ERROR { \
- printf("ERROR %s %s %s\n", msgpack_error_string[e], \
- msgpack_type_string[t], msgpack_type_string[a]); \
- return 1; \
- }
+#define _IN " "
+
+#define assert(c) assert2(c, ;)
+#define assert2(c, b) \
+ do { \
+ if(!(c)) { \
+ fprintf(stderr, "Assertion error '%s' in %s:%d\n", #c, __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 logbuf(b, l, fmt) logbuf(b, b, l, fmt)
+#define logbuf2(n, b, l, fmt) \
+ do { \
+ printf(_IN #n" = { "fmt, b[0]); \
+ for(size_t i = 1; i < l; i++) printf(", "fmt, b[i]); \
+ printf(" }\n"); \
+ } while(0)
+
+
+#define logbytes(b, l) logbytes(b, b, l)
+#define logbytes2(n, b, l) logbuf2(n, b, l, "0x%hhx")
+
+#define make_template(call, body) \
+ do { \
+ int prev_failed_asserts = failed_asserts; \
+ call; \
+ assert2(prev_failed_asserts == failed_asserts, body); \
+ } while(0)
+
+static int passed_test_counter;
+static int failed_test_counter;
+static int failed_asserts;
+
+int test_bool();
+int test_int();
+
+#define CHECK(test) \
+ do { \
+ if(test) { \
+ printf("[FAILED] "#test"\n"); \
+ failed_test_counter++; \
+ } else { \
+ printf("[PASSED] "#test"\n"); \
+ passed_test_counter++; \
+ } \
+ } while(0)
+
int main(void)
{
- // char buf[] = {0x0F};
- // int b = 0;
- // MSGPACK_CHECK2(msgpack_read_bool(&msgpack_init(buf, 1, NULL), &b),(t, e, a),
- // BODY_SUCCESS, BODY_ERROR);
- // printf("VALUE %d\n", b);
-
- // char buf[] = {0xD3, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01};
- char buf[] = {0xCC, 0xFF};
- union mp_int m; m.i = 0;
- MSGPACK_CHECK2(msgpack_read_int(&msgpack_init(buf, sizeof(buf), NULL), &m),(t, e, a),
- BODY_SUCCESS, BODY_ERROR);
- printf("VALUE %llu\n", m.u);
+ CHECK(test_bool());
+ // CHECK(test_int());
+
+ printf("\n------------------------------\n");
+ printf("PASSED %d/%d tests, (%.1f%%)\n",
+ passed_test_counter,
+ failed_test_counter + passed_test_counter,
+ 100.0f * passed_test_counter /
+ (failed_test_counter + passed_test_counter));
return 0;
}
+
+void bool_1(char *buf, size_t size, int value)
+{
+ int 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"));
+ }, {
+ assert(0);
+ // log variables
+ return;
+ });
+
+ assert2(b == value, logvar(b, "%d"));
+}
+
+#define bool_template(n, _buf, _value) \
+ make_template(bool_##n(_buf, sizeof(_buf), _value), { \
+ logbytes2(buf, _buf, sizeof(_buf)); \
+ logvar2(value, _value, "%d"); \
+ }); \
+
+int test_bool()
+{
+ failed_asserts = 0;
+
+ bool_template(1, (char []){0xC2}, 1);
+ bool_template(1, (char []){0xC3}, 0);
+
+ return failed_asserts;
+}
+
+// void test_int()
+// {
+// char buf[] = {0xD3, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01};
+// char buf[] = {0xCC, 0xFF};
+// }