|
8 | 8 | #include <misc/dlist.h>
|
9 | 9 |
|
10 | 10 | static sys_dlist_t test_list;
|
| 11 | +static sys_dlist_t test_list2; |
11 | 12 |
|
12 | 13 | struct container_node {
|
13 | 14 | sys_dnode_t node;
|
@@ -281,6 +282,74 @@ void test_dlist(void)
|
281 | 282 | zassert_true((verify_emptyness(&test_list)),
|
282 | 283 | "test_list should be empty");
|
283 | 284 |
|
| 285 | + |
| 286 | + /* Catenate an empty list to a non-empty list */ |
| 287 | + sys_dlist_append(&test_list, &test_node_1.node); |
| 288 | + sys_dlist_init(&test_list2); |
| 289 | + sys_dlist_join(&test_list, &test_list2); |
| 290 | + zassert_true(sys_dlist_is_empty(&test_list2), |
| 291 | + "list2 not empty"); |
| 292 | + zassert_true((verify_tail_head(&test_list, &test_node_1.node, |
| 293 | + &test_node_1.node, true)), |
| 294 | + "test_list head/tail are wrong"); |
| 295 | + |
| 296 | + /* Catenate a non-empty list to an empty list moves elements. */ |
| 297 | + sys_dlist_join(&test_list2, &test_list); |
| 298 | + zassert_true(sys_dlist_is_empty(&test_list), |
| 299 | + "list not empty"); |
| 300 | + zassert_true((verify_tail_head(&test_list2, &test_node_1.node, |
| 301 | + &test_node_1.node, true)), |
| 302 | + "test_list2 head/tail are wrong"); |
| 303 | + |
| 304 | + /* Catenate a non-empty list to a non-empty list moves elements. */ |
| 305 | + sys_dlist_append(&test_list, &test_node_2.node); |
| 306 | + sys_dlist_append(&test_list, &test_node_3.node); |
| 307 | + zassert_true((verify_tail_head(&test_list, &test_node_2.node, |
| 308 | + &test_node_3.node, false)), |
| 309 | + "test_list head/tail are wrong"); |
| 310 | + sys_dlist_join(&test_list2, &test_list); |
| 311 | + zassert_true(sys_dlist_is_empty(&test_list), |
| 312 | + "list not empty"); |
| 313 | + zassert_true((verify_tail_head(&test_list2, &test_node_1.node, |
| 314 | + &test_node_3.node, false)), |
| 315 | + "test_list2 head/tail are wrong"); |
| 316 | + zassert_equal(test_node_1.node.next, &test_node_2.node, |
| 317 | + "node2 not after node1"); |
| 318 | + zassert_equal(test_node_2.node.prev, &test_node_1.node, |
| 319 | + "node1 not before node2"); |
| 320 | + |
| 321 | + /* Split list at head does nothing */ |
| 322 | + sys_dlist_split(&test_list, &test_list2, &test_node_1.node); |
| 323 | + zassert_true(sys_dlist_is_empty(&test_list), |
| 324 | + "list not empty"); |
| 325 | + |
| 326 | + /* Split list after head moves */ |
| 327 | + sys_dlist_split(&test_list, &test_list2, &test_node_2.node); |
| 328 | + zassert_true((verify_tail_head(&test_list, &test_node_1.node, |
| 329 | + &test_node_1.node, true)), |
| 330 | + "test_list head/tail are wrong"); |
| 331 | + zassert_true((verify_tail_head(&test_list2, &test_node_2.node, |
| 332 | + &test_node_3.node, false)), |
| 333 | + "test_list2 head/tail are wrong"); |
| 334 | + |
| 335 | + /* Split list after head moves */ |
| 336 | + sys_dlist_split(&test_list, &test_list2, &test_node_3.node); |
| 337 | + zassert_true((verify_tail_head(&test_list, &test_node_1.node, |
| 338 | + &test_node_2.node, false)), |
| 339 | + "test_list head/tail are wrong"); |
| 340 | + zassert_true((verify_tail_head(&test_list2, &test_node_3.node, |
| 341 | + &test_node_3.node, true)), |
| 342 | + "test_list2 head/tail are wrong"); |
| 343 | + |
| 344 | + sys_dlist_remove(&test_node_1.node); |
| 345 | + sys_dlist_remove(&test_node_2.node); |
| 346 | + zassert_true(sys_dlist_is_empty(&test_list), |
| 347 | + "list not empty"); |
| 348 | + |
| 349 | + sys_dlist_remove(&test_node_3.node); |
| 350 | + zassert_true(sys_dlist_is_empty(&test_list2), |
| 351 | + "list2 not empty"); |
| 352 | + |
284 | 353 | /* test iterator from a node */
|
285 | 354 | struct data_node {
|
286 | 355 | sys_dnode_t node;
|
|
0 commit comments