Initial code commit for Toolkit 1.1.
[silc.git] / lib / silcutil / tests / test_silclist.c
index 93aad06eba620f2138edd6d0a3d5bfebc7cb6ee3..d8ba271525bfc5b641d3771d6564a0cd32deffa5 100644 (file)
@@ -5,21 +5,22 @@
 struct foo {
   int i;
   struct foo *next;
+  struct foo *prev;
 };
 
 int main(int argc, char **argv)
 {
   bool success = FALSE;
   SilcList list;
-  struct foo *f, *f1, *f2, *f3;
+  struct foo *f, *f1, *f2, *f3, *f4;
 
   if (argc > 1 && !strcmp(argv[1], "-d")) {
-    silc_debug = 1;
-    silc_debug_hexdump = 1;
+    silc_log_debug(TRUE);
+    silc_log_debug_hexdump(TRUE);
     silc_log_set_debug_string("*list*");
   }
 
-  silc_list_init(list, struct foo, next);
+  silc_list_init_prev(list, struct foo, next, prev);
   f1 = silc_calloc(1, sizeof(*f1));
   if (!f1)
     goto err;
@@ -32,7 +33,23 @@ int main(int argc, char **argv)
   if (!f3)
     goto err;
   f3->i = 3;
+  f4 = silc_calloc(1, sizeof(*f4));
+  if (!f4)
+    goto err;
+  f4->i = 4;
+
+  SILC_LOG_DEBUG(("insert f4=%p at head"));
+  silc_list_insert(list, NULL, f4);
+  silc_list_start(list);
+  while ((f = silc_list_get(list)) != SILC_LIST_END) {
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
+  }
 
+  SILC_LOG_DEBUG(("Deleting f4=%p", f4));
+  silc_list_del(list, f4);
+
+  SILC_LOG_DEBUG(("Add f1, f2, f3"));
   silc_list_add(list, f1);
   silc_list_add(list, f2);
   silc_list_add(list, f3);
@@ -43,21 +60,55 @@ int main(int argc, char **argv)
 
   silc_list_start(list);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
+  }
+
+  SILC_LOG_DEBUG(("insert f4=%p between f1=%p and f2=%p", f4, f1, f2));
+  silc_list_insert(list, f1, f4);
+  silc_list_start(list);
+  while ((f = silc_list_get(list)) != SILC_LIST_END) {
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
+  }
+
+  SILC_LOG_DEBUG(("Deleting f4=%p", f4));
+  silc_list_del(list, f4);
+
+  SILC_LOG_DEBUG(("insert f4=%p between f3=%p and tail", f4, f3));
+  silc_list_insert(list, f3, f4);
+  silc_list_start(list);
+  while ((f = silc_list_get(list)) != SILC_LIST_END) {
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
+  }
+
+  SILC_LOG_DEBUG(("Deleting f4=%p", f4));
+  silc_list_del(list, f4);
+
+  SILC_LOG_DEBUG(("insert f4=%p at head"));
+  silc_list_insert(list, NULL, f4);
+  silc_list_start(list);
+  while ((f = silc_list_get(list)) != SILC_LIST_END) {
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
 
   silc_list_start(list);
   silc_list_del(list, f1);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
   silc_list_del(list, f3);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
   silc_list_del(list, f2);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
 
   silc_list_add(list, f1);
@@ -66,14 +117,16 @@ int main(int argc, char **argv)
 
   silc_list_start(list);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
 
   silc_list_del(list, f2);
 
   silc_list_start(list);
   while ((f = silc_list_get(list)) != SILC_LIST_END) {
-    SILC_LOG_DEBUG(("entry %d, %p, next=%p", f->i, f, f->next));
+    SILC_LOG_DEBUG(("entry %d, %p, next=%p, prev=%p", f->i, f, f->next, 
+                  f->prev));
   }
 
   success = TRUE;