xref: /netbsd-src/external/bsd/jemalloc.old/dist/test/integration/sdallocx.c (revision 8e33eff89e26cf71871ead62f0d5063e1313c33a)
1*8e33eff8Schristos #include "test/jemalloc_test.h"
2*8e33eff8Schristos 
3*8e33eff8Schristos #define MAXALIGN (((size_t)1) << 22)
4*8e33eff8Schristos #define NITER 3
5*8e33eff8Schristos 
6*8e33eff8Schristos TEST_BEGIN(test_basic) {
7*8e33eff8Schristos 	void *ptr = mallocx(64, 0);
8*8e33eff8Schristos 	sdallocx(ptr, 64, 0);
9*8e33eff8Schristos }
10*8e33eff8Schristos TEST_END
11*8e33eff8Schristos 
12*8e33eff8Schristos TEST_BEGIN(test_alignment_and_size) {
13*8e33eff8Schristos 	size_t nsz, sz, alignment, total;
14*8e33eff8Schristos 	unsigned i;
15*8e33eff8Schristos 	void *ps[NITER];
16*8e33eff8Schristos 
17*8e33eff8Schristos 	for (i = 0; i < NITER; i++) {
18*8e33eff8Schristos 		ps[i] = NULL;
19*8e33eff8Schristos 	}
20*8e33eff8Schristos 
21*8e33eff8Schristos 	for (alignment = 8;
22*8e33eff8Schristos 	    alignment <= MAXALIGN;
23*8e33eff8Schristos 	    alignment <<= 1) {
24*8e33eff8Schristos 		total = 0;
25*8e33eff8Schristos 		for (sz = 1;
26*8e33eff8Schristos 		    sz < 3 * alignment && sz < (1U << 31);
27*8e33eff8Schristos 		    sz += (alignment >> (LG_SIZEOF_PTR-1)) - 1) {
28*8e33eff8Schristos 			for (i = 0; i < NITER; i++) {
29*8e33eff8Schristos 				nsz = nallocx(sz, MALLOCX_ALIGN(alignment) |
30*8e33eff8Schristos 				    MALLOCX_ZERO);
31*8e33eff8Schristos 				ps[i] = mallocx(sz, MALLOCX_ALIGN(alignment) |
32*8e33eff8Schristos 				    MALLOCX_ZERO);
33*8e33eff8Schristos 				total += nsz;
34*8e33eff8Schristos 				if (total >= (MAXALIGN << 1)) {
35*8e33eff8Schristos 					break;
36*8e33eff8Schristos 				}
37*8e33eff8Schristos 			}
38*8e33eff8Schristos 			for (i = 0; i < NITER; i++) {
39*8e33eff8Schristos 				if (ps[i] != NULL) {
40*8e33eff8Schristos 					sdallocx(ps[i], sz,
41*8e33eff8Schristos 					    MALLOCX_ALIGN(alignment));
42*8e33eff8Schristos 					ps[i] = NULL;
43*8e33eff8Schristos 				}
44*8e33eff8Schristos 			}
45*8e33eff8Schristos 		}
46*8e33eff8Schristos 	}
47*8e33eff8Schristos }
48*8e33eff8Schristos TEST_END
49*8e33eff8Schristos 
50*8e33eff8Schristos int
51*8e33eff8Schristos main(void) {
52*8e33eff8Schristos 	return test_no_reentrancy(
53*8e33eff8Schristos 	    test_basic,
54*8e33eff8Schristos 	    test_alignment_and_size);
55*8e33eff8Schristos }
56