3 #include "silcruntime.h"
11 static SilcCompareValue 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,
19 return SILC_COMPARE_GREATER_THAN;
21 return SILC_COMPARE_LESS_THAN;
22 return SILC_COMPARE_EQUAL_TO;
25 int main(int argc, char **argv)
27 SilcBool success = FALSE;
29 struct foo *f, *f1, *f2, *f3, *f4, *f5, *f6, *f7;
31 if (argc > 1 && !strcmp(argv[1], "-d")) {
33 silc_log_debug_hexdump(TRUE);
34 silc_log_set_debug_string("*list*,*errno*");
37 silc_list_init_prev(list, struct foo, next, prev);
38 f1 = silc_calloc(1, sizeof(*f1));
42 f2 = silc_calloc(1, sizeof(*f2));
46 f3 = silc_calloc(1, sizeof(*f3));
50 f4 = silc_calloc(1, sizeof(*f4));
54 f5 = silc_calloc(1, sizeof(*f4));
58 f6 = silc_calloc(1, sizeof(*f4));
62 f7 = silc_calloc(1, sizeof(*f4));
67 SILC_LOG_DEBUG(("Add one entry"));
68 silc_list_add(list, f1);
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,
74 SILC_LOG_DEBUG(("Delete the entry"));
75 silc_list_del(list, f1);
76 silc_list_start(list);
77 while ((f = silc_list_get(list)) != SILC_LIST_END)
79 SILC_LOG_DEBUG(("head=%p", list.head));
80 SILC_LOG_DEBUG(("Re-add the entry"));
81 silc_list_add(list, f1);
82 silc_list_start(list);
83 while ((f = silc_list_get(list)) != SILC_LIST_END) {
84 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
87 SILC_LOG_DEBUG(("Delete the entry"));
88 silc_list_del(list, f1);
89 silc_list_start(list);
90 while ((f = silc_list_get(list)) != SILC_LIST_END)
93 SILC_LOG_DEBUG(("insert f4=%p at head"));
94 silc_list_insert(list, NULL, f4);
95 silc_list_start(list);
96 while ((f = silc_list_get(list)) != SILC_LIST_END) {
97 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
101 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
102 silc_list_del(list, f4);
104 SILC_LOG_DEBUG(("Add f1, f2, f3"));
105 silc_list_add(list, f1);
106 silc_list_add(list, f2);
107 silc_list_add(list, f3);
109 SILC_LOG_DEBUG(("f1=%p", f1));
110 SILC_LOG_DEBUG(("f2=%p", f2));
111 SILC_LOG_DEBUG(("f3=%p", f3));
113 silc_list_start(list);
114 while ((f = silc_list_get(list)) != SILC_LIST_END) {
115 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
119 SILC_LOG_DEBUG(("insert f4=%p between f1=%p and f2=%p", f4, f1, f2));
120 silc_list_insert(list, f1, f4);
121 silc_list_start(list);
122 while ((f = silc_list_get(list)) != SILC_LIST_END) {
123 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
127 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
128 silc_list_del(list, f4);
130 SILC_LOG_DEBUG(("insert f4=%p between f3=%p and tail", f4, f3));
131 silc_list_insert(list, f3, f4);
132 silc_list_start(list);
133 while ((f = silc_list_get(list)) != SILC_LIST_END) {
134 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
138 SILC_LOG_DEBUG(("Deleting f4=%p", f4));
139 silc_list_del(list, f4);
141 SILC_LOG_DEBUG(("insert f4=%p at head"));
142 silc_list_insert(list, NULL, f4);
143 silc_list_start(list);
144 while ((f = silc_list_get(list)) != SILC_LIST_END) {
145 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
149 silc_list_start(list);
150 silc_list_del(list, f1);
151 while ((f = silc_list_get(list)) != SILC_LIST_END) {
152 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
155 silc_list_del(list, f3);
156 while ((f = silc_list_get(list)) != SILC_LIST_END) {
157 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
160 silc_list_del(list, f2);
161 while ((f = silc_list_get(list)) != SILC_LIST_END) {
162 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
166 silc_list_add(list, f1);
167 silc_list_add(list, f2);
168 silc_list_add(list, f3);
170 silc_list_start(list);
171 while ((f = silc_list_get(list)) != SILC_LIST_END) {
172 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
176 silc_list_del(list, f2);
178 silc_list_start(list);
179 while ((f = silc_list_get(list)) != SILC_LIST_END) {
180 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
184 while ((f = silc_list_pop(list)) != SILC_LIST_END) {
185 SILC_LOG_DEBUG(("POPPED entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
188 if (silc_list_count(list))
192 silc_list_init_prev(list, struct foo, next, prev);
193 silc_list_add(list, f2);
194 silc_list_add(list, f7);
195 silc_list_add(list, f4);
196 silc_list_add(list, f6);
197 silc_list_add(list, f5);
198 silc_list_add(list, f1);
199 silc_list_add(list, f3);
201 SILC_LOG_DEBUG(("Unsorted list"));
202 silc_list_start(list);
203 while ((f = silc_list_get(list)) != SILC_LIST_END)
204 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
207 SILC_LOG_DEBUG(("Sorting"));
208 silc_list_sort(list, compare, NULL);
210 SILC_LOG_DEBUG(("Sorted list"));
211 silc_list_start(list);
212 while ((f = silc_list_get(list)) != SILC_LIST_END)
213 SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next,
219 SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
220 fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");