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