/** * list-expt.c * A collection of experiments with linked lists. Link this with * an implementation of lists to see how well (or poorly) the * implementation works. */ // +---------+-------------------------------------------------------- // | Headers | // +---------+ #include #include "list.h" #include "expt.h" // +--------+--------------------------------------------------------- // | Macros | // +--------+ #define PRINT_LIST(LIST) \ BLOCK( \ fprintf (stderr, VAR_PREFIX "%s = ", #LIST); \ list_print (LIST, stderr); \ fprintf (stderr, "\n"); ) // +------+----------------------------------------------------------- // | Main | // +------+ int main () { struct list *lst, *lst1; // Create the empty list. EXPERIMENT (lst = new_list()); PRINT_LIST (lst); EXPERIMENT (lst1 = new_list()); PRINT_LIST (lst1); // Add some elements to the front. // EXPERIMENT (list_prepend (lst, "a")); // PRINT_LIST (lst); // EXPERIMENT (list_prepend (lst, "b")); // PRINT_LIST (lst); // Add some elements to the end of lst EXPERIMENT (list_append (lst, "c")); PRINT_LIST (lst); EXPERIMENT (list_append (lst, "d")); PRINT_LIST (lst); // Make sure that we have not modified lst1 PRINT_LIST (lst1); // Check the size PRINT_INT (list_length (lst)); PRINT_INT (list_length (lst1)); // Add a duplicate element to the end. EXPERIMENT (list_append (lst, "a")); PRINT_LIST (lst); // Add another element (just for fun). EXPERIMENT (list_append (lst, "f")); PRINT_LIST (lst); // Check something in the beginning, middle, end PRINT_INT (list_contains (lst, "c")); PRINT_INT (list_contains (lst, "d")); PRINT_INT (list_contains (lst, "f")); PRINT_INT (list_contains (lst, "q")); // Delete a middle element. EXPERIMENT (list_delete (lst, "d")); PRINT_LIST (lst); // Delete the last element EXPERIMENT (list_delete (lst, "f")); PRINT_LIST (lst); // Delete the first element EXPERIMENT (list_delete (lst, "c")); PRINT_LIST (lst); // Delete a non-member element EXPERIMENT (list_delete (lst, "q")); PRINT_LIST (lst); // Delete a non-member element EXPERIMENT (list_delete (lst, "a")); PRINT_LIST (lst); // Delete a non-member element EXPERIMENT (list_delete (lst, "q")); PRINT_LIST (lst); // Check something in the beginning, middle, end PRINT_INT (list_contains (lst, "c")); PRINT_INT (list_contains (lst, "d")); PRINT_INT (list_contains (lst, "f")); PRINT_INT (list_contains (lst, "q")); // Check the length PRINT_INT (list_length (lst)); // Add another element EXPERIMENT (list_append (lst, "x")); PRINT_LIST (lst); // Check the length PRINT_INT (list_length (lst)); return 0; } // main