X-Git-Url: https://git.librecmc.org/?p=oweals%2Fopkg-lede.git;a=blobdiff_plain;f=tests%2Fopkg_active_list_test.c;h=b6af3b30e78fc86141fafc577febcec46a3fff0c;hp=ec6bec1d7ebace960e9a44f72fc43d2e309d32f0;hb=0d9f9342d4b6071c158351d4c30370ddf36dc7ec;hpb=c4ec4181cf4dc98c580213ef302f4b9faa655592 diff --git a/tests/opkg_active_list_test.c b/tests/opkg_active_list_test.c index ec6bec1..b6af3b3 100644 --- a/tests/opkg_active_list_test.c +++ b/tests/opkg_active_list_test.c @@ -1,28 +1,35 @@ +/* opkg_active_list.c - the opkg package management system -/* -.--A---B----C----D-----E----F - | |__k---L - | |_ N - |__ G ---H ---I---J - |_M |_O + Tick Chen + + Copyright (C) 2008 Openmoko + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. -Then the sequence will be -G M H I O J A B K N L C D E F + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. */ + #include #include +#include #include struct active_test { char *str; struct active_list list; -} __attribute__((packed)); +}; struct active_test *active_test_new(char *str) { struct active_test *ans = (struct active_test *)calloc(1, sizeof(struct active_test)); ans->str = str; - active_list_init(&ans->list); + active_list_init(&ans->list); return ans; } void active_test_add(struct active_list *head, struct active_test *node) { @@ -33,6 +40,17 @@ void active_test_add_depend(struct active_test *A, struct active_test *B) { active_list_add_depend(&A->list, &B->list); } +/* +.--A---B----C----D-----E----F + | |__k---L + | |_ N + |__ G ---H ---I---J + |_M |_O + +Then the sequence will be ++: G M H I O J A B K N L C D E F +-: F E D C L N K B A J O I H M G +*/ void make_list(struct active_list *head) { struct active_test *A = active_test_new("A"); struct active_test *B = active_test_new("B"); @@ -72,10 +90,27 @@ void make_list(struct active_list *head) { active_test_add_depend(A, J); active_test_add_depend(J, O); active_test_add_depend(C, K); - active_test_add_depend(C, L); + active_test_add_depend(C, L); active_test_add_depend(L, N); } +int active_test_compare(const void *a, const void *b) { + struct active_list *first = (struct active_list *)a; + struct active_list *second = (struct active_list *)b; + return strcmp(list_entry(first, struct active_test, list), + list_entry(second, struct active_test, list)); +} + +void show_list(struct active_list *head) { + struct active_list *ptr; + struct active_test *test; + for(ptr = active_list_next(head, NULL); ptr ;ptr = active_list_next(head, ptr)) { + test = list_entry(ptr, struct active_test, list); + printf ("%s ",test->str); + } + printf("\n"); +} + int main (void) { struct active_list head; struct active_list *ptr; @@ -83,17 +118,24 @@ int main (void) { active_list_init(&head); make_list(&head); - for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) { + printf("pos order: "); + show_list(&head); +/* for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) { test = list_entry(ptr, struct active_test, list); printf ("%s ",test->str); - } - printf("\n"); - for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) { + }*/ + printf("neg order: "); + for(ptr = active_list_prev(&head, &head); ptr ;ptr = active_list_prev(&head, ptr)) { test = list_entry(ptr, struct active_test, list); printf ("%s ",test->str); } - printf("\n"); - for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) { + printf("\npos order after sort: "); + active_list_sort(&head, &active_test_compare); + show_list(&head); + + printf("after clear: "); + active_list_clear(&head); + for(ptr = active_list_next(&head, NULL); ptr ;ptr = active_list_next(&head, ptr)) { test = list_entry(ptr, struct active_test, list); printf ("%s ",test->str); }