#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) { memset(arr, 0, sizeof(struct pk_arr)); *bkt = pk_bucket_create("test", 1024 * 1024, false); arr->bkt = *bkt; } void test_teardown(struct pk_arr *arr, struct pk_membucket **bkt) { pk_bucket_destroy(*bkt); *bkt = NULL; arr->data = NULL; } 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 { test_spinup(&arr, &bkt); test_teardown(&arr, &bkt); } */ // init via append { test_spinup(&arr, &bkt); arr.stride = sizeof(uint8_t); uint8_t c = 255; pk_arr_append(&arr, &c); if (arr.bkt == NULL) exit(1); if (arr.data == NULL) exit(1); if (arr.reserved == 0) exit(1); if (arr.next != 1) exit(1); 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; }