7 int main(int argc, char **argv)
9 SilcBool success = FALSE;
10 SilcStack stack, child, child2;
14 if (argc > 1 && !strcmp(argv[1], "-d")) {
16 silc_log_debug_hexdump(TRUE);
18 silc_log_set_debug_string("*stack*");
21 SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)"));
22 stack = silc_stack_alloc(0, NULL);
25 silc_stack_stats(stack);
27 SILC_LOG_DEBUG(("Allocating 2048 bytes from stack"));
28 ptr = silc_smalloc(stack, 2048);
31 silc_stack_stats(stack);
33 SILC_LOG_DEBUG(("Freeing the stack"));
34 silc_stack_free(stack);
36 SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)"));
37 stack = silc_stack_alloc(0, NULL);
40 silc_stack_stats(stack);
42 SILC_LOG_DEBUG(("Pushing and allocating %d times", NUM_ALLS));
43 if (!silc_stack_push(stack, NULL))
45 for (i = 0; i < NUM_ALLS; i++) {
46 ptr2 = silc_smalloc(stack, (i + 1) * 7);
50 silc_stack_stats(stack);
51 silc_stack_pop(stack);
52 SILC_LOG_DEBUG(("Popping"));
53 silc_stack_stats(stack);
55 SILC_LOG_DEBUG(("Pushing and allocating %d times", NUM_ALLS));
56 if (!silc_stack_push(stack, NULL))
58 for (i = 0; i < NUM_ALLS; i++) {
59 ptr2 = silc_smalloc(stack, (i + 1) * 7);
63 silc_stack_stats(stack);
64 silc_stack_pop(stack);
65 SILC_LOG_DEBUG(("Popping"));
66 silc_stack_stats(stack);
68 SILC_LOG_DEBUG(("Pushing %d times", NUM_ALLS / 2));
69 for (i = 0; i < NUM_ALLS / 2; i++) {
70 if (!silc_stack_push(stack, NULL))
72 ptr2 = silc_smalloc(stack, (i + 1) * 7);
76 silc_stack_stats(stack);
77 SILC_LOG_DEBUG(("Popping %d times", NUM_ALLS / 2));
78 for (i = 0; i < NUM_ALLS / 2; i++)
79 silc_stack_pop(stack);
80 silc_stack_stats(stack);
82 SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10));
84 if (!silc_stack_push(stack, NULL))
86 for (i = 0; i < NUM_ALLS / 10; i++) {
87 ptr2 = silc_srealloc(stack, (i * 7), ptr2, (i + 1) * 7);
91 silc_stack_stats(stack);
92 silc_stack_pop(stack);
93 SILC_LOG_DEBUG(("Popping"));
94 silc_stack_stats(stack);
96 SILC_LOG_DEBUG(("Creating child stack"));
97 child = silc_stack_alloc(8192, stack);
100 SILC_LOG_DEBUG(("Pushing %d times", NUM_ALLS / 2));
101 for (i = 0; i < NUM_ALLS / 2; i++) {
102 if (!silc_stack_push(child, NULL))
104 ptr2 = silc_smalloc(child, (i + 1) * 7);
108 silc_stack_stats(child);
109 SILC_LOG_DEBUG(("Popping %d times", NUM_ALLS / 2));
110 for (i = 0; i < NUM_ALLS / 2; i++)
111 silc_stack_pop(child);
112 silc_stack_stats(child);
114 SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10));
116 if (!silc_stack_push(child, NULL))
118 for (i = 0; i < NUM_ALLS / 10; i++) {
119 ptr2 = silc_srealloc(child, (i * 7), ptr2, (i + 1) * 7);
123 ptr = silc_smalloc(child, 100000);
124 silc_stack_stats(child);
125 silc_stack_pop(child);
126 SILC_LOG_DEBUG(("Popping"));
127 silc_stack_stats(child);
128 silc_stack_stats(stack);
129 silc_stack_free(child);
130 silc_stack_stats(stack);
132 SILC_LOG_DEBUG(("Creating child stack"));
133 child = silc_stack_alloc(8192, stack);
136 SILC_LOG_DEBUG(("Pushing %d times", NUM_ALLS / 10));
137 for (i = 0; i < NUM_ALLS / 10; i++) {
138 if (!silc_stack_push(child, NULL))
140 ptr2 = silc_smalloc(child, (i + 1) * 7);
144 silc_stack_stats(child);
145 SILC_LOG_DEBUG(("Popping %d times", NUM_ALLS / 10));
146 for (i = 0; i < NUM_ALLS / 10; i++)
147 silc_stack_pop(child);
148 silc_stack_stats(child);
150 SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10));
152 if (!silc_stack_push(child, NULL))
154 for (i = 0; i < NUM_ALLS / 10; i++) {
155 ptr2 = silc_srealloc(child, (i * 7), ptr2, (i + 1) * 7);
159 SILC_LOG_DEBUG(("Allocate child from child"));
160 child2 = silc_stack_alloc(0, child);
161 ptr = silc_smalloc(child2, 500000);
162 silc_stack_stats(child2);
163 silc_stack_free(child2);
164 silc_stack_stats(child);
165 silc_stack_pop(child);
166 SILC_LOG_DEBUG(("Popping"));
167 silc_stack_stats(child);
168 silc_stack_stats(stack);
169 silc_stack_free(child);
170 silc_stack_stats(stack);
172 SILC_LOG_DEBUG(("Current alignment: %d", silc_stack_get_alignment(stack)));
173 SILC_LOG_DEBUG(("Set alignemtn to 16"));
174 silc_stack_set_alignment(stack, 16);
175 SILC_LOG_DEBUG(("Current alignment: %d", silc_stack_get_alignment(stack)));
176 SILC_LOG_DEBUG(("Allocate 1 byte"));
177 ptr = silc_smalloc(stack, 1);
178 SILC_LOG_DEBUG(("Allocate 1 byte, check alignment"));
179 ptr2 = silc_smalloc(stack, 1);
180 if (ptr2 - ptr < 16) {
181 SILC_LOG_DEBUG(("Bad alignment"));
184 SILC_LOG_DEBUG(("Alignment (ptr, ptr2) is %d", ptr2 - ptr));
185 SILC_LOG_DEBUG(("Allocate 1 byte, check alignment"));
186 ptr2 = silc_smalloc(stack, 1);
187 if (ptr2 - ptr < 32) {
188 SILC_LOG_DEBUG(("Bad alignment"));
191 SILC_LOG_DEBUG(("Alignment (ptr, ptr2) is %d", ptr2 - ptr));
193 SILC_LOG_DEBUG(("Freeing the stack"));
194 silc_stack_free(stack);
199 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
200 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");