]>
Commit | Line | Data |
---|---|---|
84832e05 UD |
1 | /* Test case by Alexandre Duret-Lutz <duret_g@epita.fr>. */ |
2 | #include <obstack.h> | |
3 | #include <stdint.h> | |
4 | #include <stdio.h> | |
5 | #include <stdlib.h> | |
6 | ||
7 | #define obstack_chunk_alloc verbose_malloc | |
8 | #define obstack_chunk_free verbose_free | |
9 | #define ALIGN_BOUNDARY 64 | |
10 | #define ALIGN_MASK (ALIGN_BOUNDARY - 1) | |
11 | #define OBJECT_SIZE 1000 | |
12 | ||
13 | static void * | |
14 | verbose_malloc (size_t size) | |
15 | { | |
16 | void *buf = malloc (size); | |
59553897 | 17 | printf ("malloc (%zu) => %p\n", size, buf); |
84832e05 UD |
18 | return buf; |
19 | } | |
20 | ||
21 | static void | |
22 | verbose_free (void *buf) | |
23 | { | |
24 | free (buf); | |
25 | printf ("free (%p)\n", buf); | |
26 | } | |
27 | ||
29955b5d AS |
28 | static int |
29 | do_test (void) | |
84832e05 | 30 | { |
84832e05 | 31 | int result = 0; |
a6027576 | 32 | int align = 2; |
84832e05 | 33 | |
a6027576 | 34 | while (align <= 64) |
84832e05 | 35 | { |
a6027576 UD |
36 | struct obstack obs; |
37 | int i; | |
38 | int align_mask = align - 1; | |
39 | ||
40 | printf ("\n Alignment mask: %d\n", align_mask); | |
41 | ||
42 | obstack_init (&obs); | |
43 | obstack_alignment_mask (&obs) = align_mask; | |
44 | /* finish an empty object to take alignment into account */ | |
45 | obstack_finish (&obs); | |
46 | ||
47 | /* let's allocate some objects and print their addresses */ | |
48 | for (i = 15; i > 0; --i) | |
49 | { | |
50 | void *obj = obstack_alloc (&obs, OBJECT_SIZE); | |
51 | ||
52 | printf ("obstack_alloc (%u) => %p \t%s\n", OBJECT_SIZE, obj, | |
53 | ((uintptr_t) obj & align_mask) ? "(not aligned)" : ""); | |
54 | result |= ((uintptr_t) obj & align_mask) != 0; | |
55 | } | |
84832e05 | 56 | |
a6027576 UD |
57 | /* clean up */ |
58 | obstack_free (&obs, 0); | |
84832e05 | 59 | |
a6027576 UD |
60 | align <<= 1; |
61 | } | |
84832e05 UD |
62 | |
63 | return result; | |
64 | } | |
29955b5d AS |
65 | |
66 | #define TEST_FUNCTION do_test () | |
67 | #include "../test-skeleton.c" |