/*------------------------------------------------------------------*/ /* testlist.c (Version 4: Iterator) */ /*------------------------------------------------------------------*/ #include "list.h" #include #include /*------------------------------------------------------------------*/ static void printString(void **ppvItem, void *pvFormat) /* Print string *ppvItem using format pvFormat. */ { char *pcItem = (char*)*ppvItem; char *pcFormat = (char*)pvFormat; printf(pcFormat, pcItem); } /*------------------------------------------------------------------*/ int main(int argc, char *argv[]) /* Test the List_T and ListIter_T ADTs. */ { List_T oList; ListIter_T oListIter; int i; int iLength; char **ppcArray; /* Test List_new. */ oList = List_new(); /* Test List_addFirst and List_addLast. */ List_addFirst(oList, "Ruth"); List_addFirst(oList, "Gehrig"); List_addLast(oList, "Mantle"); List_addLast(oList, "Jeter"); /* Test List_getLength. */ printf("-----------------------------------------------------\n"); iLength = List_getLength(oList); printf("List length: %d\n", iLength); /* Test List_getFirst and List_getLast. */ printf("-----------------------------------------------------\n"); printf("%s\n", (char*)List_getFirst(oList)); printf("%s\n", (char*)List_getLast(oList)); /* Test List_toArray. */ printf("-----------------------------------------------------\n"); printf("This output should list 3 players and their positions\n"); printf("-----------------------------------------------------\n"); iLength = List_getLength(oList); ppcArray = (char**)calloc(iLength, sizeof(char*)); List_toArray(oList, (void**)ppcArray); for (i = 0; i < iLength; ++i) printf("%s\n", ppcArray[i]); free(ppcArray); /* Test List_map. */ printf("-----------------------------------------------------\n"); List_map(oList, printString, "%s\n"); /* Test List_removeFirst and List_removeLast. */ printf("-----------------------------------------------------\n"); List_removeFirst(oList); List_removeLast(oList); List_map(oList, printString, "%s\n"); /* Test ListIter in the forward direction. */ printf("-----------------------------------------------------\n"); oListIter = ListIter_new(oList); ListIter_selectFirst(oListIter); while (ListIter_selectionIsValid(oListIter)) { printf("%s\n", (char*)ListIter_get(oListIter)); ListIter_selectNext(oListIter); } ListIter_free(oListIter); /* Test ListIter in the backward direction. */ printf("-----------------------------------------------------\n"); oListIter = ListIter_new(oList); ListIter_selectLast(oListIter); while (ListIter_selectionIsValid(oListIter)) { printf("%s\n", (char*)ListIter_get(oListIter)); ListIter_selectPrev(oListIter); } ListIter_free(oListIter); /* Test insertion via a ListIter. */ printf("-----------------------------------------------------\n"); oListIter = ListIter_new(oList); ListIter_selectFirst(oListIter); ListIter_selectNext(oListIter); ListIter_insertPrev(oListIter, "Berra"); ListIter_insertNext(oListIter, "Munson"); List_map(oList, printString, "%s\n"); ListIter_free(oListIter); /* Test removal via a ListIter. */ printf("-----------------------------------------------------\n"); oListIter = ListIter_new(oList); ListIter_selectFirst(oListIter); ListIter_selectNext(oListIter); ListIter_removeAndSelectNext(oListIter); ListIter_removeAndSelectPrev(oListIter); List_map(oList, printString, "%s\n"); ListIter_free(oListIter); /* Test List_free. */ List_free(oList); return 0; }