1 #include "CppUTest/TestHarness.h"
2 #include "CppUTest/CommandLineTestRunner.h"
3 #include "btstack_linked_list.h"
4
5 btstack_linked_list_t testList;
6 btstack_linked_item_t itemA;
7 btstack_linked_item_t itemB;
8 btstack_linked_item_t itemC;
9 btstack_linked_item_t itemD;
10
TEST_GROUP(LinkedListEmpty)11 TEST_GROUP(LinkedListEmpty){
12 void setup(void){
13 testList = NULL;
14 }
15 };
16
TEST(LinkedListEmpty,CountAll)17 TEST(LinkedListEmpty, CountAll){
18 CHECK_EQUAL(0, btstack_linked_list_count(&testList));
19 }
20
TEST(LinkedListEmpty,IsEmpty)21 TEST(LinkedListEmpty, IsEmpty){
22 CHECK_EQUAL(true, btstack_linked_list_empty(&testList));
23 }
24
TEST(LinkedListEmpty,Addtail)25 TEST(LinkedListEmpty, Addtail){
26 CHECK_EQUAL(true, btstack_linked_list_add_tail(&testList, &itemA));
27 }
28
TEST(LinkedListEmpty,RemoveNonExisting)29 TEST(LinkedListEmpty, RemoveNonExisting){
30 CHECK_EQUAL(false, btstack_linked_list_remove(&testList, &itemA));
31 }
32
TEST_GROUP(LinkedList)33 TEST_GROUP(LinkedList){
34 void setup(void){
35 testList = NULL;
36 btstack_linked_list_add(&testList, &itemD);
37 btstack_linked_list_add(&testList, &itemC);
38 btstack_linked_list_add(&testList, &itemB);
39 btstack_linked_list_add(&testList, &itemA);
40 }
41 };
42
TEST(LinkedList,CountAll)43 TEST(LinkedList, CountAll){
44 CHECK_EQUAL(4, btstack_linked_list_count(&testList));
45 }
46
TEST(LinkedList,GetFirst)47 TEST(LinkedList, GetFirst){
48 btstack_linked_item_t * item;
49 item = btstack_linked_list_get_first_item(&testList);
50 CHECK_EQUAL(item, &itemA);
51 }
52
TEST(LinkedList,GetLast)53 TEST(LinkedList, GetLast){
54 btstack_linked_item_t * item;
55 item = btstack_linked_list_get_last_item(&testList);
56 CHECK_EQUAL(item, &itemD);
57 }
58
TEST(LinkedList,Pop)59 TEST(LinkedList, Pop){
60 btstack_linked_item_t * item;
61 item = btstack_linked_list_pop(&testList);
62 CHECK_EQUAL(item, &itemA);
63 CHECK_EQUAL(3, btstack_linked_list_count(&testList));
64 }
65
TEST(LinkedList,AddExisting)66 TEST(LinkedList, AddExisting){
67 CHECK_EQUAL( false, btstack_linked_list_add(&testList, &itemD));
68 }
69
TEST(LinkedList,AddTailExisting)70 TEST(LinkedList, AddTailExisting){
71 CHECK_EQUAL( false, btstack_linked_list_add_tail(&testList, &itemD));
72 }
73
TEST(LinkedList,Iterator)74 TEST(LinkedList, Iterator){
75 btstack_linked_list_iterator_t it;
76 btstack_linked_list_iterator_init(&it, &testList);
77 btstack_linked_item_t * item;
78 CHECK(btstack_linked_list_iterator_has_next(&it));
79 item = btstack_linked_list_iterator_next(&it);
80 CHECK_EQUAL(item, &itemA);
81 CHECK(btstack_linked_list_iterator_has_next(&it));
82 item = btstack_linked_list_iterator_next(&it);
83 CHECK_EQUAL(item, &itemB);
84 CHECK(btstack_linked_list_iterator_has_next(&it));
85 item = btstack_linked_list_iterator_next(&it);
86 CHECK_EQUAL(item, &itemC);
87 CHECK(btstack_linked_list_iterator_has_next(&it));
88 item = btstack_linked_list_iterator_next(&it);
89 CHECK_EQUAL(item, &itemD);
90 CHECK(!btstack_linked_list_iterator_has_next(&it));
91 }
92
TEST(LinkedList,RemoveFirstUsingIterator)93 TEST(LinkedList, RemoveFirstUsingIterator){
94 btstack_linked_list_iterator_t it;
95 btstack_linked_list_iterator_init(&it, &testList);
96 btstack_linked_item_t * item;
97 CHECK(btstack_linked_list_iterator_has_next(&it));
98 item = btstack_linked_list_iterator_next(&it);
99 CHECK_EQUAL(item, &itemA);
100 btstack_linked_list_iterator_remove(&it);
101 CHECK(btstack_linked_list_iterator_has_next(&it));
102 item = btstack_linked_list_iterator_next(&it);
103 CHECK_EQUAL(item, &itemB);
104 CHECK(btstack_linked_list_iterator_has_next(&it));
105 item = btstack_linked_list_iterator_next(&it);
106 CHECK_EQUAL(item, &itemC);
107 CHECK(btstack_linked_list_iterator_has_next(&it));
108 item = btstack_linked_list_iterator_next(&it);
109 CHECK_EQUAL(item, &itemD);
110 CHECK(!btstack_linked_list_iterator_has_next(&it));
111 }
112
TEST(LinkedList,RemoveFirstUsingListRemove)113 TEST(LinkedList, RemoveFirstUsingListRemove){
114 btstack_linked_list_iterator_t it;
115 btstack_linked_list_iterator_init(&it, &testList);
116 btstack_linked_item_t * item;
117 CHECK(btstack_linked_list_iterator_has_next(&it));
118 item = btstack_linked_list_iterator_next(&it);
119 CHECK_EQUAL(item, &itemA);
120 btstack_linked_list_remove(&testList, &itemA);
121 CHECK(btstack_linked_list_iterator_has_next(&it));
122 item = btstack_linked_list_iterator_next(&it);
123 CHECK_EQUAL(item, &itemB);
124 CHECK(btstack_linked_list_iterator_has_next(&it));
125 item = btstack_linked_list_iterator_next(&it);
126 CHECK_EQUAL(item, &itemC);
127 CHECK(btstack_linked_list_iterator_has_next(&it));
128 item = btstack_linked_list_iterator_next(&it);
129 CHECK_EQUAL(item, &itemD);
130 CHECK(!btstack_linked_list_iterator_has_next(&it));
131 }
132
TEST(LinkedList,RemoveSecondUsingIterator)133 TEST(LinkedList, RemoveSecondUsingIterator){
134 btstack_linked_list_iterator_t it;
135 btstack_linked_list_iterator_init(&it, &testList);
136 btstack_linked_item_t * item;
137 CHECK(btstack_linked_list_iterator_has_next(&it));
138 item = btstack_linked_list_iterator_next(&it);
139 CHECK(btstack_linked_list_iterator_has_next(&it));
140 item = btstack_linked_list_iterator_next(&it);
141 CHECK_EQUAL(item, &itemB);
142 btstack_linked_list_iterator_remove(&it);
143 CHECK(btstack_linked_list_iterator_has_next(&it));
144 item = btstack_linked_list_iterator_next(&it);
145 CHECK_EQUAL(item, &itemC);
146 CHECK(btstack_linked_list_iterator_has_next(&it));
147 item = btstack_linked_list_iterator_next(&it);
148 CHECK_EQUAL(item, &itemD);
149 CHECK(!btstack_linked_list_iterator_has_next(&it));
150 }
151
TEST(LinkedList,RemoveSecondUsingListRemove)152 TEST(LinkedList, RemoveSecondUsingListRemove){
153 btstack_linked_list_iterator_t it;
154 btstack_linked_list_iterator_init(&it, &testList);
155 btstack_linked_item_t * item;
156 CHECK(btstack_linked_list_iterator_has_next(&it));
157 item = btstack_linked_list_iterator_next(&it);
158 CHECK(btstack_linked_list_iterator_has_next(&it));
159 item = btstack_linked_list_iterator_next(&it);
160 CHECK_EQUAL(item, &itemB);
161 btstack_linked_list_remove(&testList, &itemB);
162 item = btstack_linked_list_iterator_next(&it);
163 CHECK_EQUAL(item, &itemC);
164 CHECK(btstack_linked_list_iterator_has_next(&it));
165 item = btstack_linked_list_iterator_next(&it);
166 CHECK_EQUAL(item, &itemD);
167 CHECK(!btstack_linked_list_iterator_has_next(&it));
168 }
169
TEST(LinkedList,RemoveThirdUsingIterator)170 TEST(LinkedList, RemoveThirdUsingIterator){
171 btstack_linked_list_iterator_t it;
172 btstack_linked_list_iterator_init(&it, &testList);
173 btstack_linked_item_t * item;
174 CHECK(btstack_linked_list_iterator_has_next(&it));
175 item = btstack_linked_list_iterator_next(&it);
176 CHECK(btstack_linked_list_iterator_has_next(&it));
177 item = btstack_linked_list_iterator_next(&it);
178 CHECK_EQUAL(item, &itemB);
179 CHECK(btstack_linked_list_iterator_has_next(&it));
180 item = btstack_linked_list_iterator_next(&it);
181 CHECK_EQUAL(item, &itemC);
182 btstack_linked_list_iterator_remove(&it);
183 CHECK(btstack_linked_list_iterator_has_next(&it));
184 item = btstack_linked_list_iterator_next(&it);
185 CHECK_EQUAL(item, &itemD);
186 CHECK(!btstack_linked_list_iterator_has_next(&it));
187 }
188
TEST(LinkedList,RemoveLastUsingIterator)189 TEST(LinkedList, RemoveLastUsingIterator){
190 btstack_linked_list_iterator_t it;
191 btstack_linked_list_iterator_init(&it, &testList);
192 btstack_linked_item_t * item;
193 CHECK(btstack_linked_list_iterator_has_next(&it));
194 item = btstack_linked_list_iterator_next(&it);
195 CHECK(btstack_linked_list_iterator_has_next(&it));
196 item = btstack_linked_list_iterator_next(&it);
197 CHECK_EQUAL(item, &itemB);
198 CHECK(btstack_linked_list_iterator_has_next(&it));
199 item = btstack_linked_list_iterator_next(&it);
200 CHECK_EQUAL(item, &itemC);
201 CHECK(btstack_linked_list_iterator_has_next(&it));
202 item = btstack_linked_list_iterator_next(&it);
203 CHECK_EQUAL(item, &itemD);
204 btstack_linked_list_iterator_remove(&it);
205 CHECK(!btstack_linked_list_iterator_has_next(&it));
206 }
207
TEST(LinkedList,RemoveLastUsingListRemove)208 TEST(LinkedList, RemoveLastUsingListRemove){
209 btstack_linked_list_iterator_t it;
210 btstack_linked_list_iterator_init(&it, &testList);
211 btstack_linked_item_t * item;
212 CHECK(btstack_linked_list_iterator_has_next(&it));
213 item = btstack_linked_list_iterator_next(&it);
214 CHECK(btstack_linked_list_iterator_has_next(&it));
215 item = btstack_linked_list_iterator_next(&it);
216 CHECK_EQUAL(item, &itemB);
217 CHECK(btstack_linked_list_iterator_has_next(&it));
218 item = btstack_linked_list_iterator_next(&it);
219 CHECK_EQUAL(item, &itemC);
220 CHECK(btstack_linked_list_iterator_has_next(&it));
221 item = btstack_linked_list_iterator_next(&it);
222 CHECK_EQUAL(item, &itemD);
223 btstack_linked_list_remove(&testList, &itemD);
224 CHECK(!btstack_linked_list_iterator_has_next(&it));
225 }
226
TEST(LinkedList,RemoveSecondAndThirdUsingIterator)227 TEST(LinkedList, RemoveSecondAndThirdUsingIterator){
228 btstack_linked_list_iterator_t it;
229 btstack_linked_list_iterator_init(&it, &testList);
230 btstack_linked_item_t * item;
231 CHECK(btstack_linked_list_iterator_has_next(&it));
232 item = btstack_linked_list_iterator_next(&it);
233 CHECK(btstack_linked_list_iterator_has_next(&it));
234 item = btstack_linked_list_iterator_next(&it);
235 CHECK_EQUAL(item, &itemB);
236 btstack_linked_list_iterator_remove(&it); // B
237 CHECK(btstack_linked_list_iterator_has_next(&it));
238 item = btstack_linked_list_iterator_next(&it);
239 CHECK_EQUAL(item, &itemC);
240 btstack_linked_list_iterator_remove(&it); // C
241 CHECK(btstack_linked_list_iterator_has_next(&it));
242 item = btstack_linked_list_iterator_next(&it);
243 CHECK_EQUAL(item, &itemD);
244 CHECK(!btstack_linked_list_iterator_has_next(&it));
245 }
246
TEST(LinkedList,RemoveSecondAndThirdUsingListRemove)247 TEST(LinkedList, RemoveSecondAndThirdUsingListRemove){
248 btstack_linked_list_iterator_t it;
249 btstack_linked_list_iterator_init(&it, &testList);
250 btstack_linked_item_t * item;
251 CHECK(btstack_linked_list_iterator_has_next(&it));
252 item = btstack_linked_list_iterator_next(&it);
253 CHECK(btstack_linked_list_iterator_has_next(&it));
254 item = btstack_linked_list_iterator_next(&it);
255 CHECK_EQUAL(item, &itemB);
256 btstack_linked_list_remove(&testList, &itemB);
257 btstack_linked_list_remove(&testList, &itemC);
258 CHECK(btstack_linked_list_iterator_has_next(&it));
259 item = btstack_linked_list_iterator_next(&it);
260 CHECK_EQUAL(item, &itemD);
261 CHECK(!btstack_linked_list_iterator_has_next(&it));
262 }
263
TEST(LinkedList,RemoveAllUsingListRemove)264 TEST(LinkedList, RemoveAllUsingListRemove){
265 btstack_linked_list_iterator_t it;
266 btstack_linked_list_iterator_init(&it, &testList);
267 btstack_linked_item_t * item;
268 CHECK(btstack_linked_list_iterator_has_next(&it));
269 item = btstack_linked_list_iterator_next(&it);
270 CHECK_EQUAL(item, &itemA);
271 btstack_linked_list_remove(&testList, &itemA);
272 CHECK(btstack_linked_list_iterator_has_next(&it));
273 item = btstack_linked_list_iterator_next(&it);
274 CHECK_EQUAL(item, &itemB);
275 btstack_linked_list_remove(&testList, &itemB);
276 CHECK(btstack_linked_list_iterator_has_next(&it));
277 item = btstack_linked_list_iterator_next(&it);
278 CHECK_EQUAL(item, &itemC);
279 btstack_linked_list_remove(&testList, &itemC);
280 CHECK(btstack_linked_list_iterator_has_next(&it));
281 item = btstack_linked_list_iterator_next(&it);
282 CHECK_EQUAL(item, &itemD);
283 btstack_linked_list_remove(&testList, &itemD);
284 CHECK(!btstack_linked_list_iterator_has_next(&it));
285 }
286
TEST(LinkedList,RemoveAllUsingIterator)287 TEST(LinkedList, RemoveAllUsingIterator){
288 btstack_linked_list_iterator_t it;
289 btstack_linked_list_iterator_init(&it, &testList);
290 btstack_linked_item_t * item;
291 CHECK(btstack_linked_list_iterator_has_next(&it));
292 item = btstack_linked_list_iterator_next(&it);
293 CHECK_EQUAL(item, &itemA);
294 btstack_linked_list_iterator_remove(&it);
295 CHECK(btstack_linked_list_iterator_has_next(&it));
296 item = btstack_linked_list_iterator_next(&it);
297 CHECK_EQUAL(item, &itemB);
298 btstack_linked_list_iterator_remove(&it);
299 CHECK(btstack_linked_list_iterator_has_next(&it));
300 item = btstack_linked_list_iterator_next(&it);
301 CHECK_EQUAL(item, &itemC);
302 btstack_linked_list_iterator_remove(&it);
303 CHECK(btstack_linked_list_iterator_has_next(&it));
304 item = btstack_linked_list_iterator_next(&it);
305 CHECK_EQUAL(item, &itemD);
306 btstack_linked_list_iterator_remove(&it);
307 CHECK(!btstack_linked_list_iterator_has_next(&it));
308 }
309
main(int argc,const char * argv[])310 int main (int argc, const char * argv[]){
311 return CommandLineTestRunner::RunAllTests(argc, argv);
312 }