/* * test program for sorted list of ints * no inputs */ #include #include #include "sorted-int-list.h" /******************************************************************************* * * declarations (prototypes) of helper functions */ /* convenience function to print list */ void print_list(sorted_int_list_node_t * lst); /* functions to test sorted-list functions verbosely */ void test_insert(sorted_int_list_node_t ** lst_p, int n); void test_remove(sorted_int_list_node_t ** lst_p, int n); void test_count(sorted_int_list_node_t * lst, int n); /* function to display test data in sorted order */ void print_test_data(int data[], size_t sz); /******************************************************************************* * * main program */ int main(void) { sorted_int_list_node_t * list = NULL; int insert_data[] = { 6, 2, 4, 4, 0, 8 }; int count_data[] = { 0, 2, 4, 8, -1, 3, 100}; int remove_data[] = { 4, 0, 8, 0, 8}; for (int i = 0; i < sizeof(insert_data)/sizeof(insert_data[0]); ++i) { test_insert(&list, insert_data[i]); } print_test_data(insert_data, sizeof(insert_data)/sizeof(insert_data[0])); for (int i = 0; i < sizeof(count_data)/sizeof(count_data[0]); ++i) { test_count(list, count_data[i]); } for (int i = 0; i < sizeof(remove_data)/sizeof(remove_data[0]); ++i) { test_remove(&list, remove_data[i]); } test_insert(&list, 0); test_insert(&list, 8); list = sorted_int_list_remove_all(list); printf("after removing all elements "); print_list(list); printf("\n"); return EXIT_SUCCESS; } /******************************************************************************* * * definitions (implementation) of helper functions */ void print_list(sorted_int_list_node_t * lst) { printf("["); sorted_int_list_print(lst, stdout, " %d"); printf(" ]"); } void test_insert(sorted_int_list_node_t ** lst_p, int n) { printf("inserting %d into list ", n); print_list(*lst_p); *lst_p = sorted_int_list_insert(*lst_p, n); putchar('\n'); printf("result "); print_list(*lst_p); printf("\n"); } void test_remove(sorted_int_list_node_t ** lst_p, int n) { printf("removing %d from list ", n); print_list(*lst_p); *lst_p = sorted_int_list_remove(*lst_p, n); putchar('\n'); printf("result "); print_list(*lst_p); printf("\n"); } void test_count(sorted_int_list_node_t * lst, int n) { printf("counting occurrences of %d in list ", n); print_list(lst); printf("\n"); printf("result %d\n", sorted_int_list_count(lst, n)); } int int_compare(const void * e1, const void * e2) { int * i1 = (int *) e1; int * i2 = (int *) e2; if (*i1 < *i2) return -1; else if (*i1 > *i2) return 1; else return 0; } void print_test_data(int data[], size_t sz) { int sorted[sz]; for (int i = 0; i < sz; ++i) sorted[i] = data[i]; qsort(sorted, sz, sizeof(data[0]), &int_compare); printf("test data in order ["); for (int i = 0; i < sz; ++i) printf(" %d", sorted[i]); printf(" ]\n"); }