summaryrefslogtreecommitdiff
path: root/test/pkmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/pkmem.c')
-rw-r--r--test/pkmem.c202
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();
}