mallocx.c revision a184d3fcdecfaaf694029fb375d023882aea444e
1#include "test/jemalloc_test.h" 2 3#define CHUNK 0x400000 4/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */ 5#define MAXALIGN ((size_t)0x2000000LU) 6#define NITER 4 7 8TEST_BEGIN(test_basic) 9{ 10 size_t nsz, rsz, sz; 11 void *p; 12 13 sz = 42; 14 nsz = nallocx(sz, 0); 15 assert_zu_ne(nsz, 0, "Unexpected nallocx() error"); 16 p = mallocx(sz, 0); 17 assert_ptr_not_null(p, "Unexpected mallocx() error"); 18 rsz = sallocx(p, 0); 19 assert_zu_ge(rsz, sz, "Real size smaller than expected"); 20 assert_zu_eq(nsz, rsz, "nallocx()/sallocx() size mismatch"); 21 dallocx(p, 0); 22 23 p = mallocx(sz, 0); 24 assert_ptr_not_null(p, "Unexpected mallocx() error"); 25 dallocx(p, 0); 26 27 nsz = nallocx(sz, MALLOCX_ZERO); 28 assert_zu_ne(nsz, 0, "Unexpected nallocx() error"); 29 p = mallocx(sz, MALLOCX_ZERO); 30 assert_ptr_not_null(p, "Unexpected mallocx() error"); 31 rsz = sallocx(p, 0); 32 assert_zu_eq(nsz, rsz, "nallocx()/sallocx() rsize mismatch"); 33 dallocx(p, 0); 34} 35TEST_END 36 37TEST_BEGIN(test_alignment_and_size) 38{ 39 size_t nsz, rsz, sz, alignment, total; 40 unsigned i; 41 void *ps[NITER]; 42 43 for (i = 0; i < NITER; i++) 44 ps[i] = NULL; 45 46 for (alignment = 8; 47 alignment <= MAXALIGN; 48 alignment <<= 1) { 49 total = 0; 50 for (sz = 1; 51 sz < 3 * alignment && sz < (1U << 31); 52 sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) { 53 for (i = 0; i < NITER; i++) { 54 nsz = nallocx(sz, MALLOCX_ALIGN(alignment) | 55 MALLOCX_ZERO); 56 assert_zu_ne(nsz, 0, 57 "nallocx() error for alignment=%zu, " 58 "size=%zu (%#zx)", alignment, sz, sz); 59 ps[i] = mallocx(sz, MALLOCX_ALIGN(alignment) | 60 MALLOCX_ZERO); 61 assert_ptr_not_null(ps[i], 62 "mallocx() error for alignment=%zu, " 63 "size=%zu (%#zx)", alignment, sz, sz); 64 rsz = sallocx(ps[i], 0); 65 assert_zu_ge(rsz, sz, 66 "Real size smaller than expected for " 67 "alignment=%zu, size=%zu", alignment, sz); 68 assert_zu_eq(nsz, rsz, 69 "nallocx()/sallocx() size mismatch for " 70 "alignment=%zu, size=%zu", alignment, sz); 71 assert_ptr_null( 72 (void *)((uintptr_t)ps[i] & (alignment-1)), 73 "%p inadequately aligned for" 74 " alignment=%zu, size=%zu", ps[i], 75 alignment, sz); 76 total += rsz; 77 if (total >= (MAXALIGN << 1)) 78 break; 79 } 80 for (i = 0; i < NITER; i++) { 81 if (ps[i] != NULL) { 82 dallocx(ps[i], 0); 83 ps[i] = NULL; 84 } 85 } 86 } 87 } 88} 89TEST_END 90 91int 92main(void) 93{ 94 95 return (test( 96 test_basic, 97 test_alignment_and_size)); 98} 99