summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-12-05 18:09:01 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-12-05 18:09:01 -0500
commiteccc1feda80b036768afb7b29933756b83f2bb48 (patch)
tree2001acd6e0a155b56baab403e26a3753a03c8dd4 /test
parentaa73624e13afd6767fc8c1b6a572b35f751dae2b (diff)
pkarr: add tests
Diffstat (limited to 'test')
-rw-r--r--test/pkarr.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/pkarr.c b/test/pkarr.c
index d60d90c..d8f682f 100644
--- a/test/pkarr.c
+++ b/test/pkarr.c
@@ -1,6 +1,17 @@
#include "../pkarr.h"
+struct some_complex_struct {
+ char uhh;
+ union {
+ uint8_t chr[8];
+ uint16_t shrt[4];
+ uint32_t in[2];
+ uint64_t lng;
+ };
+ char okay;
+};
+
void
test_spinup(struct pk_arr *arr, struct pk_membucket **bkt)
{
@@ -21,8 +32,10 @@ int main(int argc, char *argv[])
{
(void)argc;
(void)argv;
+ uint64_t i;
struct pk_arr arr = {0};
struct pk_membucket *bkt = {0};
+ struct some_complex_struct cmplx_strct = {0};
/* template
{
@@ -32,6 +45,7 @@ int main(int argc, char *argv[])
}
*/
+ // init via append
{
test_spinup(&arr, &bkt);
arr.stride = sizeof(uint8_t);
@@ -47,5 +61,60 @@ int main(int argc, char *argv[])
test_teardown(&arr, &bkt);
}
+ // movement
+ {
+ test_spinup(&arr, &bkt);
+ arr.stride = sizeof(uint64_t);
+
+ for (i = 0; i < 5; ++i) {
+ pk_arr_append(&arr, &i);
+ }
+
+ pk_arr_move_to_back(&arr, 2);
+
+ if (arr.bkt == NULL) exit(1);
+ if (arr.data == NULL) exit(1);
+ if (arr.reserved == 0) exit(1);
+ if (arr.next != 5) exit(1);
+
+ uint64_t *vals = (uint64_t *)arr.data;
+ if (0 != vals[0]) exit(1);
+ if (1 != vals[1]) exit(1);
+ if (3 != vals[2]) exit(1);
+ if (4 != vals[3]) exit(1);
+ if (2 != vals[4]) exit(1);
+
+ test_teardown(&arr, &bkt);
+ }
+
+ // complex struct
+ {
+ test_spinup(&arr, &bkt);
+ arr.stride = sizeof(struct some_complex_struct);
+
+ for (i = 0; i < 5; ++i) {
+ cmplx_strct.uhh = (char)i;
+ cmplx_strct.lng = (uint64_t)i;
+ cmplx_strct.okay = (char)i;
+ pk_arr_append(&arr, &cmplx_strct);
+ }
+
+ pk_arr_move_to_back(&arr, 2);
+
+ if (arr.bkt == NULL) exit(1);
+ if (arr.data == NULL) exit(1);
+ if (arr.reserved == 0) exit(1);
+ if (arr.next != 5) exit(1);
+
+ struct some_complex_struct *vals = (struct some_complex_struct*)arr.data;
+ if (0 != vals[0].lng) exit(1);
+ if (1 != vals[1].lng) exit(1);
+ if (3 != vals[2].lng) exit(1);
+ if (4 != vals[3].lng) exit(1);
+ if (2 != vals[4].lng) exit(1);
+
+ test_teardown(&arr, &bkt);
+ }
+
return 0;
}