xref: /btstack/test/linked_list/btstack_linked_list_test.cpp (revision 3faa160f75c1f2da2f28f5c07981475e5ed0ba4e)
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 
11 TEST_GROUP(LinkedListEmpty){
12     void setup(void){
13         testList = NULL;
14     }
15 };
16 
17 TEST(LinkedListEmpty, CountAll){
18     CHECK_EQUAL(0, btstack_linked_list_count(&testList));
19 }
20 
21 TEST(LinkedListEmpty, IsEmpty){
22     CHECK_EQUAL(true, btstack_linked_list_empty(&testList));
23 }
24 
25 TEST(LinkedListEmpty, Addtail){
26     CHECK_EQUAL(true, btstack_linked_list_add_tail(&testList, &itemA));
27 }
28 
29 TEST(LinkedListEmpty, RemoveNonExisting){
30     CHECK_EQUAL(false, btstack_linked_list_remove(&testList, &itemA));
31 }
32 
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 
43 TEST(LinkedList, CountAll){
44     CHECK_EQUAL(4, btstack_linked_list_count(&testList));
45 }
46 
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 
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 
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 
66 TEST(LinkedList, AddExisting){
67     CHECK_EQUAL( false, btstack_linked_list_add(&testList, &itemD));
68 }
69 
70 TEST(LinkedList, AddTailExisting){
71     CHECK_EQUAL( false, btstack_linked_list_add_tail(&testList, &itemD));
72 }
73 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
310 int main (int argc, const char * argv[]){
311     return CommandLineTestRunner::RunAllTests(argc, argv);
312 }