From d8c4b80918734ad72d8478ab122e7a1d6b015d3a Mon Sep 17 00:00:00 2001 From: Rich Graham Date: Wed, 4 Feb 2004 23:54:22 +0000 Subject: [PATCH] list.h - remove prototype for unimplemented and unused function. list.c - fix bug in lam_list_insert - loop had wrong ending parameter list_test.c - add more tests This commit was SVN r649. --- src/lam/lfc/list.c | 3 +- src/lam/lfc/list.h | 7 +- test/lam/lfc/list_test.c | 254 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 256 insertions(+), 8 deletions(-) diff --git a/src/lam/lfc/list.c b/src/lam/lfc/list.c index f4f07988e7..7652e82f51 100644 --- a/src/lam/lfc/list.c +++ b/src/lam/lfc/list.c @@ -96,8 +96,9 @@ int lam_list_insert(lam_list_t *list, lam_list_item_t *item, long long idx) } else { + /* pointer to element 0 */ ptr = list->lam_list_head.lam_list_next; - for ( i = 0; i < idx; i++ ) + for ( i = 0; i < idx-1; i++ ) ptr = ptr->lam_list_next; next = ptr->lam_list_next; diff --git a/src/lam/lfc/list.h b/src/lam/lfc/list.h index 0d83554994..b90f29b44c 100644 --- a/src/lam/lfc/list.h +++ b/src/lam/lfc/list.h @@ -160,6 +160,7 @@ static inline lam_list_item_t *lam_list_remove_item if (!found) { fprintf(stderr," Warning :: lam_list_remove_item - the item %p is not on the list %p \n",item,list); fflush(stderr); + return (lam_list_item_t *)NULL; } #endif @@ -180,12 +181,6 @@ extern "C" { */ void lam_list_append(lam_list_t *list, lam_list_item_t *item); - - /* - * Remove item from the list. - */ - lam_list_item_t* lam_list_remove(lam_list_t *list, lam_list_item_t *item); - /* Adds item to list at index and retains item. Returns 1 if successful, 0 otherwise. 0 <= idx < length_m diff --git a/test/lam/lfc/list_test.c b/test/lam/lfc/list_test.c index 74bb975e35..c5a431a897 100644 --- a/test/lam/lfc/list_test.c +++ b/test/lam/lfc/list_test.c @@ -2,19 +2,34 @@ * $HEADER$ */ +#include + #include "support.h" #include "lam/lfc/list.h" +/* + * Data type used for testing + */ +typedef struct test_data { + /* link list data structure */ + lam_list_item_t ll_element; + /* test data */ + int data; +} test_data_t; + int main(int argc, char **argv) { /* local variables */ lam_list_t list; lam_list_type_t list_type,list_type_out; - size_t list_size; + size_t list_size,tmp_list_size; + int size_elements,i,indx,error_cnt; + test_data_t *elements, *ele; test_init("List"); /* initialize list */ + lam_list_set_size(&list,0Xdeadbeaf); lam_list_init(&list); /* check length of list */ @@ -36,6 +51,243 @@ int main(int argc, char **argv) test_failure(" lam_list_set/get_type"); } + /* check set_size/get_size */ + tmp_list_size=4; + lam_list_set_size(&list,tmp_list_size); + list_size=lam_list_get_size(&list); + if( list_size == tmp_list_size ) { + test_success(); + } else { + test_failure(" lam_list_set_size/lam_list_get_size"); + } + lam_list_set_size(&list,0); + + /* create test elements */ + size_elements=4; + elements=(test_data_t *)malloc(sizeof(test_data_t)*size_elements); + assert(elements); + for(i=0 ; i < size_elements ; i++) { + (elements+i)->data=i; + } + + /* populate list */ + for(i=0 ; i < size_elements ; i++) { + lam_list_append(&list,(lam_list_item_t *)(elements+i)); + } + list_size=lam_list_get_size(&list); + if( list_size == size_elements ) { + test_success(); + } else { + test_failure(" populating list"); + } + + /* check that list is ordered as expected */ + i=0; + error_cnt=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + if( ele->data != i ) + error_cnt++; + i++; + } + if( 0 == error_cnt ) { + test_success(); + } else { + test_failure(" error in list order "); + } + + /* check lam_list_get_first */ + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_get_first(&list); + assert(ele); + if( 0 == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_get_first"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( size_elements == i ) { + test_success(); + } else { + test_failure(" error in lam_list_get_first - list size changed "); + } + + /* check lam_list_get_last */ + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_get_last(&list); + assert(ele); + if( (size_elements-1) == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_get_last"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( size_elements == i ) { + test_success(); + } else { + test_failure(" error in lam_list_get_first - list size changed "); + } + + /* check lam_list_remove_first */ + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_remove_first(&list); + assert(ele); + if( 0 == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_remove_first"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( (size_elements-1) == i ) { + test_success(); + } else { + test_failure(" error in lam_list_remove_first - list size changed "); + } + + /* test lam_list_prepend */ + lam_list_prepend(&list,(lam_list_item_t *)elements); + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_get_first(&list); + assert(ele); + if( 0 == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_prepend"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( size_elements == i ) { + test_success(); + } else { + test_failure(" error in lam_list_prepend - list size changed "); + } + + /* check lam_list_remove_last */ + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_remove_last(&list); + assert(ele); + if( (size_elements-1) == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_remove_last"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( (size_elements-1) == i ) { + test_success(); + } else { + test_failure(" error in lam_list_remove_last - list size changed "); + } + + /* test lam_list_append */ + lam_list_append(&list,(lam_list_item_t *)(elements+size_elements-1)); + ele = (test_data_t *)NULL; + ele = (test_data_t *) lam_list_get_last(&list); + assert(ele); + if( (size_elements-1) == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_append"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( size_elements == i ) { + test_success(); + } else { + test_failure(" error in lam_list_append - list size changed "); + } + + /* remove element from list */ + indx=size_elements/2; + if( 0 == indx ) + indx=1; + assert(2 <= size_elements); + ele = (test_data_t *)NULL; + ele = (test_data_t *) + lam_list_remove_item(&list,(lam_list_item_t *)(elements+indx)); + assert(ele); + if( (indx-1) == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_remove - previous"); + } + ele=(test_data_t *)(((lam_list_item_t *)ele)->lam_list_next); + if( (indx+1) == ele->data ) { + test_success(); + } else { + test_failure(" error in lam_list_remove - next"); + } + i=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + i++; + } + if( (size_elements-1) == i ) { + test_success(); + } else { + test_failure(" error in lam_list_remove - list size changed incorrectly"); + } +#ifdef LAM_ENABLE_DEBUG + /* try and remove a non existant element from the list - + * testing debug code */ + ele = (test_data_t *) + lam_list_remove_item(&list,(lam_list_item_t *)(elements+indx)); + if( ((test_data_t *)NULL) == ele ) { + test_success(); + } else { + test_failure(" error in lam_list_remove - trying to remove element not on list"); + } +#endif /* LAM_ENABLE_DEBUG */ + /* test the insert function */ + i=lam_list_insert(&list,(lam_list_item_t *)(elements+indx),indx); + if( 1 == i ) { + test_success(); + } else { + test_failure(" error in lam_list_remove_item \n"); + } + i=0; + error_cnt=0; + for(ele = (test_data_t *) lam_list_get_first(&list); + ele != (test_data_t *) lam_list_get_end(&list); + ele = (test_data_t *) ((lam_list_item_t *)ele)->lam_list_next) { + if( ele->data != i ) + error_cnt++; + i++; + } + if( 0 == error_cnt ) { + test_success(); + } else { + test_failure(" error in list order - lam_list_remove_item "); + } test_finalize(); return 0;