#define PK_IMPL_MEM #include "../pkmem.h" #define PK_IMPL_FUNCINSTR #include "../pkfuncinstr.h" #include #include struct mem_test { struct pk_membucket *bkt1; struct pk_membucket *bkt2; } mt; void spinup() { mt.bkt1 = pk_mem_bucket_create("bkt1", 1024, false); mt.bkt2 = pk_mem_bucket_create("bkt2", 1024, false); } void spinup_w_instr() { pk_funcinstr_init(); spinup(); } void teardown() { pk_mem_bucket_destroy(mt.bkt1); pk_mem_bucket_destroy(mt.bkt2); pk_funcinstr_teardown(); } int main(int argc, char *argv[]) { (void)argc; (void)argv; // pk_new_base { 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); pk_delete_base(some_dang_string, 64); teardown(); } /* template { spinup(); teardown(); } */ // zero-length alloc { spinup_w_instr(); char *zero_length_string; char *three_length_string; zero_length_string = pk_new_bkt(0, 0, mt.bkt1); 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); PK_LOGV_INF("%s: %s\n", __FILE__, "handles zero-length alloc"); teardown(); } return 0; }