diff options
Diffstat (limited to 'test/pkarr.c')
| -rw-r--r-- | test/pkarr.c | 101 |
1 files changed, 99 insertions, 2 deletions
diff --git a/test/pkarr.c b/test/pkarr.c index 74ff27d..25ae171 100644 --- a/test/pkarr.c +++ b/test/pkarr.c @@ -1,6 +1,7 @@ // NOTE: only intended for performance testing // TODO: move flag to compiler and run tests more than once for full coverage +#define PK_IMPL_ITER #define PK_ARR_MOVE_IN_PLACE #define PK_IMPL_MEM #define PK_IMPL_ARR @@ -13,8 +14,8 @@ * When compiling with `-O3`, one (or maybe more?) of the tests fails * The issue is resolved now; leaving this for testing purposes. */ -#undef PK_LOGV_INF -#define PK_LOGV_INF(str, ...) (void)str +// #undef PK_LOGV_INF +// #define PK_LOGV_INF(str, ...) (void)str struct some_complex_struct { char uhh; @@ -307,5 +308,101 @@ int main(int argc, char *argv[]) } PK_LOGV_INF("%s", "[init via append, soft clear] end\n\n"); + PK_LOGV_INF("%s", "[iter forward] begin\n"); + { + bool res; + test_spinup(&arr, &bkt); + arr.stride = sizeof(uint8_t); + arr.alignment = alignof(uint8_t); + + for (i = 4; i > 0; --i) { + uint8_t u = (uint8_t)i - 1; + pk_arr_append(&arr, &u); + } + + struct pk_iter it; + res = pk_arr_iter_begin(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 0) exit(1); + if (*(uint8_t*)it.data != 3) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_increment(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 1) exit(1); + if (*(uint8_t*)it.data != 2) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_increment(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 2) exit(1); + if (*(uint8_t*)it.data != 1) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_increment(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 3) exit(1); + if (*(uint8_t*)it.data != 0) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_increment(&arr, &it); + if (res == true) exit(1); + + test_teardown(&arr, &bkt); + } + PK_LOGV_INF("%s", "[iter forward] end\n\n"); + + PK_LOGV_INF("%s", "[iter reverse] begin\n"); + { + bool res; + test_spinup(&arr, &bkt); + arr.stride = sizeof(uint8_t); + arr.alignment = alignof(uint8_t); + + for (i = 4; i > 0; --i) { + uint8_t u = (uint8_t)i - 1; + pk_arr_append(&arr, &u); + } + + struct pk_iter it; + res = pk_arr_iter_end(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 3) exit(1); + if (*(uint8_t*)it.data != 0) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_decrement(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 2) exit(1); + if (*(uint8_t*)it.data != 1) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_decrement(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 1) exit(1); + if (*(uint8_t*)it.data != 2) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_decrement(&arr, &it); + if (res == false) exit(1); + if (it.data == nullptr) exit(1); + if (it.id.arr.i != 0) exit(1); + if (*(uint8_t*)it.data != 3) exit(1); + PK_LOGV_INF("iter.data: %p iter.val: %i\n", it.data, *(uint8_t*)it.data); + + res = pk_arr_iter_decrement(&arr, &it); + if (res == true) exit(1); + + test_teardown(&arr, &bkt); + } + PK_LOGV_INF("%s", "[iter reverse] end\n\n"); + return 0; } |
