diff options
| author | Douglas B. Rumbaugh <doug@douglasrumbaugh.com> | 2025-11-02 16:52:27 -0500 |
|---|---|---|
| committer | Douglas B. Rumbaugh <doug@douglasrumbaugh.com> | 2025-11-02 16:52:27 -0500 |
| commit | ba8728320cbda4ecb95ffe9d795f0121524e923f (patch) | |
| tree | 4447defbfa8dd30781561f5947fabf655e200d2c /tests/liballoc_tests.c | |
| parent | f7325bf190db48ae8771947b0fcd25f0bba64679 (diff) | |
| download | liballoc-ba8728320cbda4ecb95ffe9d795f0121524e923f.tar.gz | |
liballoc_tests: Added coalesce testing for free list
Diffstat (limited to 'tests/liballoc_tests.c')
| -rw-r--r-- | tests/liballoc_tests.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/liballoc_tests.c b/tests/liballoc_tests.c index fed6080..ad45636 100644 --- a/tests/liballoc_tests.c +++ b/tests/liballoc_tests.c @@ -121,6 +121,57 @@ START_TEST(free_list_reuse) { release(new_memory); } } +END_TEST + +START_TEST(free_list_coalesce_forward) { + size_t size =ALIGNMENT*3; + const size_t n = 100; + void *ptrs[n]; + + for (size_t i=0; i<n; i++) { + ptrs[i] = allocate(size); + } + + /* + * release memory in forward order. Each release should be + * coalesced, so there's only ever one free block + */ + size_t cnt = 0; + for(size_t i=0; i<n; i++) { + release(ptrs[i]); + cnt++; + free_nd *fl_head = free_list_head(); + ck_assert_ptr_null(fl_head->next); + ck_assert_int_eq(fl_head->size, (cnt)*size + (cnt-1)*sizeof(header)); + } +} +END_TEST + + +START_TEST(free_list_coalesce_backward) { + size_t size =ALIGNMENT*3; + const size_t n = 100; + void *ptrs[n]; + + for (size_t i=0; i<n; i++) { + ptrs[i] = allocate(size); + } + + /* + * release memory in reverse order. Each release should be + * coalesced, so there's only ever one free block + */ + size_t cnt = 0; + for(ssize_t i=n-1; i>=0; i--) { + release(ptrs[i]); + cnt++; + free_nd *fl_head = free_list_head(); + ck_assert_ptr_null(fl_head->next); + ck_assert_int_eq(fl_head->size, (cnt)*size + (cnt-1)*sizeof(header)); + } +} +END_TEST + Suite *liballoc_suite(void) { @@ -136,6 +187,8 @@ Suite *liballoc_suite(void) { tcase_add_test(unit, basic_release); tcase_add_test(unit, release_null); tcase_add_test(unit, free_list_reuse); + tcase_add_test(unit, free_list_coalesce_forward); + tcase_add_test(unit, free_list_coalesce_backward); suite_add_tcase(s, unit); return s; |