Added SILC Server library.
[silc.git] / lib / silcutil / tests / test_silclist.c
1 /* SilcList tests */
2
3 #include "silc.h"
4
5 struct foo {
6   int i;
7   struct foo *next;
8   struct foo *prev;
9 };
10
11 int main(int argc, char **argv)
12 {
13   SilcBool success = FALSE;
14   SilcList list;
15   struct foo *f, *f1, *f2, *f3, *f4;
16
17   if (argc > 1 && !strcmp(argv[1], "-d")) {
18     silc_log_debug(TRUE);
19     silc_log_debug_hexdump(TRUE);
20     silc_log_set_debug_string("*list*");
21   }
22
23   silc_list_init_prev(list, struct foo, next, prev);
24   f1 = silc_calloc(1, sizeof(*f1));
25   if (!f1)
26     goto err;
27   f1->i = 1;
28   f2 = silc_calloc(1, sizeof(*f2));
29   if (!f2)
30     goto err;
31   f2->i = 2;
32   f3 = silc_calloc(1, sizeof(*f3));
33   if (!f3)
34     goto err;
35   f3->i = 3;
36   f4 = silc_calloc(1, sizeof(*f4));
37   if (!f4)
38     goto err;
39   f4->i = 4;
40
41   SILC_LOG_DEBUG(("insert f4=%p at head"));
42   silc_list_insert(list, NULL, f4);
43   silc_list_start(list);
44   while ((f = silc_list_get(list)) != SILC_LIST_END) {
45     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
46                    f->prev));
47   }
48
49   SILC_LOG_DEBUG(("Deleting f4=%p", f4));
50   silc_list_del(list, f4);
51
52   SILC_LOG_DEBUG(("Add f1, f2, f3"));
53   silc_list_add(list, f1);
54   silc_list_add(list, f2);
55   silc_list_add(list, f3);
56
57   SILC_LOG_DEBUG(("f1=%p", f1));
58   SILC_LOG_DEBUG(("f2=%p", f2));
59   SILC_LOG_DEBUG(("f3=%p", f3));
60
61   silc_list_start(list);
62   while ((f = silc_list_get(list)) != SILC_LIST_END) {
63     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
64                    f->prev));
65   }
66
67   SILC_LOG_DEBUG(("insert f4=%p between f1=%p and f2=%p", f4, f1, f2));
68   silc_list_insert(list, f1, f4);
69   silc_list_start(list);
70   while ((f = silc_list_get(list)) != SILC_LIST_END) {
71     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
72                    f->prev));
73   }
74
75   SILC_LOG_DEBUG(("Deleting f4=%p", f4));
76   silc_list_del(list, f4);
77
78   SILC_LOG_DEBUG(("insert f4=%p between f3=%p and tail", f4, f3));
79   silc_list_insert(list, f3, f4);
80   silc_list_start(list);
81   while ((f = silc_list_get(list)) != SILC_LIST_END) {
82     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
83                    f->prev));
84   }
85
86   SILC_LOG_DEBUG(("Deleting f4=%p", f4));
87   silc_list_del(list, f4);
88
89   SILC_LOG_DEBUG(("insert f4=%p at head"));
90   silc_list_insert(list, NULL, f4);
91   silc_list_start(list);
92   while ((f = silc_list_get(list)) != SILC_LIST_END) {
93     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
94                    f->prev));
95   }
96
97   silc_list_start(list);
98   silc_list_del(list, f1);
99   while ((f = silc_list_get(list)) != SILC_LIST_END) {
100     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
101                    f->prev));
102   }
103   silc_list_del(list, f3);
104   while ((f = silc_list_get(list)) != SILC_LIST_END) {
105     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
106                    f->prev));
107   }
108   silc_list_del(list, f2);
109   while ((f = silc_list_get(list)) != SILC_LIST_END) {
110     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
111                    f->prev));
112   }
113
114   silc_list_add(list, f1);
115   silc_list_add(list, f2);
116   silc_list_add(list, f3);
117
118   silc_list_start(list);
119   while ((f = silc_list_get(list)) != SILC_LIST_END) {
120     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
121                    f->prev));
122   }
123
124   silc_list_del(list, f2);
125
126   silc_list_start(list);
127   while ((f = silc_list_get(list)) != SILC_LIST_END) {
128     SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
129                    f->prev));
130   }
131
132   success = TRUE;
133
134  err:
135   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
136   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
137
138   return success;
139 }