/*------------------------------------------------------------------*/ /* testlist.c */ /*------------------------------------------------------------------*/ #include #include #include "list.h" #define BOOLEAN int #define TRUE 1 #define FALSE 0 #define ASSURE(b) assure(b, __LINE__) void assure(BOOLEAN bSuccessful, int iLineNum) { if (! bSuccessful) printf("Test at line %d failed.\n", iLineNum); } void myStringPrintf(void **ppvElement, void *pvFormat) { char *pcElement = (char*)*ppvElement; char *pcFormat = (char*)pvFormat; printf(pcFormat, pcElement); } void myStringConcat(void **ppvElement, void *pvConcat) { char *pcElement = (char*)*ppvElement; char *pcConcat = (char*)pvConcat; strcat(pcConcat, pcElement); } int main(int argc, char *argv[]) { /* Test a List whose keys are strings and whose values are strings. */ List_T oList; ListIter_T oListIter; ListIterR_T oListIterR; char pcConcat[256] = ""; char *pcElement; unsigned long ulLength; char **ppcArray; unsigned long ul; /* Test List_new, List_addFirst, List_addLast, List_getFirst, List_getLast. */ oList = List_new(); List_addFirst(oList, "BabeRuth"); List_addFirst(oList, "LouGehrig"); List_addLast(oList, "MickeyMantle"); List_addLast(oList, "DerekJeter"); pcElement = (char*)List_getFirst(oList); ASSURE(pcElement != NULL); ASSURE((pcElement != NULL) && (strcmp(pcElement, "LouGehrig") == 0)); pcElement = (char*)List_getLast(oList); ASSURE(pcElement != NULL); ASSURE((pcElement != NULL) && (strcmp(pcElement, "DerekJeter") == 0)); /* Test List_length. */ ulLength = List_length(oList); ASSURE(ulLength == 4); /* Test List_map. */ printf("-----------------------------------\n"); List_map(oList, myStringPrintf, "%s\n"); strcpy(pcConcat, ""); List_map(oList, myStringConcat, pcConcat); ASSURE(pcConcat != NULL); ASSURE((pcConcat != NULL) && (strcmp(pcConcat, "LouGehrigBabeRuthMickeyMantleDerekJeter") == 0)); /* Test ListIter_new, ListIter_hasNext, ListIter_next, ListIter_free. */ printf("-----------------------------------\n"); oListIter = ListIter_new(oList); while (ListIter_hasNext(oListIter)) { pcElement = (char*)ListIter_next(oListIter); ASSURE(pcElement != NULL); ASSURE(strstr("LouGehrigBabeRuthMickeyMantleDerekJeter", pcElement) != NULL); printf("%s\n", pcElement); } ListIter_free(oListIter); /* Test ListIterR_new, ListIterR_hasPrevious, ListIterR_previous, ListIterR_free. */ printf("-----------------------------------\n"); oListIterR = ListIterR_new(oList); while (ListIterR_hasPrevious(oListIterR)) { pcElement = (char*)ListIterR_previous(oListIterR); ASSURE(pcElement != NULL); ASSURE(strstr("LouGehrigBabeRuthMickeyMantleDerekJeter", pcElement) != NULL); printf("%s\n", pcElement); } ListIterR_free(oListIterR); /* Test List_toArray */ printf("-----------------------------------\n"); ulLength = List_length(oList); ppcArray = (char**)calloc(ulLength, sizeof(char*)); List_toArray(oList, (void**)ppcArray); for (ul = 0; ul < ulLength; ++ul) { pcElement = ppcArray[ul]; ASSURE(pcElement != NULL); ASSURE(strstr("LouGehrigBabeRuthMickeyMantleDerekJeter", pcElement) != NULL); printf("%s\n", pcElement); } free(ppcArray); /* Test List_removeFirst, List_removeLast. */ printf("-----------------------------------\n"); List_removeFirst(oList); List_removeLast(oList); List_map(oList, myStringPrintf, "%s\n"); strcpy(pcConcat, ""); List_map(oList, myStringConcat, pcConcat); ASSURE(pcConcat != NULL); ASSURE((pcConcat != NULL) && (strcmp(pcConcat, "BabeRuthMickeyMantle") == 0)); /* Test List_free. */ List_free(oList); return 0; }