mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 23:19:31 +03:00
Add tests for zero-initialization functions
This commit is contained in:
parent
51271ba8ea
commit
969f3a6998
2 changed files with 181 additions and 1 deletions
|
@ -375,7 +375,7 @@ endif()
|
||||||
if (MI_BUILD_TESTS)
|
if (MI_BUILD_TESTS)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
foreach(TEST_NAME api stress)
|
foreach(TEST_NAME api api-fill stress)
|
||||||
add_executable(mimalloc-test-${TEST_NAME} test/test-${TEST_NAME}.c)
|
add_executable(mimalloc-test-${TEST_NAME} test/test-${TEST_NAME}.c)
|
||||||
target_compile_definitions(mimalloc-test-${TEST_NAME} PRIVATE ${mi_defines})
|
target_compile_definitions(mimalloc-test-${TEST_NAME} PRIVATE ${mi_defines})
|
||||||
target_compile_options(mimalloc-test-${TEST_NAME} PRIVATE ${mi_cflags})
|
target_compile_options(mimalloc-test-${TEST_NAME} PRIVATE ${mi_cflags})
|
||||||
|
|
180
test/test-api-fill.c
Normal file
180
test/test-api-fill.c
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
/* ----------------------------------------------------------------------------
|
||||||
|
Copyright (c) 2018-2020, Microsoft Research, Daan Leijen
|
||||||
|
This is free software; you can redistribute it and/or modify it under the
|
||||||
|
terms of the MIT license. A copy of the license can be found in the file
|
||||||
|
"LICENSE" at the root of this distribution.
|
||||||
|
-----------------------------------------------------------------------------*/
|
||||||
|
#include "mimalloc.h"
|
||||||
|
#include "mimalloc-types.h"
|
||||||
|
|
||||||
|
#include "testhelper.h"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Helper functions
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
bool check_zero_init(uint8_t* p, size_t size);
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Main testing
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
int main(void) {
|
||||||
|
mi_option_disable(mi_option_verbose);
|
||||||
|
|
||||||
|
// ---------------------------------------------------
|
||||||
|
// Zeroing allocation
|
||||||
|
// ---------------------------------------------------
|
||||||
|
CHECK_BODY("zeroinit-zalloc-small", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc(zalloc_size);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-zalloc-large", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc(zalloc_size);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-zalloc_small", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc_small(zalloc_size);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-calloc-small", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc(calloc_size, 1);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-calloc-large", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc(calloc_size, 1);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-rezalloc-small", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc(zalloc_size);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
zalloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_rezalloc(p, zalloc_size);
|
||||||
|
result &= check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-rezalloc-large", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc(zalloc_size);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
zalloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_rezalloc(p, zalloc_size);
|
||||||
|
result &= check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-recalloc-small", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc(calloc_size, 1);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
calloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_recalloc(p, calloc_size, 1);
|
||||||
|
result &= check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-recalloc-large", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc(calloc_size, 1);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
calloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_recalloc(p, calloc_size, 1);
|
||||||
|
result &= check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ---------------------------------------------------
|
||||||
|
// Zeroing in aligned API
|
||||||
|
// ---------------------------------------------------
|
||||||
|
CHECK_BODY("zeroinit-zalloc_aligned-small", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc_aligned(zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-zalloc_aligned-large", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc_aligned(zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-calloc_aligned-small", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc_aligned(calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-calloc_aligned-large", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc_aligned(calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-rezalloc_aligned-small", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc_aligned(zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
zalloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_rezalloc_aligned(p, zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result &= check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-rezalloc_aligned-large", {
|
||||||
|
size_t zalloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_zalloc_aligned(zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, zalloc_size);
|
||||||
|
zalloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_rezalloc_aligned(p, zalloc_size, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result &= check_zero_init(p, zalloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
CHECK_BODY("zeroinit-recalloc_aligned-small", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX / 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc_aligned(calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
calloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_recalloc_aligned(p, calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result &= check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
CHECK_BODY("zeroinit-recalloc_aligned-large", {
|
||||||
|
size_t calloc_size = MI_SMALL_SIZE_MAX * 2;
|
||||||
|
uint8_t* p = (uint8_t*)mi_calloc_aligned(calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result = check_zero_init(p, calloc_size);
|
||||||
|
calloc_size *= 3;
|
||||||
|
p = (uint8_t*)mi_recalloc_aligned(p, calloc_size, 1, MI_MAX_ALIGN_SIZE * 2);
|
||||||
|
result &= check_zero_init(p, calloc_size);
|
||||||
|
mi_free(p);
|
||||||
|
});
|
||||||
|
|
||||||
|
// ---------------------------------------------------
|
||||||
|
// Done
|
||||||
|
// ---------------------------------------------------[]
|
||||||
|
return print_test_summary();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Helper functions
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
bool check_zero_init(uint8_t* p, size_t size) {
|
||||||
|
if(!p)
|
||||||
|
return false;
|
||||||
|
bool result = true;
|
||||||
|
for (size_t i = 0; i < size; ++i) {
|
||||||
|
result &= p[i] == 0;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue