Initial stab at untangling the #include maze. Probably needs a second pass.
[oweals/opkg-lede.git] / tests / opkg_active_list_test.c
1 /* opkg_active_list.c - the opkg package management system
2
3    Tick Chen <tick@openmoko.com>
4
5    Copyright (C) 2008 Openmoko
6
7    This program is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License as
9    published by the Free Software Foundation; either version 2, or (at
10    your option) any later version.
11
12    This program is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16 */
17
18
19 #include <stdlib.h>
20 #include <libopkg/active_list.h>
21 #include <active_list.h>
22 #include <stdio.h>
23
24 struct active_test {
25     char *str;
26     struct active_list list;
27 };
28
29 struct active_test *active_test_new(char *str) {
30     struct active_test *ans = (struct active_test *)calloc(1, sizeof(struct active_test));
31     ans->str = str;
32     active_list_init(&ans->list); 
33     return ans;
34 }
35 void active_test_add(struct active_list *head, struct active_test *node) {
36     active_list_add(head, &node->list);
37 }
38
39 void active_test_add_depend(struct active_test *A, struct active_test *B) {
40     active_list_add_depend(&A->list, &B->list);
41 }
42
43 /*
44 .--A---B----C----D-----E----F
45     |             |__k---L
46     |                    |_ N
47     |__ G ---H ---I---J
48              |_M      |_O
49
50 Then the sequence will be 
51 +: G M H I O J A B K N L C D E F
52 -: F E D C L N K B A J O I H M G
53 */
54 void make_list(struct active_list *head) {
55     struct active_test *A = active_test_new("A");
56     struct active_test *B = active_test_new("B");
57     struct active_test *C = active_test_new("C");
58     struct active_test *D = active_test_new("D");
59     struct active_test *E = active_test_new("E");
60     struct active_test *F = active_test_new("F");
61     struct active_test *G = active_test_new("G");
62     struct active_test *H = active_test_new("H");
63     struct active_test *I = active_test_new("I");
64     struct active_test *J = active_test_new("J");
65     struct active_test *K = active_test_new("K");
66     struct active_test *L = active_test_new("L");
67     struct active_test *M = active_test_new("M");
68     struct active_test *N = active_test_new("N");
69     struct active_test *O = active_test_new("O");
70
71     active_test_add(head, A);
72     active_test_add(head, B);
73     active_test_add(head, C);
74     active_test_add(head, D);
75     active_test_add(head, E);
76     active_test_add(head, F);
77     active_test_add(head, G);
78     active_test_add(head, H);
79     active_test_add(head, I);
80     active_test_add(head, J);
81     active_test_add(head, K);
82     active_test_add(head, L);
83     active_test_add(head, M);
84     active_test_add(head, N);
85     active_test_add(head, O);
86     active_test_add_depend(H, M);
87     active_test_add_depend(A, G);
88     active_test_add_depend(A, H);
89     active_test_add_depend(A, I);
90     active_test_add_depend(A, J);
91     active_test_add_depend(J, O);
92     active_test_add_depend(C, K);
93     active_test_add_depend(C, L); 
94     active_test_add_depend(L, N);
95 }
96
97 int active_test_compare(const void *a, const void *b) {
98     struct active_list *first = (struct active_list *)a;
99     struct active_list *second = (struct active_list *)b;
100     return strcmp(list_entry(first, struct active_test, list),
101             list_entry(second, struct active_test, list));
102 }
103
104 void show_list(struct active_list *head) {
105     struct active_list *ptr;
106     struct active_test *test;
107     for(ptr = active_list_next(head, NULL); ptr ;ptr = active_list_next(head, ptr)) {
108         test = list_entry(ptr, struct active_test, list);
109         printf ("%s ",test->str);
110     }
111     printf("\n");
112 }
113
114 int main (void) {
115     struct active_list head;
116     struct active_list *ptr;
117     struct active_test *test;
118     active_list_init(&head);
119     make_list(&head);
120
121     printf("pos order: ");
122     show_list(&head);
123 /*    for(ptr = active_list_next(&head, &head); ptr ;ptr = active_list_next(&head, ptr)) {
124         test = list_entry(ptr, struct active_test, list);
125         printf ("%s ",test->str);
126     }*/
127     printf("neg order: ");
128     for(ptr = active_list_prev(&head, &head); ptr ;ptr = active_list_prev(&head, ptr)) {
129         test = list_entry(ptr, struct active_test, list);
130         printf ("%s ",test->str);
131     }
132     printf("\npos order after sort: ");
133     active_list_sort(&head, &active_test_compare);
134     show_list(&head);
135
136     printf("after clear: ");
137     active_list_clear(&head);
138     for(ptr = active_list_next(&head, NULL); ptr ;ptr = active_list_next(&head, ptr)) {
139         test = list_entry(ptr, struct active_test, list);
140         printf ("%s ",test->str);
141     }
142     printf("\n");
143
144
145 }