#include #include #include #include "helper.h" struct parent { const char *name; unsigned int num_children; struct list_head children; }; struct child { const char *name; struct list_node list; }; int main(void) { struct parent parent; struct child c1, c2, c3; const struct parent *p; const struct child *c; plan_tests(20); parent.num_children = 0; list_head_init(&parent.children); c1.name = "c1"; list_add(&parent.children, &c1.list); ok1(list_next(&parent.children, &c1, list) == NULL); ok1(list_prev(&parent.children, &c1, list) == NULL); c2.name = "c2"; list_add_tail(&parent.children, &c2.list); ok1(list_next(&parent.children, &c1, list) == &c2); ok1(list_prev(&parent.children, &c1, list) == NULL); ok1(list_next(&parent.children, &c2, list) == NULL); ok1(list_prev(&parent.children, &c2, list) == &c1); c3.name = "c3"; list_add_tail(&parent.children, &c3.list); ok1(list_next(&parent.children, &c1, list) == &c2); ok1(list_prev(&parent.children, &c1, list) == NULL); ok1(list_next(&parent.children, &c2, list) == &c3); ok1(list_prev(&parent.children, &c2, list) == &c1); ok1(list_next(&parent.children, &c3, list) == NULL); ok1(list_prev(&parent.children, &c3, list) == &c2); /* Const variants */ p = &parent; c = &c2; ok1(list_next(&p->children, &c1, list) == &c2); ok1(list_prev(&p->children, &c1, list) == NULL); ok1(list_next(&p->children, c, list) == &c3); ok1(list_prev(&p->children, c, list) == &c1); ok1(list_next(&parent.children, c, list) == &c3); ok1(list_prev(&parent.children, c, list) == &c1); ok1(list_next(&p->children, &c3, list) == NULL); ok1(list_prev(&p->children, &c3, list) == &c2); return exit_status(); }