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 /test | |
| parent | aa73624e13afd6767fc8c1b6a572b35f751dae2b (diff) | |
pkarr: add tests
Diffstat (limited to 'test')
| -rw-r--r-- | test/pkarr.c | 69 |
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; } |
