tests: kernel: add test for k_realloc
add test for k_realloc. Co-authored-by: Yong Cong Sin <ycsin@meta.com> Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
This commit is contained in:
parent
8c37f14b98
commit
cd0c67f35a
1 changed files with 61 additions and 0 deletions
|
@ -101,6 +101,67 @@ ZTEST(mheap_api, test_mheap_malloc_free)
|
||||||
zassert_is_null(block_fail, NULL);
|
zassert_is_null(block_fail, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZTEST(mheap_api, test_mheap_realloc)
|
||||||
|
{
|
||||||
|
void *block1, *block2;
|
||||||
|
size_t nb;
|
||||||
|
|
||||||
|
/* Realloc NULL pointer is equivalent to malloc() */
|
||||||
|
block1 = k_realloc(NULL, BLK_SIZE_MIN);
|
||||||
|
zassert_not_null(block1);
|
||||||
|
|
||||||
|
/* Allocate something larger than the heap */
|
||||||
|
block2 = k_realloc(NULL, OVERFLOW_SIZE);
|
||||||
|
/* Should fail and return NULL */
|
||||||
|
zassert_is_null(block2);
|
||||||
|
|
||||||
|
/* Keep making the allocated buffer bigger until the heap is depleted */
|
||||||
|
for (nb = 2; nb < (2 * BLK_NUM_MAX); nb++) {
|
||||||
|
void *last_block1 = block1;
|
||||||
|
|
||||||
|
block1 = k_realloc(block1, nb * BLK_SIZE_MIN);
|
||||||
|
if (block1 == NULL) {
|
||||||
|
block1 = last_block1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate buffer2 when the heap has been depleted */
|
||||||
|
block2 = k_realloc(NULL, BLK_SIZE_MIN);
|
||||||
|
/* Should fail and return NULL */
|
||||||
|
zassert_is_null(block2);
|
||||||
|
|
||||||
|
/* Now, make block1 smaller */
|
||||||
|
block1 = k_realloc(block1, BLK_SIZE_MIN);
|
||||||
|
zassert_not_null(block1);
|
||||||
|
|
||||||
|
/* Try to allocate buffer2 again */
|
||||||
|
block2 = k_realloc(NULL, BLK_SIZE_MIN);
|
||||||
|
/* Should pass this time */
|
||||||
|
zassert_not_null(block2);
|
||||||
|
|
||||||
|
/* Deallocate everything */
|
||||||
|
k_free(block1);
|
||||||
|
/* equivalent to k_free() */
|
||||||
|
block2 = k_realloc(block2, 0);
|
||||||
|
/* Return NULL after freed */
|
||||||
|
zassert_is_null(block2);
|
||||||
|
|
||||||
|
/* After all allocated buffers have been freed, make sure that we are able to allocate as
|
||||||
|
* many again
|
||||||
|
*/
|
||||||
|
block1 = k_malloc(BLK_SIZE_MIN);
|
||||||
|
zassert_not_null(block1);
|
||||||
|
for (size_t i = 1; i < nb; i++) {
|
||||||
|
block1 = k_realloc(block1, i * BLK_SIZE_MIN);
|
||||||
|
zassert_not_null(block1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free block1 with k_realloc() this time */
|
||||||
|
block1 = k_realloc(block1, 0);
|
||||||
|
zassert_is_null(block1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Test to demonstrate k_calloc() API functionality.
|
* @brief Test to demonstrate k_calloc() API functionality.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue