1 #include "test/jemalloc_test.h"
2 
3 static void
test_zero(size_t sz_min,size_t sz_max)4 test_zero(size_t sz_min, size_t sz_max) {
5 	uint8_t *s;
6 	size_t sz_prev, sz, i;
7 #define MAGIC	((uint8_t)0x61)
8 
9 	sz_prev = 0;
10 	s = (uint8_t *)mallocx(sz_min, 0);
11 	assert_ptr_not_null((void *)s, "Unexpected mallocx() failure");
12 
13 	for (sz = sallocx(s, 0); sz <= sz_max;
14 	    sz_prev = sz, sz = sallocx(s, 0)) {
15 		if (sz_prev > 0) {
16 			assert_u_eq(s[0], MAGIC,
17 			    "Previously allocated byte %zu/%zu is corrupted",
18 			    ZU(0), sz_prev);
19 			assert_u_eq(s[sz_prev-1], MAGIC,
20 			    "Previously allocated byte %zu/%zu is corrupted",
21 			    sz_prev-1, sz_prev);
22 		}
23 
24 		for (i = sz_prev; i < sz; i++) {
25 			assert_u_eq(s[i], 0x0,
26 			    "Newly allocated byte %zu/%zu isn't zero-filled",
27 			    i, sz);
28 			s[i] = MAGIC;
29 		}
30 
31 		if (xallocx(s, sz+1, 0, 0) == sz) {
32 			s = (uint8_t *)rallocx(s, sz+1, 0);
33 			assert_ptr_not_null((void *)s,
34 			    "Unexpected rallocx() failure");
35 		}
36 	}
37 
38 	dallocx(s, 0);
39 #undef MAGIC
40 }
41 
TEST_BEGIN(test_zero_small)42 TEST_BEGIN(test_zero_small) {
43 	test_skip_if(!config_fill);
44 	test_zero(1, SMALL_MAXCLASS-1);
45 }
46 TEST_END
47 
TEST_BEGIN(test_zero_large)48 TEST_BEGIN(test_zero_large) {
49 	test_skip_if(!config_fill);
50 	test_zero(SMALL_MAXCLASS+1, (1U << (LG_LARGE_MINCLASS+1)));
51 }
52 TEST_END
53 
54 int
main(void)55 main(void) {
56 	return test(
57 	    test_zero_small,
58 	    test_zero_large);
59 }
60