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