X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Ftests%2Ftest_silclist.c;h=f0783f37473774c858a1b01a22332c6bd07a14b2;hb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;hp=93aad06eba620f2138edd6d0a3d5bfebc7cb6ee3;hpb=d1e71f42379e8b5cd0748a7aeae8561b02cfe53d;p=silc.git diff --git a/lib/silcutil/tests/test_silclist.c b/lib/silcutil/tests/test_silclist.c index 93aad06e..f0783f37 100644 --- a/lib/silcutil/tests/test_silclist.c +++ b/lib/silcutil/tests/test_silclist.c @@ -1,25 +1,26 @@ /* SilcList tests */ -#include "silcincludes.h" +#include "silc.h" struct foo { int i; struct foo *next; + struct foo *prev; }; int main(int argc, char **argv) { - bool success = FALSE; + SilcBool 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_set_debug_string("*list*"); + silc_log_debug(TRUE); + silc_log_debug_hexdump(TRUE); + silc_log_set_debug_string("*list*,*errno*"); } - 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,49 @@ 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(("Add one entry")); + silc_list_add(list, f1); + 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(("Delete the entry")); + silc_list_del(list, f1); + silc_list_start(list); + while ((f = silc_list_get(list)) != SILC_LIST_END) + goto err; + SILC_LOG_DEBUG(("head=%p", list.head)); + SILC_LOG_DEBUG(("Re-add the entry")); + silc_list_add(list, f1); + 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(("Delete the entry")); + silc_list_del(list, f1); + silc_list_start(list); + while ((f = silc_list_get(list)) != SILC_LIST_END) + goto err; + + 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 +86,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 +143,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;