1 #include <uhub.h>
2 
3 static struct linked_list* list = NULL;
4 static struct linked_list* list2 = NULL;
5 
6 static char A[2] = { 'A', 0 };
7 static char B[2] = { 'B', 0 };
8 static char C[2] = { 'C', 0 };
9 static char A2[2] = { 'a', 0 };
10 static char B2[2] = { 'b', 0 };
11 static char C2[2] = { 'c', 0 };
12 
13 
14 
null_free(void * ptr)15 static void null_free(void* ptr)
16 {
17 	(void) ptr;
18 }
19 
20 
21 EXO_TEST(list_create_destroy, {
22 	int ok = 0;
23 	struct linked_list* alist;
24 	alist = list_create();
25 	if (alist) ok = 1;
26 	list_destroy(alist);
27 	return ok;
28 });
29 
30 EXO_TEST(list_create, {
31 	list = list_create();
32 	return list->size == 0;
33 });
34 
35 EXO_TEST(list_append_1, {
36 	list_append(list, (char*) A);
37 	return list->size == 1;
38 });
39 
40 EXO_TEST(list_remove_1, {
41 	list_remove(list, (char*) A);
42 	return list->size == 0;
43 });
44 
45 
46 EXO_TEST(list_append_2, {
47 	list_append(list, A);
48 	list_append(list, B);
49 	return list->size == 2;
50 });
51 
52 EXO_TEST(list_remove_2, {
53 	list_remove(list, (char*) A);
54 	return list->size == 1;
55 });
56 
57 EXO_TEST(list_remove_3, {
58 	list_remove(list, (char*) A); /* already removed, so should have no effect */
59 	return list->size == 1;
60 });
61 
62 EXO_TEST(list_remove_4, {
63 	list_remove(list, (char*) B); /* already removed, so should have no effect */
64 	return list->size == 0;
65 });
66 
67 EXO_TEST(list_append_3, {
68 	list_append(list, A);
69 	list_append(list, B);
70 	list_append(list, C);
71 	return list->size == 3;
72 });
73 
74 EXO_TEST(list_append_4, {
75 	list_append(list, A); /* OK. adding the same one *AGAIN* */
76 	return list->size == 4;
77 });
78 
79 EXO_TEST(list_remove_5, {
80 	list_remove(list, A); /* removing the first one. */
81 	return list->size == 3;
82 });
83 
84 EXO_TEST(list_get_index_1, {
85 	return list_get_index(list, 0) == B;
86 });
87 
88 EXO_TEST(list_get_index_2, {
89 	return list_get_index(list, 1) == C;
90 });
91 
92 EXO_TEST(list_get_index_3, {
93 	return list_get_index(list, 2) == A;
94 });
95 
96 EXO_TEST(list_get_index_4, {
97 	return list_get_index(list, 3) == NULL;
98 });
99 
100 EXO_TEST(list_get_first_1, {
101 	return list_get_first(list) == B;
102 });
103 
104 EXO_TEST(list_get_first_next_1, {
105 	return list_get_next(list) == C;
106 });
107 
108 EXO_TEST(list_get_first_next_2, {
109 	return list_get_next(list) == A;
110 });
111 
112 EXO_TEST(list_get_last_1, {
113 	return list_get_last(list) == A;
114 });
115 
116 EXO_TEST(list_get_last_prev_1, {
117 	return list_get_prev(list) == C;
118 });
119 
120 EXO_TEST(list_get_last_prev_2, {
121 	return list_get_prev(list) == B;
122 });
123 
124 EXO_TEST(list_get_last_prev_next_1, {
125 	return list_get_next(list) == C;
126 });
127 
128 EXO_TEST(list_clear, {
129 	list_clear(list, &null_free);
130 	return list->size == 0 && list->first == 0 && list->last == 0 && list->iterator == 0;
131 });
132 
133 static int g_remove_flag = 0;
null_free_inc_flag(void * ptr)134 static void null_free_inc_flag(void* ptr)
135 {
136 	(void) ptr;
137 	g_remove_flag++;
138 }
139 
140 EXO_TEST(list_remove_first_1_1,
141 {
142 	list_append(list, A);
143 	list_append(list, B);
144 	list_append(list, C);
145 	return list->size == 3;
146 });
147 
148 EXO_TEST(list_remove_first_1_2,
149 {
150 	g_remove_flag = 0;
151 	list_remove_first(list, null_free_inc_flag);
152 	return list->size == 2 && g_remove_flag == 1;
153 });
154 
155 EXO_TEST(list_remove_first_1_3,
156 {
157 	list_remove_first(list, NULL);
158 	return list->size == 1;
159 });
160 
161 EXO_TEST(list_remove_first_1_4,
162 {
163 	list_remove_first(list, NULL);
164 	return list->size == 0;
165 });
166 
167 
168 EXO_TEST(list_remove_first_1_5,
169 {
170 	list_remove_first(list, NULL);
171 	return list->size == 0;
172 });
173 
174 
175 EXO_TEST(list_append_list_1,
176 {
177 	list_append(list, A);
178 	list_append(list, B);
179 	list_append(list, C);
180 	list2 = list_create();
181 	list_append(list2, A2);
182 	list_append(list2, B2);
183 	list_append(list2, C2);
184 	return list->size == 3 && list2->size == 3;
185 });
186 
187 EXO_TEST(list_append_list_2,
188 {
189 	list_append_list(list, list2);
190 	return list->size == 6 && list2->size == 0;
191 });
192 
193 EXO_TEST(list_append_list_3,
194 {
195 	list_destroy(list2);
196 	return list_get_index(list, 0) == A &&
197 			list_get_index(list, 1) == B &&
198 			list_get_index(list, 2) == C &&
199 			list_get_index(list, 3) == A2 &&
200 			list_get_index(list, 4) == B2 &&
201 			list_get_index(list, 5) == C2;
202 });
203 
204 EXO_TEST(list_clear_list_last,
205 {
206 	list_clear(list, &null_free);
207 	return 1;
208 });
209 
210 
211 EXO_TEST(list_destroy_1, {
212 	list_destroy(list);
213 	return 1;
214 });
215 
216 EXO_TEST(list_destroy_2, {
217 	list_destroy(0);
218 	return 1;
219 });
220 
221