int dllist_test() { struct mynode *mn[NUM_NODES]; LPDL_NODE node; struct mynode *data; /* *insert */ int i = 0; Debug_Message(LOG_FULL, "insert node from 1 to NUM_NODES(32): \n"); for (; i < NUM_NODES; i++) { mn[i] = (struct mynode *)malloc(sizeof(struct mynode)); mn[i]->string = (char *)malloc(sizeof(char) * 4); sprintf(mn[i]->string, "%d", i); dll_insert(&mytree, mn[i]); } /* *search */ Debug_Message(LOG_FULL, "search all nodes: \n"); for (node = dl_first(&mytree); node; node = dl_next(node)) { struct mynode *data; container_of(data, node, struct mynode, node); Debug_Message(LOG_TEST, "key = %s\n", data->string); } /* *delete */ Debug_Message(LOG_FULL, "delete node 0: \n"); data = dll_search(&mytree, "0"); if (data) { dl_remove_node(&data->node, &mytree); dll_free(data); } /* *delete again*/ Debug_Message(LOG_FULL, "delete node 10: \n"); data = dll_search(&mytree, "10"); if (data) { dl_remove_node(&data->node, &mytree); dll_free(data); } /* *delete once again*/ Debug_Message(LOG_FULL, "delete node 31: \n"); data = dll_search(&mytree, "31"); if (data) { dl_remove_node(&data->node, &mytree); dll_free(data); } /* *search again*/ Debug_Message(LOG_FULL, "search again:\n"); for (node = dl_first(&mytree); node; node = dl_next(node)) { struct mynode *data; container_of(data, node, struct mynode, node); Debug_Message(LOG_TEST,"key = %s\n", data->string); } return 0; }
int main(void) { dict_h lh ; dict_iter iter ; int i ; int *ip ; lh = dll_create( int_comp, int_kcomp, 0 ) ; for ( i = 0 ; i < N ; i++ ) { nums[ i ] = 10-i ; if ( dll_insert( lh, &nums[ i ] ) != DICT_OK ) { printf( "Failed at %d\n", i ) ; exit( 1 ) ; } } printf( "Successor test\n" ) ; for ( ip=INTP(dll_minimum( lh )) ; ip ; ip=INTP(dll_successor( lh, ip )) ) printf( "%d\n", *ip ) ; printf( "Predecessor test\n" ) ; for ( ip=INTP(dll_maximum( lh )) ; ip ; ip=INTP(dll_predecessor( lh, ip )) ) printf( "%d\n", *ip ) ; printf( "Search/delete test\n" ) ; i = 7 ; ip = INTP( dll_search( lh, &i ) ) ; if ( ip == NULL ) printf( "Search failed\n" ) ; else if ( dll_delete( lh, ip ) != DICT_OK ) { printf( "Delete failed\n" ) ; exit( 0 ) ; } printf( "Successor test 2\n" ) ; for ( ip=INTP(dll_minimum( lh )) ; ip ; ip=INTP(dll_successor( lh, ip )) ) printf( "%d\n", *ip ) ; printf( "Predecessor test 2\n" ) ; for ( ip=INTP(dll_maximum( lh )) ; ip ; ip=INTP(dll_predecessor( lh, ip )) ) printf( "%d\n", *ip ) ; printf( "Iteration test\n" ) ; iter = dll_iterate( lh, DICT_FROM_START ) ; while (( ip = INTP( dll_nextobj( lh, iter ) ) )) if ( *ip == 5 ) (void) dll_delete( lh, ip ) ; else printf( "%d\n", *ip ) ; exit( 0 ) ; }