static void test_empty(void) { struct list_node *spos, *ssafe; struct node *pos, *safe; check(!slist_is_empty(&slist), "slist is empty but slist_is_empty returned false"); check(!list_is_empty(&list), "list is empty but list_is_empty returned false"); check(slist_head(&slist) != &slist, "slist is empty but slist_head returned non-self"); check(list_head(&list) != NULL, "list is empty but list_head returned non-NULL"); check(slist_tail(&slist) != &slist, "slist is empty but slist_tail returned non-self"); check(list_tail(&list) != NULL, "list is empty but list_tail returned non-NULL"); check_loop_never(slist_for_each(spos, &slist), "slist is empty, but slist_for_each looped"); check_loop_never(list_for_each(pos, &list), "list is empty, but list_for_each looped"); check_loop_never(slist_for_each_safe(spos, ssafe, &slist), "slist is empty, but slist_for_each_safe looped"); check_loop_never(list_for_each_safe(pos, safe, &list), "list is empty, but list_for_each_safe looped"); check_loop_never(slist_for_each_entry(pos, &slist, node), "slist is empty, but slist_for_each_entry looped"); check_loop_never(slist_for_each_entry_safe(pos, safe, &slist, node), "slist is empty, but slist_for_each-entry_safe looped"); }
void do_test(unsigned int c) { unsigned int i; struct node *p, *n; SLIST_HEAD(head); for (i = 0; i < c; ++i) { p = (struct node*)malloc(sizeof(*p)); if (!p) { perror("malloc failed"); exit(1); } p->data = c - i; slist_add(&p->slist, &head); } slist_for_each_entry(p, &head, slist) printf("%d ", p->data); printf("\n"); slist_reverse(&head); slist_for_each_entry(p, &head, slist) printf("%d ", p->data); printf("\n"); slist_for_each_entry(p, &head, slist) p->data = (size_t)rand()%100; printf("before sort: "); slist_for_each_entry(p, &head, slist) printf("%d ", p->data); printf("\n"); slist_sort(NULL, &head, int_cmp); printf("after sort: "); slist_for_each_entry(p, &head, slist) printf("%d ", p->data); printf("\n"); slist_for_each_entry_safe(p, n, &head, slist) free(p); }