]> git.proxmox.com Git - rustc.git/blob - src/jemalloc/test/unit/zero.c
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / src / jemalloc / test / unit / zero.c
1 #include "test/jemalloc_test.h"
2
3 #ifdef JEMALLOC_FILL
4 const char *malloc_conf =
5 "abort:false,junk:false,zero:true,redzone:false,quarantine:0";
6 #endif
7
8 static void
9 test_zero(size_t sz_min, size_t sz_max)
10 {
11 char *s;
12 size_t sz_prev, sz, i;
13
14 sz_prev = 0;
15 s = (char *)mallocx(sz_min, 0);
16 assert_ptr_not_null((void *)s, "Unexpected mallocx() failure");
17
18 for (sz = sallocx(s, 0); sz <= sz_max;
19 sz_prev = sz, sz = sallocx(s, 0)) {
20 if (sz_prev > 0) {
21 assert_c_eq(s[0], 'a',
22 "Previously allocated byte %zu/%zu is corrupted",
23 ZU(0), sz_prev);
24 assert_c_eq(s[sz_prev-1], 'a',
25 "Previously allocated byte %zu/%zu is corrupted",
26 sz_prev-1, sz_prev);
27 }
28
29 for (i = sz_prev; i < sz; i++) {
30 assert_c_eq(s[i], 0x0,
31 "Newly allocated byte %zu/%zu isn't zero-filled",
32 i, sz);
33 s[i] = 'a';
34 }
35
36 if (xallocx(s, sz+1, 0, 0) == sz) {
37 s = (char *)rallocx(s, sz+1, 0);
38 assert_ptr_not_null((void *)s,
39 "Unexpected rallocx() failure");
40 }
41 }
42
43 dallocx(s, 0);
44 }
45
46 TEST_BEGIN(test_zero_small)
47 {
48
49 test_skip_if(!config_fill);
50 test_zero(1, SMALL_MAXCLASS-1);
51 }
52 TEST_END
53
54 TEST_BEGIN(test_zero_large)
55 {
56
57 test_skip_if(!config_fill);
58 test_zero(SMALL_MAXCLASS+1, large_maxclass);
59 }
60 TEST_END
61
62 TEST_BEGIN(test_zero_huge)
63 {
64
65 test_skip_if(!config_fill);
66 test_zero(large_maxclass+1, chunksize*2);
67 }
68 TEST_END
69
70 int
71 main(void)
72 {
73
74 return (test(
75 test_zero_small,
76 test_zero_large,
77 test_zero_huge));
78 }