Add rallocx() test of both alignment and zeroing.

This commit is contained in:
Jason Evans 2013-12-16 13:37:21 -08:00
parent 5fbad0902b
commit e935c07e00

View File

@ -133,27 +133,39 @@ TEST_BEGIN(test_align)
} }
TEST_END TEST_END
TEST_BEGIN(test_lg_align) TEST_BEGIN(test_lg_align_and_zero)
{ {
void *p, *q; void *p, *q;
size_t lg_align; size_t lg_align, sz;
#define MAX_LG_ALIGN 29 #define MAX_LG_ALIGN 29
#define MAX_VALIDATE (ZU(1) << 22)
lg_align = ZU(0); lg_align = ZU(0);
p = mallocx(1, MALLOCX_LG_ALIGN(lg_align)); p = mallocx(1, MALLOCX_LG_ALIGN(lg_align)|MALLOCX_ZERO);
assert_ptr_not_null(p, "Unexpected mallocx() error"); assert_ptr_not_null(p, "Unexpected mallocx() error");
for (lg_align++; lg_align <= MAX_LG_ALIGN; lg_align++) { for (lg_align++; lg_align <= MAX_LG_ALIGN; lg_align++) {
q = rallocx(p, 1, MALLOCX_LG_ALIGN(lg_align)); q = rallocx(p, 1, MALLOCX_LG_ALIGN(lg_align)|MALLOCX_ZERO);
assert_ptr_not_null(q, assert_ptr_not_null(q,
"Unexpected rallocx() error for lg_align=%zu", lg_align); "Unexpected rallocx() error for lg_align=%zu", lg_align);
assert_ptr_null( assert_ptr_null(
(void *)((uintptr_t)q & ((ZU(1) << lg_align)-1)), (void *)((uintptr_t)q & ((ZU(1) << lg_align)-1)),
"%p inadequately aligned for lg_align=%zu", "%p inadequately aligned for lg_align=%zu",
q, lg_align); q, lg_align);
sz = sallocx(q, 0);
if ((sz << 1) <= MAX_VALIDATE) {
assert_false(validate_fill(q, 0, 0, sz),
"Expected zeroed memory");
} else {
assert_false(validate_fill(q, 0, 0, MAX_VALIDATE),
"Expected zeroed memory");
assert_false(validate_fill(q+sz-MAX_VALIDATE, 0, 0,
MAX_VALIDATE), "Expected zeroed memory");
}
p = q; p = q;
} }
dallocx(p, 0); dallocx(p, 0);
#undef MAX_VALIDATE
#undef MAX_LG_ALIGN #undef MAX_LG_ALIGN
} }
TEST_END TEST_END
@ -166,5 +178,5 @@ main(void)
test_grow_and_shrink, test_grow_and_shrink,
test_zero, test_zero,
test_align, test_align,
test_lg_align)); test_lg_align_and_zero));
} }