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 }