jemalloc/test/unit/a0.c

71 lines
2 KiB
C

#include "test/jemalloc_test.h"
TEST_BEGIN(test_a0) {
void *p;
p = a0malloc(1);
expect_ptr_not_null(p, "Unexpected a0malloc() error");
a0dalloc(p);
}
TEST_END
TEST_BEGIN(test_a0_multi_sizes) {
static const size_t sizes[] = {1, 8, 1024, 64 * 1024};
void *ptrs[ARRAY_SIZE(sizes)];
for (unsigned i = 0; i < ARRAY_SIZE(sizes); i++) {
ptrs[i] = a0malloc(sizes[i]);
expect_ptr_not_null(
ptrs[i], "Unexpected a0malloc(%zu) failure", sizes[i]);
for (unsigned j = 0; j < i; j++) {
expect_ptr_ne(ptrs[i], ptrs[j],
"a0malloc returned duplicate pointer (i=%u, j=%u)",
i, j);
}
}
for (unsigned i = 0; i < ARRAY_SIZE(sizes); i++) {
a0dalloc(ptrs[i]);
}
}
TEST_END
TEST_BEGIN(test_a0_ialloc_zero) {
static const size_t sizes[] = {1, 8, 1024, 64 * 1024};
for (unsigned i = 0; i < ARRAY_SIZE(sizes); i++) {
size_t size = sizes[i];
uint8_t *p = (uint8_t *)a0ialloc(size, /* zero */ true,
/* is_internal */ true);
expect_ptr_not_null(p, "Unexpected a0ialloc(zero=true, %zu)",
size);
for (size_t k = 0; k < size; k++) {
expect_u_eq((unsigned)p[k], 0,
"a0ialloc(zero=true) byte %zu of %zu not zero",
k, size);
}
a0idalloc(p, /* is_internal */ true);
}
/* zero=false: just must not crash and must return non-NULL. */
void *q = a0ialloc(64, /* zero */ false, /* is_internal */ true);
expect_ptr_not_null(q, "Unexpected a0ialloc(zero=false) failure");
a0idalloc(q, /* is_internal */ true);
}
TEST_END
TEST_BEGIN(test_a0_ialloc_internal_flag) {
void *p_internal = a0ialloc(64, false, /* is_internal */ true);
expect_ptr_not_null(p_internal, "a0ialloc(is_internal=true) failed");
a0idalloc(p_internal, /* is_internal */ true);
void *p_external = a0ialloc(64, false, /* is_internal */ false);
expect_ptr_not_null(p_external, "a0ialloc(is_internal=false) failed");
a0idalloc(p_external, /* is_internal */ false);
}
TEST_END
int
main(void) {
return test_no_malloc_init(test_a0, test_a0_multi_sizes,
test_a0_ialloc_zero, test_a0_ialloc_internal_flag);
}