aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mem/src/mem.c18
-rw-r--r--mem/test/mem_test.c6
-rw-r--r--mempool/src/mempool.c11
-rw-r--r--mempool/test/mempool_test.c10
-rw-r--r--memstack/test/memstack_test.c8
5 files changed, 36 insertions, 17 deletions
diff --git a/mem/src/mem.c b/mem/src/mem.c
index 9169a9f..70648c9 100644
--- a/mem/src/mem.c
+++ b/mem/src/mem.c
@@ -57,14 +57,16 @@ void mem_del_(Memory* mem) {
57 57
58void mem_clear_(Memory* mem) { 58void mem_clear_(Memory* mem) {
59 assert(mem); 59 assert(mem);
60 mem->num_used_blocks = 0; 60 if (mem->num_blocks > 0) {
61 mem->next_free_chunk = 0; 61 mem->num_used_blocks = 0;
62 memset(mem->blocks, 0, mem->num_blocks * mem->block_size_bytes); 62 mem->next_free_chunk = 0;
63 memset(mem->chunks, 0, mem->num_blocks * sizeof(Chunk)); 63 memset(mem->blocks, 0, mem->num_blocks * mem->block_size_bytes);
64 64 memset(mem->chunks, 0, mem->num_blocks * sizeof(Chunk));
65 // Initialize the head as one large free chunk. 65
66 Chunk* head = &mem->chunks[0]; 66 // Initialize the head as one large free chunk.
67 head->num_blocks = mem->num_blocks; 67 Chunk* head = &mem->chunks[0];
68 head->num_blocks = mem->num_blocks;
69 }
68} 70}
69 71
70void* mem_alloc_(Memory* mem, size_t num_blocks) { 72void* mem_alloc_(Memory* mem, size_t num_blocks) {
diff --git a/mem/test/mem_test.c b/mem/test/mem_test.c
index a8d482f..52ce5a9 100644
--- a/mem/test/mem_test.c
+++ b/mem/test/mem_test.c
@@ -32,6 +32,12 @@ TEST_CASE(mem_create_dyn) {
32 mem_make_dyn(&mem, NUM_BLOCKS, sizeof(int)); 32 mem_make_dyn(&mem, NUM_BLOCKS, sizeof(int));
33} 33}
34 34
35// Clear an uninitialized allocator.
36TEST_CASE(mem_clear_uninitialized) {
37 test_mem mem = {0};
38 mem_clear(&mem);
39}
40
35// Allocate N chunks of 1 block each. 41// Allocate N chunks of 1 block each.
36TEST_CASE(mem_fully_allocate) { 42TEST_CASE(mem_fully_allocate) {
37 test_mem mem; 43 test_mem mem;
diff --git a/mempool/src/mempool.c b/mempool/src/mempool.c
index bae4fc9..2c3c725 100644
--- a/mempool/src/mempool.c
+++ b/mempool/src/mempool.c
@@ -65,15 +65,14 @@ void mempool_del_(mempool* pool) {
65 } 65 }
66} 66}
67 67
68// TODO: Add a unit test for clearing a pool that has not been initialized.
69void mempool_clear_(mempool* pool) { 68void mempool_clear_(mempool* pool) {
70 assert(pool); 69 assert(pool);
71 pool->head = 0;
72 pool->used = 0;
73 pool->num_used_blocks = 0;
74 memset(pool->blocks, 0, pool->num_blocks * pool->block_size_bytes);
75 memset(pool->block_info, 0, pool->num_blocks * sizeof(BlockInfo));
76 if (pool->num_blocks > 0) { 70 if (pool->num_blocks > 0) {
71 pool->head = 0;
72 pool->used = 0;
73 pool->num_used_blocks = 0;
74 memset(pool->blocks, 0, pool->num_blocks * pool->block_size_bytes);
75 memset(pool->block_info, 0, pool->num_blocks * sizeof(BlockInfo));
77 init_free_list(pool); 76 init_free_list(pool);
78 } 77 }
79} 78}
diff --git a/mempool/test/mempool_test.c b/mempool/test/mempool_test.c
index 6d904bc..69658b9 100644
--- a/mempool/test/mempool_test.c
+++ b/mempool/test/mempool_test.c
@@ -25,13 +25,19 @@ TEST_CASE(mempool_create) {
25} 25}
26 26
27// Create a dynamically-backed pool. 27// Create a dynamically-backed pool.
28TEST_CASE(mem_create_dyn) { 28TEST_CASE(mempool_create_dyn) {
29 DEF_MEMPOOL_DYN(dyn_pool, int); 29 DEF_MEMPOOL_DYN(dyn_pool, int);
30 30
31 dyn_pool pool; 31 dyn_pool pool;
32 mempool_make_dyn(&pool, NUM_BLOCKS, sizeof(int)); 32 mempool_make_dyn(&pool, NUM_BLOCKS, sizeof(int));
33} 33}
34 34
35// Clear an uninitialized pool.
36TEST_CASE(mempool_clear_uninitialized) {
37 test_pool pool = {0};
38 mempool_clear(&pool);
39}
40
35// Allocate all N blocks. 41// Allocate all N blocks.
36TEST_CASE(mempool_allocate_until_full) { 42TEST_CASE(mempool_allocate_until_full) {
37 test_pool pool; 43 test_pool pool;
@@ -172,7 +178,7 @@ TEST_CASE(mempool_get_block) {
172} 178}
173 179
174// Clear and re-use an allocator. 180// Clear and re-use an allocator.
175TEST_CASE(mem_clear_then_reuse) { 181TEST_CASE(mempool_clear_then_reuse) {
176 test_pool mem; 182 test_pool mem;
177 mempool_make(&mem); 183 mempool_make(&mem);
178 184
diff --git a/memstack/test/memstack_test.c b/memstack/test/memstack_test.c
index 5308be3..2bcffcd 100644
--- a/memstack/test/memstack_test.c
+++ b/memstack/test/memstack_test.c
@@ -15,12 +15,18 @@ TEST_CASE(memstack_create) {
15} 15}
16 16
17// Create and destroy a dynamically-backed stack. 17// Create and destroy a dynamically-backed stack.
18TEST_CASE(mem_create_dyn) { 18TEST_CASE(memstack_create_dyn) {
19 memstack stack = {0}; 19 memstack stack = {0};
20 memstack_make(&stack, CAPACITY, nullptr); 20 memstack_make(&stack, CAPACITY, nullptr);
21 memstack_del(&stack); 21 memstack_del(&stack);
22} 22}
23 23
24// Clear an uninitialized stack.
25TEST_CASE(memstack_clear_uninitialized) {
26 memstack stack = {0};
27 memstack_clear(&stack);
28}
29
24// Allocate all N ints. 30// Allocate all N ints.
25TEST_CASE(memstack_allocate_until_full) { 31TEST_CASE(memstack_allocate_until_full) {
26 memstack stack = {0}; 32 memstack stack = {0};