pkg: use a blob buffer in pkg_t to store variable fields
[oweals/opkg-lede.git] / tests / opkg_active_list_test.c
index f7bd390e181b9ffd68d8e644f1a548fbea2ee021..ad964dcd70246232becc450e758a2818a5147190 100644 (file)
    General Public License for more details.
 */
 
-
 #include <stdlib.h>
 #include <libopkg/active_list.h>
 #include <active_list.h>
 #include <stdio.h>
 
 struct active_test {
-    char *str;
-    struct active_list list;
+       char *str;
+       struct active_list list;
 };
 
-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); 
-    return ans;
+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);
+       return ans;
 }
-void active_test_add(struct active_list *head, struct active_test *node) {
-    active_list_add(head, &node->list);
+
+void active_test_add(struct active_list *head, struct active_test *node)
+{
+       active_list_add(head, &node->list);
 }
 
-void active_test_add_depend(struct active_test *A, struct active_test *B) {
-    active_list_add_depend(&A->list, &B->list);
+void active_test_add_depend(struct active_test *A, struct active_test *B)
+{
+       active_list_add_depend(&A->list, &B->list);
 }
 
 /*
@@ -47,74 +51,105 @@ void active_test_add_depend(struct active_test *A, struct active_test *B) {
     |__ 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
+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");
-    struct active_test *C = active_test_new("C");
-    struct active_test *D = active_test_new("D");
-    struct active_test *E = active_test_new("E");
-    struct active_test *F = active_test_new("F");
-    struct active_test *G = active_test_new("G");
-    struct active_test *H = active_test_new("H");
-    struct active_test *I = active_test_new("I");
-    struct active_test *J = active_test_new("J");
-    struct active_test *K = active_test_new("K");
-    struct active_test *L = active_test_new("L");
-    struct active_test *M = active_test_new("M");
-    struct active_test *N = active_test_new("N");
-    struct active_test *O = active_test_new("O");
-
-    active_test_add(head, A);
-    active_test_add(head, B);
-    active_test_add(head, C);
-    active_test_add(head, D);
-    active_test_add(head, E);
-    active_test_add(head, F);
-    active_test_add(head, G);
-    active_test_add(head, H);
-    active_test_add(head, I);
-    active_test_add(head, J);
-    active_test_add(head, K);
-    active_test_add(head, L);
-    active_test_add(head, M);
-    active_test_add(head, N);
-    active_test_add(head, O);
-    active_test_add_depend(H, M);
-    active_test_add_depend(A, G);
-    active_test_add_depend(A, H);
-    active_test_add_depend(A, I);
-    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(L, N);
+void make_list(struct active_list *head)
+{
+       struct active_test *A = active_test_new("A");
+       struct active_test *B = active_test_new("B");
+       struct active_test *C = active_test_new("C");
+       struct active_test *D = active_test_new("D");
+       struct active_test *E = active_test_new("E");
+       struct active_test *F = active_test_new("F");
+       struct active_test *G = active_test_new("G");
+       struct active_test *H = active_test_new("H");
+       struct active_test *I = active_test_new("I");
+       struct active_test *J = active_test_new("J");
+       struct active_test *K = active_test_new("K");
+       struct active_test *L = active_test_new("L");
+       struct active_test *M = active_test_new("M");
+       struct active_test *N = active_test_new("N");
+       struct active_test *O = active_test_new("O");
+
+       active_test_add(head, A);
+       active_test_add(head, B);
+       active_test_add(head, C);
+       active_test_add(head, D);
+       active_test_add(head, E);
+       active_test_add(head, F);
+       active_test_add(head, G);
+       active_test_add(head, H);
+       active_test_add(head, I);
+       active_test_add(head, J);
+       active_test_add(head, K);
+       active_test_add(head, L);
+       active_test_add(head, M);
+       active_test_add(head, N);
+       active_test_add(head, O);
+       active_test_add_depend(H, M);
+       active_test_add_depend(A, G);
+       active_test_add_depend(A, H);
+       active_test_add_depend(A, I);
+       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(L, N);
 }
 
-int main (void) {
-    struct active_list head;
-    struct active_list *ptr;
-    struct active_test *test;
-    active_list_init(&head);
-    make_list(&head);
+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));
+}
 
-    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)) {
-        test = list_entry(ptr, struct active_test, list);
-        printf ("%s ",test->str);
-    }
-    printf("\n");
-    for(ptr = active_list_next(&head, NULL); ptr ;ptr = active_list_next(&head, ptr)) {
+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;
+       struct active_test *test;
+       active_list_init(&head);
+       make_list(&head);
+
+       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");
-
+    }*/
+       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("\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);
+       }
+       printf("\n");
 
 }