Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
6eda00694710814c8e273008287899345810cfd9
[simgrid.git] / teshsuite / xbt / mallocator / mallocator_test.c
1 #include "xbt/mallocator.h"
2 #include "xbt.h"
3
4 typedef struct element {
5   int value;
6 } s_element_t;
7 typedef struct element *element_t;
8
9 element_t base_mallocator;
10
11 static void *element_mallocator_new_f(void)
12 {
13   element_t elem = xbt_new(s_element_t, 1);
14   elem->value = 0;
15   return elem;
16 }
17
18 static void element_mallocator_free_f(void *elem)
19 {
20   xbt_free(elem);
21 }
22
23 #define element_mallocator_reset_f ((void_f_pvoid_t)NULL)
24
25 static void pprint_elems(xbt_dynar_t elems) {
26   unsigned int iter;
27   element_t elem;
28   printf("Elems:");
29   xbt_dynar_foreach(elems, iter, elem) {
30     printf(" (%d,%d)", elem->value, (int)(base_mallocator-elem)/(int)sizeof(int));
31   }
32   printf("\n");
33 }
34
35 int main(int argc, char**argv)
36 {
37   xbt_mallocator_initialization_is_done(1);
38   int i = 0;
39   xbt_mallocator_t mallocator = xbt_mallocator_new(65536,
40                                   element_mallocator_new_f,
41                                   element_mallocator_free_f,
42                                   element_mallocator_reset_f);
43   xbt_dynar_t elems = xbt_dynar_new(sizeof(element_t), NULL);
44   element_t elem = NULL;
45   base_mallocator = xbt_mallocator_get(mallocator);
46
47   for (i=0; i<=10; i++) {
48     elem = xbt_mallocator_get(mallocator);
49     elem->value = i;
50     xbt_dynar_push(elems, &elem);
51   }
52   pprint_elems(elems);
53
54   for (i=0; i<=5; i++) {
55     xbt_dynar_pop(elems, &elem);
56     xbt_mallocator_release(mallocator, elem);
57   }
58   pprint_elems(elems);
59
60   xbt_dynar_remove_at(elems, 2, &elem);
61   xbt_mallocator_release(mallocator, elem);
62   pprint_elems(elems);
63
64   for (i=11; i<=15; i++) {
65     elem = xbt_mallocator_get(mallocator);
66     elem->value = i;
67     xbt_dynar_push(elems, &elem);
68   }
69   pprint_elems(elems);
70
71   return 0;
72 }