1 #include "test/jemalloc_test.h" 2 3 static void 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 42 TEST_BEGIN(test_zero_small) { 43 test_skip_if(!config_fill); 44 test_zero(1, SMALL_MAXCLASS-1); 45 } 46 TEST_END 47 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 55 main(void) { 56 return test( 57 test_zero_small, 58 test_zero_large); 59 } 60