summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-09-12 08:54:14 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-09-12 08:54:14 -0400
commita1d67326e095846d79f181807c8d4b80c61a8035 (patch)
tree3eb83a781d262226374963bfe8b4521590b006ee
parente4cec8bd86903ba3d996ccac7879ae8a93edcabe (diff)
pkbktarr: update test to ensure [0,0] iterates
-rw-r--r--test/pkbktarr.cpp35
1 files changed, 30 insertions, 5 deletions
diff --git a/test/pkbktarr.cpp b/test/pkbktarr.cpp
index dd92534..f4bc9c9 100644
--- a/test/pkbktarr.cpp
+++ b/test/pkbktarr.cpp
@@ -4,6 +4,7 @@
#define PK_IMPL_ITER
#define PK_IMPL_MEM
#define PK_IMPL_BKTARR
+#define PK_MEMORY_FORCE_MALLOC
#include "../pkbktarr.h"
void test_spinup(struct pk_membucket **bkt_buckets, struct pk_membucket **bkt_data)
@@ -45,8 +46,10 @@ int main(int argc, char *argv[])
if (arr.head_r.b != 0) exit(1);
if (arr.head_r.i != 1) exit(1);
if (arr.idx_unused[0] != 0xFFFFFFFFFFFFFFFE) exit(1);
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 2) exit(1);
if (bkt_data->alloc_count != 1) exit(1);
+#endif
if (arr[h] != 128) exit(1);
pk_bkt_arr_free_handle(&arr, h);
@@ -55,12 +58,16 @@ int main(int argc, char *argv[])
if (arr.head_r.b != 0) exit(1);
if (arr.head_r.i != 1) exit(1);
if (arr.idx_unused[0] != 0xFFFFFFFFFFFFFFFF) exit(1);
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 2) exit(1);
if (bkt_data->alloc_count != 1) exit(1);
+#endif
arr.~pk_bkt_arr_t<int>();
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 0) exit(1);
if (bkt_data->alloc_count != 0) exit(1);
+#endif
}
test_teardown(&bkt_buckets, &bkt_data);
@@ -72,30 +79,41 @@ int main(int argc, char *argv[])
struct pk_bkt_arr_t<int> arr(pk_bkt_arr_handle_MAX_constexpr, bkt_buckets, bkt_data);
int val = 128;
+ struct pk_bkt_arr_handle h2 = pk_bkt_arr_new_handle(&arr);
+ struct pk_bkt_arr_handle h3 = pk_bkt_arr_new_handle(&arr);
struct pk_bkt_arr_handle h = pk_bkt_arr_new_handle(&arr);
+ pk_bkt_arr_free_handle(&arr, h2);
+ pk_bkt_arr_free_handle(&arr, h3);
arr[h] = val;
if (h.b != 0) exit(1);
- if (h.i != 0) exit(1);
+ if (h.i != 2) exit(1);
if (arr.head_l.b != 0) exit(1);
- if (arr.head_l.i != 1) exit(1);
+ if (arr.head_l.i != 0) exit(1);
if (arr.head_r.b != 0) exit(1);
- if (arr.head_r.i != 1) exit(1);
- if (arr.idx_unused[0] != 0xFFFFFFFFFFFFFFFE) exit(1);
+ if (arr.head_r.i != 3) exit(1);
+ if (arr.idx_unused[0] != 0xFFFFFFFFFFFFFFFB) exit(1);
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 2) exit(1);
if (bkt_data->alloc_count != 1) exit(1);
+#endif
if (arr[h] != val) exit(1);
+ int count = 0;
pk_bkt_arr_t<int>::FN_Find cb_wrapper{};
- cb_wrapper.func = [](const int *lhs, const int *rhs)
+ cb_wrapper.func = [&count](const int *lhs, const int *rhs)
{
+ count++;
return *lhs == *rhs;
};
pk_bkt_arr_handle found_h = pk_bkt_arr_find_first_handle(&arr, &pk_bkt_arr_t<int>::FN_Find::invoke, &cb_wrapper, &val);
if (pk_bkt_arr_handle_compare(found_h, h) != 0) exit(1);
+ if (count != 1) exit(1);
arr.~pk_bkt_arr_t<int>();
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 0) exit(1);
if (bkt_data->alloc_count != 0) exit(1);
+#endif
}
test_teardown(&bkt_buckets, &bkt_data);
@@ -116,8 +134,10 @@ int main(int argc, char *argv[])
if (arr.head_r.b != 0) exit(1);
if (arr.head_r.i != 1) exit(1);
if (arr.idx_unused[0] != 0xFFFFFFFFFFFFFFFE) exit(1);
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 2) exit(1);
if (bkt_data->alloc_count != 1) exit(1);
+#endif
if (arr[h] != val) exit(1);
int some_counter = 0;
@@ -132,8 +152,10 @@ int main(int argc, char *argv[])
if (some_counter != 1) exit(1);
arr.~pk_bkt_arr_t<int>();
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 0) exit(1);
if (bkt_data->alloc_count != 0) exit(1);
+#endif
}
test_teardown(&bkt_buckets, &bkt_data);
@@ -162,13 +184,16 @@ int main(int argc, char *argv[])
exit(1);
}
i += 1;
+ delete val_ptr;
return;
};
pk_bkt_arr_iterate(&arr, &pk_bkt_arr_t<int>::FN_Iter::invoke, &cb_wrapper);
arr.~pk_bkt_arr_t<int*>();
+#ifndef PK_MEMORY_FORCE_MALLOC
if (bkt_buckets->alloc_count != 0) exit(1);
if (bkt_data->alloc_count != 0) exit(1);
+#endif
}
test_teardown(&bkt_buckets, &bkt_data);