test-llist.c revision 1139a1f61032e3b81bd1c7f526b9e9553f51a5a8
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (c) 2009-2014 Dovecot authors, see the included COPYING file */
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainenstatic void test_dllist(void)
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainen struct dllist *head = NULL, *l4, *l3, *l2, *l1;
7ace5117d5f2395bd66f20b09e77dac05492f7ceTimo Sirainen test_assert(l4->prev == NULL && l4->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l3->prev == NULL && l3->next == l4);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
44cf91b7a701a9b4d9f59a990552eab4f7f64fbcTimo Sirainen /* remove from middle */
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l2->prev == NULL && l2->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l3->prev == l1 && l3->next == l4);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen /* remove from head */
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l1->prev == NULL && l1->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l3->prev == NULL && l3->next == l4);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen /* remove from tail */
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l4->prev == NULL && l4->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l3->prev == l1 && l3->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen /* removal of an entry not in the list shouldn't cause the list to break */
5bb7c9863cbb62c41b13e7f42e04f1d57b4634f8Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l3->prev == l1 && l3->next == NULL);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* remove last two */
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l3->prev == NULL && l3->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainenstatic void test_dllist2(void)
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen struct dllist *head = NULL, *tail = NULL, *l4, *l3, *l2, *l1;
7a60e1dc9e93ef3f7c7fe1af6385a0bfa1e31bc3Timo Sirainen /* prepend to empty */
3ab7783791bd46cdd46e9b9de3e98e8efcb6c6bfTimo Sirainen test_assert(l3->next == NULL && l3->prev == NULL);
3ab7783791bd46cdd46e9b9de3e98e8efcb6c6bfTimo Sirainen /* remove last */
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l3->next == NULL && l3->prev == NULL);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen /* append to empty */
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l3->next == NULL && l3->prev == NULL);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen /* prepend */
145d2eef238ed8bbff635e3b06951a83f0ee5a03Timo Sirainen test_assert(l2->prev == NULL && l2->next == l3);
145d2eef238ed8bbff635e3b06951a83f0ee5a03Timo Sirainen test_assert(l3->prev == l2 && l3->next == NULL);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l2->prev == NULL && l2->next == l3);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l3->prev == l2 && l3->next == l4);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
8759adc67109b5a12a7af3ed717c7040622a0a04Timo Sirainen /* remove from middle */
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l2->prev == NULL && l2->next == NULL);
24d7c5fc9fa1cb1f49402ec796654113199ba4e6Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l3->prev == l1 && l3->next == l4);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* remove from head */
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l1->prev == NULL && l1->next == NULL);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen test_assert(l3->prev == NULL && l3->next == l4);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen test_assert(l4->prev == l3 && l4->next == NULL);
6ef7e31619edfaa17ed044b45861d106a86191efTimo Sirainen /* remove from tail */
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l4->prev == NULL && l4->next == NULL);
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l3->prev == l1 && l3->next == NULL);
d31c77e63713a6cf3687a4b38ff8daf6d6c7a3ddTimo Sirainen /* removal of an entry not in the list shouldn't cause the list to break */
90cf976e328e093da91a8332d96182201f4ef6c1Timo Sirainen test_assert(l1->prev == NULL && l1->next == l3);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen test_assert(l3->prev == l1 && l3->next == NULL);
dc9bfb7dc057964238e181d3d8b08751527bb08aTimo Sirainen /* remove last two */