diff options
Diffstat (limited to 'test/pkmem.c')
| -rw-r--r-- | test/pkmem.c | 202 |
1 files changed, 145 insertions, 57 deletions
diff --git a/test/pkmem.c b/test/pkmem.c index 36bf0eb..38a7c1b 100644 --- a/test/pkmem.c +++ b/test/pkmem.c @@ -3,6 +3,9 @@ #include "../pkmem.h" +#define PK_IMPL_TST +#include "../pktst.h" + #define PK_IMPL_FUNCINSTR #include "../pkfuncinstr.h" @@ -40,7 +43,8 @@ int main(int argc, char *argv[]) spinup_w_instr(); pk_mem_bucket_set_client_mem_bucket(mt.bkt1); char *some_dang_string = (char*)pk_new_base(64, alignof(char*)); - fprintf(stdout, "some_dang_string: %s: %p\n", some_dang_string, (void *)some_dang_string); + memset(some_dang_string, '\0', 64); + fprintf(stdout, "some_dang_string: \"%s\": %p\n", some_dang_string, (void *)some_dang_string); pk_delete_base(some_dang_string, 64); teardown(); } @@ -62,13 +66,24 @@ int main(int argc, char *argv[]) three_length_string = pk_new_bkt(3, 0, mt.bkt1); three_length_string[0] = '1'; three_length_string[1] = '2'; - - if (zero_length_string != NULL) exit(1); - if (strlen(three_length_string) != 2) exit(1); - if (mt.bkt1->alloc_count != 1) exit(1); - if (mt.bkt1->head != 3) exit(1); - if (mt.bkt1->block_head_r != 0) exit(1); - + three_length_string[2] = '\0'; + +#ifdef PK_MEMORY_FORCE_MALLOC + PK_TEST_ASSERT_NEQ_EXIT(NULL, zero_length_string); + PK_TEST_ASSERT_EQ_EXIT(2, strlen(three_length_string)); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); + pk_delete(zero_length_string, 0, mt.bkt1); +#else + PK_TEST_ASSERT_EQ_EXIT(NULL, zero_length_string); + PK_TEST_ASSERT_EQ_EXIT(2, strlen(three_length_string)); + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(3, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#endif + + pk_delete(three_length_string, 3, mt.bkt1); PK_LOGV_INF("%s: %s\n", __FILE__, "handles zero-length alloc"); teardown(); } @@ -79,35 +94,67 @@ int main(int argc, char *argv[]) struct pk_memblock *blk; + void *ptrs[16]; + for (size_t i = 0; i < 16; ++i) { - pk_new_bkt(7, 8, mt.bkt1); + ptrs[i] = pk_new_bkt(7, 8, mt.bkt1); } blk = mt.bkt1->blocks; - if (mt.bkt1->alloc_count != 16) exit(1); - if (mt.bkt1->head != (8*16)-1) exit(1); - if (mt.bkt1->block_head_r != 15) exit(1); - if (mt.bkt1->block_capacity != 16) exit(1); - if (mt.bkt1->blocks != blk) exit(1); - - pk_new_bkt(7, 8, mt.bkt1); - - if (mt.bkt1->alloc_count != 17) exit(1); - if (mt.bkt1->head != (8*17)-1) exit(1); - if (mt.bkt1->block_head_r != 16) exit(1); - if (mt.bkt1->block_capacity != 17) exit(1); - if (mt.bkt1->blocks == blk) exit(1); +#ifdef PK_MEMORY_FORCE_MALLOC + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->block_capacity); + PK_TEST_ASSERT_EQ_EXIT(blk, mt.bkt1->blocks); +#else + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT((8*16)-1, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(15, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->block_capacity); + PK_TEST_ASSERT_EQ_EXIT(blk, mt.bkt1->blocks); +#endif + + void *ptr2 = pk_new_bkt(7, 8, mt.bkt1); + +#ifdef PK_MEMORY_FORCE_MALLOC + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->block_capacity); + PK_TEST_ASSERT_EQ_EXIT(blk, mt.bkt1->blocks); +#else + PK_TEST_ASSERT_EQ_EXIT(17, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT((8*17)-1, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(17, mt.bkt1->block_capacity); + PK_TEST_ASSERT_NEQ_EXIT(blk, mt.bkt1->blocks); +#endif blk = mt.bkt1->blocks; - pk_new_bkt(7, 8, mt.bkt1); - - if (mt.bkt1->alloc_count != 18) exit(1); - if (mt.bkt1->head != (8*18)-1) exit(1); - if (mt.bkt1->block_head_r != 17) exit(1); - if (mt.bkt1->block_capacity != 18) exit(1); - if (mt.bkt1->blocks == blk) exit(1); + void *ptr3 = pk_new_bkt(7, 8, mt.bkt1); + +#ifdef PK_MEMORY_FORCE_MALLOC + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(16, mt.bkt1->block_capacity); + PK_TEST_ASSERT_EQ_EXIT(blk, mt.bkt1->blocks); +#else + PK_TEST_ASSERT_EQ_EXIT(18, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT((8*18)-1, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(17, mt.bkt1->block_head_r); + PK_TEST_ASSERT_EQ_EXIT(18, mt.bkt1->block_capacity); + PK_TEST_ASSERT_NEQ_EXIT(blk, mt.bkt1->blocks); +#endif + + pk_delete(ptr3, 7, mt.bkt1); + pk_delete(ptr2, 7, mt.bkt1); + for (int i = 15; i >= 0; --i) { + pk_delete(ptrs[i], 7, mt.bkt1); + } PK_LOGV_INF("%s: %s\n", __FILE__, "handles block growth"); teardown(); @@ -125,13 +172,23 @@ int main(int argc, char *argv[]) void *ptr1 = pk_new_bkt(48, 1, mt.bkt1); (void)ptr1; - if ((void*)&mt.bkt1->data[0] != ptr1) exit(1); - if (mt.bkt1->alloc_count != 1) exit(1); - if (mt.bkt1->head != 48) exit(1); - if (mt.bkt1->debug_head_l != 1) exit(1); - if (mt.bkt1->debug_head_r != 1) exit(1); - if (mt.bkt1->block_head_l != 0) exit(1); - if (mt.bkt1->block_head_r != 0) exit(1); +#ifdef PK_MEMORY_FORCE_MALLOC + // PK_TEST_ASSERT_EQ_EXIT(ptr1, (void*)&mt.bkt1->data[0]); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#else + PK_TEST_ASSERT_EQ_EXIT(ptr1, (void*)&mt.bkt1->data[0]); + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(48, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#endif /* * [00-47] (48) ptr1 @@ -140,13 +197,23 @@ int main(int argc, char *argv[]) */ void *ptr2 = pk_new_bkt(1, 1, mt.bkt1); - if ((void*)(&mt.bkt1->data[0]+48) != ptr2) exit(1); - if (mt.bkt1->alloc_count != 2) exit(1); - if (mt.bkt1->head != 49) exit(1); - if (mt.bkt1->debug_head_l != 2) exit(1); - if (mt.bkt1->debug_head_r != 2) exit(1); - if (mt.bkt1->block_head_l != 0) exit(1); - if (mt.bkt1->block_head_r != 0) exit(1); +#ifdef PK_MEMORY_FORCE_MALLOC + // PK_TEST_ASSERT_EQ_EXIT(ptr2, (void*)(&mt.bkt1->data[0]+48)); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#else + PK_TEST_ASSERT_EQ_EXIT(ptr2, (void*)(&mt.bkt1->data[0]+48)); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(49, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#endif /* * [00-47] (48) ptr1 @@ -154,12 +221,21 @@ int main(int argc, char *argv[]) */ pk_delete_bkt(ptr2, 1, mt.bkt1); - if (mt.bkt1->alloc_count != 1) exit(1); - if (mt.bkt1->head != 48) exit(1); - if (mt.bkt1->debug_head_l != 1) exit(1); - if (mt.bkt1->debug_head_r != 2) exit(1); - if (mt.bkt1->block_head_l != 0) exit(1); - if (mt.bkt1->block_head_r != 0) exit(1); +#ifdef PK_MEMORY_FORCE_MALLOC + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#else + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(48, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(1, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#endif /* * [00-47] (48) ptr1 @@ -168,14 +244,26 @@ int main(int argc, char *argv[]) */ ptr2 = pk_new_bkt(1, 1, mt.bkt1); - if ((void*)(&mt.bkt1->data[0]+48) != ptr2) exit(1); - if (mt.bkt1->alloc_count != 2) exit(1); - if (mt.bkt1->head != 49) exit(1); - if (mt.bkt1->debug_head_l != 2) exit(1); - if (mt.bkt1->debug_head_r != 2) exit(1); - if (mt.bkt1->block_head_l != 0) exit(1); - if (mt.bkt1->block_head_r != 0) exit(1); - +#ifdef PK_MEMORY_FORCE_MALLOC + // PK_TEST_ASSERT_EQ_EXIT(ptr2, (void*)(&mt.bkt1->data[0]+48)); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#else + PK_TEST_ASSERT_EQ_EXIT(ptr2, (void*)(&mt.bkt1->data[0]+48)); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->alloc_count); + PK_TEST_ASSERT_EQ_EXIT(49, mt.bkt1->head); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->debug_head_l); + PK_TEST_ASSERT_EQ_EXIT(2, mt.bkt1->debug_head_r); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_l); + PK_TEST_ASSERT_EQ_EXIT(0, mt.bkt1->block_head_r); +#endif + + pk_delete(ptr1, 48, mt.bkt1); + pk_delete(ptr2, 1, mt.bkt1); PK_LOGV_INF("%s: %s\n", __FILE__, "handles free last + new"); teardown(); } |
