Put main() in test.c and remove it from mpool.c
[eleutheria.git] / malloc / test.c
blob7a089a375bed9eb0b1c401146989ebcc634d1988
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h> /* for time() in srand() */
5 #include "mpool.h"
7 int main(void)
9 mpool_t *mpool;
10 char *p[10000];
11 size_t an = 0, un = 0, ab = 0, ub = 0, me = 0, sp = 0;
12 unsigned int i, j, S;
14 srand(time(NULL));
16 if (mpool_init(&mpool, 23, 3) == MP_ENOMEM) {
17 fprintf(stderr, "Not enough memory\n");
18 exit(EXIT_FAILURE);
21 for (i = 0; i < 10000; i++) {
22 if ((p[i] = mpool_alloc(mpool, S = (1 << ((rand() % 7))))) == NULL)
23 break;
24 else {
25 /*memset(p[i], 0, S);*/;
26 if (rand() % 2 == 0)
27 mpool_free(mpool, p[i]);
31 for (j = 0; j < mpool->nblocks; j++)
32 printf("Block %u has length: %u\n", j, mpool_stat_get_block_length(mpool, j));
35 for (j = 0; j < i; j++)
36 mpool_free(mpool, p[j]);
39 mpool_stat_get_nodes(mpool, &an, &un);
40 mpool_stat_get_bytes(mpool, &ab, &ub);
41 me = mpool_stat_get_merges(mpool);
42 sp = mpool_stat_get_splits(mpool);
43 DPRINTF(("avail nodes = %u\tused nodes = %u\tfree(%%) = %f\n", an, un, 100.0 * an / (an + un)));
44 DPRINTF(("avail bytes = %u\tused bytes = %u\tfree(%%) = %f\n", ab, ub, 100.0 * ab / (ab + ub)));
45 DPRINTF(("splits = %u\tmerges = %u\n", sp, me));
47 mpool_destroy(mpool);
49 return EXIT_SUCCESS;