summaryrefslogtreecommitdiff
path: root/test/pkarr.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/pkarr.c')
-rw-r--r--test/pkarr.c101
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;
}