183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris#include "test/jemalloc_test.h" 283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris#define MAXALIGN (((size_t)1) << 25) 483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris#define NITER 4 583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher FerrisTEST_BEGIN(test_basic) 783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris{ 883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris void *ptr = mallocx(64, 0); 983e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris sdallocx(ptr, 64, 0); 1083e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris} 1183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher FerrisTEST_END 1283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 1383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher FerrisTEST_BEGIN(test_alignment_and_size) 1483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris{ 1583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris size_t nsz, sz, alignment, total; 1683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris unsigned i; 1783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris void *ps[NITER]; 1883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 1983e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris for (i = 0; i < NITER; i++) 2083e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris ps[i] = NULL; 2183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 2283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris for (alignment = 8; 2383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris alignment <= MAXALIGN; 2483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris alignment <<= 1) { 2583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris total = 0; 2683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris for (sz = 1; 2783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris sz < 3 * alignment && sz < (1U << 31); 2883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) { 2983e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris for (i = 0; i < NITER; i++) { 3083e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris nsz = nallocx(sz, MALLOCX_ALIGN(alignment) | 3183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris MALLOCX_ZERO); 3283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris ps[i] = mallocx(sz, MALLOCX_ALIGN(alignment) | 3383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris MALLOCX_ZERO); 3483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris total += nsz; 3583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris if (total >= (MAXALIGN << 1)) 3683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris break; 3783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris } 3883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris for (i = 0; i < NITER; i++) { 3983e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris if (ps[i] != NULL) { 4083e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris sdallocx(ps[i], sz, 4183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris MALLOCX_ALIGN(alignment)); 4283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris ps[i] = NULL; 4383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris } 4483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris } 4583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris } 4683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris } 4783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris} 4883e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher FerrisTEST_END 4983e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 5083e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferrisint 5183e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferrismain(void) 5283e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris{ 5383e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris 5483e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris return (test( 5583e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris test_basic, 5683e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris test_alignment_and_size)); 5783e5767ee9a8c68150cca06ae0d27a13ba4fcaf8Christopher Ferris} 58