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