diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-12-05 18:09:01 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-12-05 18:09:01 -0500 |
| commit | eccc1feda80b036768afb7b29933756b83f2bb48 (patch) | |
| tree | 2001acd6e0a155b56baab403e26a3753a03c8dd4 | |
| parent | aa73624e13afd6767fc8c1b6a572b35f751dae2b (diff) | |
pkarr: add tests
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | pkarr.h | 2 | ||||
| -rw-r--r-- | test/pkarr.c | 69 |
3 files changed, 72 insertions, 2 deletions
@@ -22,6 +22,7 @@ SRC = \ test/pkstr.cpp \ test/pkev.c \ test/pkev.cpp \ + test/pkarr.c\ test/pkarr.cpp \ OBJ = $(SRC:%.c=.o) @@ -75,7 +76,7 @@ pkstr: pkmacros pkstr.gch pkstr.gchpp pkev: pkev.gch pkev.gchpp -pkarr: pkarr.gch pkarr.gchpp +pkarr: pkmem pkarr.gch pkarr.gchpp build: pkmacros build: pkmem-types @@ -2,7 +2,7 @@ #define PK_PKARR_H #include <stdint.h> -#include "pkmem.h" /* delete me */ +#include "pkmem.h" /* deleteme */ struct pk_arr { uint32_t next; 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; } |
