diff options
author | kartofen <mladenovnasko0@gmail.com> | 2025-03-25 01:55:32 +0200 |
---|---|---|
committer | kartofen <mladenovnasko0@gmail.com> | 2025-03-25 01:55:32 +0200 |
commit | c5e2ebc18ec867caf6f7c2edf2305f1cdb65b053 (patch) | |
tree | 349b9e481004a34c52f6a92c7718ce23b0a9451c /main.c | |
parent | d3598381289ac23217c472d5f48df3bea891ecf2 (diff) |
unit testing in main.c
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 116 |
1 files changed, 98 insertions, 18 deletions
@@ -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}; +// } |