Added SILC Server library.
[silc.git] / lib / silcutil / tests / test_silcstack.c
1 /* SilcStack tests */
2
3 #include "silc.h"
4
5 #define NUM_ALLS 300
6
7 int main(int argc, char **argv)
8 {
9   SilcBool success = FALSE;
10   SilcStack stack;
11   void *ptr, *ptr2;
12   int i;
13
14   if (argc > 1 && !strcmp(argv[1], "-d")) {
15     silc_log_debug(TRUE);
16     silc_log_debug_hexdump(TRUE);
17     silc_log_quick(TRUE);
18     silc_log_set_debug_string("*stack*");
19   }
20
21   SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)"));
22   stack = silc_stack_alloc(0);
23   if (!stack)
24     goto err;
25   silc_stack_stats(stack);
26
27   SILC_LOG_DEBUG(("Allocating 2048 bytes from stack"));
28   ptr = silc_smalloc(stack, 2048);
29   if (!ptr)
30     goto err;
31   silc_stack_stats(stack);
32
33   SILC_LOG_DEBUG(("Freeing the stack"));
34   silc_stack_free(stack);
35
36   SILC_LOG_DEBUG(("Allocating stack of default size (1024 bytes)"));
37   stack = silc_stack_alloc(0);
38   if (!stack)
39     goto err;
40   silc_stack_stats(stack);
41
42   SILC_LOG_DEBUG(("Pushing and allocating %d times", NUM_ALLS));
43   if (!silc_stack_push(stack, NULL))
44     goto err;
45   for (i = 0; i < NUM_ALLS; i++) {
46     ptr2 = silc_smalloc(stack, (i + 1) * 7);
47     if (!ptr2)
48       goto err;
49   }
50   silc_stack_stats(stack);
51   silc_stack_pop(stack);
52   SILC_LOG_DEBUG(("Popping"));
53   silc_stack_stats(stack);
54
55   SILC_LOG_DEBUG(("Pushing and allocating %d times", NUM_ALLS));
56   if (!silc_stack_push(stack, NULL))
57     goto err;
58   for (i = 0; i < NUM_ALLS; i++) {
59     ptr2 = silc_smalloc(stack, (i + 1) * 7);
60     if (!ptr2)
61       goto err;
62   }
63   silc_stack_stats(stack);
64   silc_stack_pop(stack);
65   SILC_LOG_DEBUG(("Popping"));
66   silc_stack_stats(stack);
67
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))
71       goto err;
72     ptr2 = silc_smalloc(stack, (i + 1) * 7);
73     if (!ptr2)
74       goto err;
75   }
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);
81
82   SILC_LOG_DEBUG(("Pushing and reallocating %d times", NUM_ALLS / 10));
83   ptr2 = NULL;
84   if (!silc_stack_push(stack, NULL))
85     goto err;
86   for (i = 0; i < NUM_ALLS / 10; i++) {
87     ptr2 = silc_srealloc(stack, (i * 7), ptr2, (i + 1) * 7);
88     if (!ptr2)
89       goto err;
90   }
91   silc_stack_stats(stack);
92   silc_stack_pop(stack);
93   SILC_LOG_DEBUG(("Popping"));
94   silc_stack_stats(stack);
95
96   SILC_LOG_DEBUG(("Freeing the stack"));
97   silc_stack_free(stack);
98
99   success = TRUE;
100
101  err:
102   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
103   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
104
105   return success;
106 }