3 #include "silcruntime.h"
11 static int compare(void *e1, void *e2, void *context)
13 struct foo *ee1 = e1, *ee2 = e2;
14 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", ee1->i, ee1, ee1->next,
16 SILC_LOG_DEBUG(("> entry %d, %p, next=%p, prev=%p", ee2->i, ee2, ee2->next,
18 return ee1->i - ee2->i;
21 int main(int argc, char **argv)
23 SilcBool success = FALSE;
25 struct foo *f, *f1, *f2, *f3, *f4, *f5, *f6, *f7;
27 if (argc > 1 && !strcmp(argv[1], "-d")) {
29 silc_log_debug_hexdump(TRUE);
30 silc_log_set_debug_string("*list*,*errno*");
33 silc_list_init_prev(list, struct foo, next, prev);
34 f1 = silc_calloc(1, sizeof(*f1));
38 f2 = silc_calloc(1, sizeof(*f2));
42 f3 = silc_calloc(1, sizeof(*f3));
46 f4 = silc_calloc(1, sizeof(*f4));
50 f5 = silc_calloc(1, sizeof(*f4));
54 f6 = silc_calloc(1, sizeof(*f4));
58 f7 = silc_calloc(1, sizeof(*f4));
63 SILC_LOG_DEBUG(("Add one entry"));
64 silc_list_add(list, f1);
65 silc_list_start(list);
66 while ((f = silc_list_get(list)) != SILC_LIST_END) {
67 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
70 SILC_LOG_DEBUG(("Delete the entry"));
71 silc_list_del(list, f1);
72 silc_list_start(list);
73 while ((f = silc_list_get(list)) != SILC_LIST_END)
75 SILC_LOG_DEBUG(("head=%p", list.head));
76 SILC_LOG_DEBUG(("Re-add the entry"));
77 silc_list_add(list, f1);
78 silc_list_start(list);
79 while ((f = silc_list_get(list)) != SILC_LIST_END) {
80 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
83 SILC_LOG_DEBUG(("Delete the entry"));
84 silc_list_del(list, f1);
85 silc_list_start(list);
86 while ((f = silc_list_get(list)) != SILC_LIST_END)
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,
97 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
98 silc_list_del(list, f4);
100 SILC_LOG_DEBUG(("Add f1, f2, f3"));
101 silc_list_add(list, f1);
102 silc_list_add(list, f2);
103 silc_list_add(list, f3);
105 SILC_LOG_DEBUG(("f1=%p", f1));
106 SILC_LOG_DEBUG(("f2=%p", f2));
107 SILC_LOG_DEBUG(("f3=%p", f3));
109 silc_list_start(list);
110 while ((f = silc_list_get(list)) != SILC_LIST_END) {
111 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
115 SILC_LOG_DEBUG(("insert f4=%p between f1=%p and f2=%p", f4, f1, f2));
116 silc_list_insert(list, f1, f4);
117 silc_list_start(list);
118 while ((f = silc_list_get(list)) != SILC_LIST_END) {
119 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
123 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
124 silc_list_del(list, f4);
126 SILC_LOG_DEBUG(("insert f4=%p between f3=%p and tail", f4, f3));
127 silc_list_insert(list, f3, f4);
128 silc_list_start(list);
129 while ((f = silc_list_get(list)) != SILC_LIST_END) {
130 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
134 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
135 silc_list_del(list, f4);
137 SILC_LOG_DEBUG(("insert f4=%p at head"));
138 silc_list_insert(list, NULL, f4);
139 silc_list_start(list);
140 while ((f = silc_list_get(list)) != SILC_LIST_END) {
141 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
145 silc_list_start(list);
146 silc_list_del(list, f1);
147 while ((f = silc_list_get(list)) != SILC_LIST_END) {
148 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
151 silc_list_del(list, f3);
152 while ((f = silc_list_get(list)) != SILC_LIST_END) {
153 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
156 silc_list_del(list, f2);
157 while ((f = silc_list_get(list)) != SILC_LIST_END) {
158 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
162 silc_list_add(list, f1);
163 silc_list_add(list, f2);
164 silc_list_add(list, f3);
166 silc_list_start(list);
167 while ((f = silc_list_get(list)) != SILC_LIST_END) {
168 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
172 silc_list_del(list, f2);
174 silc_list_start(list);
175 while ((f = silc_list_get(list)) != SILC_LIST_END) {
176 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
180 while ((f = silc_list_pop(list)) != SILC_LIST_END) {
181 SILC_LOG_DEBUG(("POPPED entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
184 if (silc_list_count(list))
188 silc_list_init_prev(list, struct foo, next, prev);
189 silc_list_add(list, f2);
190 silc_list_add(list, f7);
191 silc_list_add(list, f4);
192 silc_list_add(list, f6);
193 silc_list_add(list, f5);
194 silc_list_add(list, f1);
195 silc_list_add(list, f3);
197 SILC_LOG_DEBUG(("Unsorted list"));
198 silc_list_start(list);
199 while ((f = silc_list_get(list)) != SILC_LIST_END)
200 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
203 SILC_LOG_DEBUG(("Sorting"));
204 silc_list_sort(list, compare, NULL);
206 SILC_LOG_DEBUG(("Sorted list"));
207 silc_list_start(list);
208 while ((f = silc_list_get(list)) != SILC_LIST_END)
209 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
215 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
216 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");