END_TEST START_TEST ( llist_08_list_reverse ) { int retval; llist listToTest = NULL; listToTest = llist_create ( NULL, NULL, test_mt ? MT_SUPPORT_FALSE : MT_SUPPORT_TRUE ); // Insert a 5 nodes 1..5 retval = llist_add_node ( listToTest, ( llist_node ) 1, ADD_NODE_REAR ); retval = llist_add_node ( listToTest, ( llist_node ) 2, ADD_NODE_REAR ); retval = llist_add_node ( listToTest, ( llist_node ) 3, ADD_NODE_REAR ); retval = llist_add_node ( listToTest, ( llist_node ) 4, ADD_NODE_REAR ); retval = llist_add_node ( listToTest, ( llist_node ) 5, ADD_NODE_REAR ); printf ( "List before reversing: " ); print_llist ( listToTest ); retval = llist_reverse ( listToTest ); ck_assert_int_eq ( retval, LLIST_SUCCESS ); printf ( "List After reversing: " ); print_llist ( listToTest ); llist_destroy ( listToTest, false, NULL ); }
static struct rooted_tree * process_tree_direct( struct rooted_tree *tree, set_t *prune_labels) { struct llist *rev_nodes = llist_reverse(tree->nodes_in_order); struct list_elem *el; struct rnode *current; char *label; for (el = rev_nodes->head; NULL != el; el = el->next) { current = el->data; label = current->label; /* skip this node iff parent is marked ("seen") */ if (!is_root(current) && current->parent->seen) { current->seen = true; /* inherit mark */ continue; } if (set_has_element(prune_labels, label)) { unlink_rnode(current); current->seen = true; } } destroy_llist(rev_nodes); reset_seen(tree); return tree; }
int test_reverse() { char *test_name = "test_reverse"; struct llist *list_p, *revlist_p; struct list_elem *elem; list_p = create_llist(); append_element(list_p, "one"); append_element(list_p, "two"); append_element(list_p, "three"); append_element(list_p, "four"); append_element(list_p, "five"); revlist_p = llist_reverse(list_p); elem = revlist_p->head; if (strcmp(elem->data, "five") != 0) { printf ("%s: expected 'five', got %s.\n", test_name, (char *) elem->data); return 1; } elem = elem->next; if (strcmp(elem->data, "four") != 0) { printf ("%s: expected 'four', got %s.\n", test_name, (char *) elem->data); return 1; } elem = elem->next; if (strcmp(elem->data, "three") != 0) { printf ("%s: expected 'three', got %s.\n", test_name, (char *) elem->data); return 1; } elem = elem->next; if (strcmp(elem->data, "two") != 0) { printf ("%s: expected 'two', got %s.\n", test_name, (char *) elem->data); return 1; } elem = elem->next; if (strcmp(elem->data, "one") != 0) { printf ("%s: expected 'one', got %s.\n", test_name, (char *) elem->data); return 1; } if (NULL != elem->next) { printf ("%s: elem->next shoudl be NULL.\n", test_name); return 1; } if(list_p->count != 5) { printf ("%s: count should be 5.\n", test_name); return 1; } printf("%s ok.\n", test_name); return 0; }