diff options
Diffstat (limited to 'sysfsutils/test/dlist_test.c')
-rw-r--r-- | sysfsutils/test/dlist_test.c | 329 |
1 files changed, 0 insertions, 329 deletions
diff --git a/sysfsutils/test/dlist_test.c b/sysfsutils/test/dlist_test.c deleted file mode 100644 index d36f5f6..0000000 --- a/sysfsutils/test/dlist_test.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * dlist_test.c - * - * Copyright (C) 2003 Eric J Bohm - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - - -/* Double linked list implementation tester. - */ -#include "dlist.h" -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -// create some dlists put nodes in and out -// use dump -// try list with del_func and without -// use insert, unshift, push -// use pop push mark -// use prev next - -typedef struct simple { - char label[80]; - int number; -} Simple; - - -typedef struct complex { - int cnumber; - Simple *sthing; -} Complex; - -void complex_silly_multiply_by_two( void *a); -int complex_equal(void *a, void *b); -int complex_less(void *a, void *b); -int complex_greater(void *a, void *b); -int complex_comp(void *a, void *b); -void simple_dump(Dlist *); -void simple_dump_rev(Dlist *); -void complex_dump(Dlist *); -void complex_dump_rev(Dlist *); -void complex_out(void *); -void complex_del(void *); -Complex *complex_maker(int,int,char *); -int complex_filter(void *a); - -Simple *simple_maker(int ,char *); - -int main (int argc,char *argv[]) -{ - Dlist *list; - Simple *s1,*s2,*s3,*stemp; - Complex *c1,*c2,*c3, *c4, *ctemp, *cfound; - while(1) - { - s1=simple_maker(1,"one"); - s2=simple_maker(2,"two"); - s3=simple_maker(3,"three"); - if((list=dlist_new(sizeof(Simple)))==NULL) - { - fprintf(stderr,"ERR dlist_new fail\n"); - return(2); - } - dlist_push(list,s1); - dlist_push(list,s2); - dlist_push(list,s3); - printf("count is %ld\n",list->count); - simple_dump(list); - simple_dump_rev(list); - stemp=dlist_pop(list); - printf("popped %s\n",stemp->label); - simple_dump(list); - printf("pushed\n"); - dlist_push(list,s3); - simple_dump(list); - stemp=dlist_shift(list); - printf("shifted %s\n",stemp->label); - simple_dump(list); - printf("unshifted\n"); - dlist_unshift(list,stemp); - simple_dump(list); - dlist_destroy(list); - c1=complex_maker(1,1,"one"); - c2=complex_maker(2,2,"two"); - c3=complex_maker(3,3,"three"); - if((list=dlist_new_with_delete(sizeof(Complex),complex_del))==NULL) - { - fprintf(stderr,"ERR dlist_new fail\n"); - return(2); - } - if(dlist_insert_sorted(list,c1,complex_less)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - printf("sorted insert 1\n"); - if(dlist_insert_sorted(list,c3,complex_less)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - if(dlist_insert_sorted(list,c2,complex_less)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - printf("sorted insert 2\n"); - printf("ascending sorted output\n"); - complex_dump(list); - dlist_transform(list,complex_silly_multiply_by_two); - printf("transform multi by 2 output\n"); - complex_dump(list); - ctemp=complex_maker(6,6,"three"); - if((cfound=(Complex *) dlist_find_custom(list,ctemp,complex_equal))!=NULL) - - { - printf("found %d as %d in list\n",ctemp->cnumber,cfound->cnumber); - } else { - printf("ERROR find failed on %d \n",ctemp->cnumber); - return(3); - } - complex_del(ctemp); - dlist_destroy(list); - c1=complex_maker(1,1,"one"); - c2=complex_maker(2,2,"two"); - c3=complex_maker(3,3,"three"); - if((list=dlist_new_with_delete(sizeof(Complex),complex_del))==NULL) - { - fprintf(stderr,"ERR dlist_new fail\n"); - return(2); - } - if(dlist_insert_sorted(list,c1,complex_greater)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - printf("greater sorted insert 1\n"); - if(dlist_insert_sorted(list,c3,complex_greater)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - printf("greater sorted insert 3\n"); - if(dlist_insert_sorted(list,c2,complex_greater)==NULL) - { - fprintf(stderr,"ERR dlist_insert fail\n"); - return(2); - } - printf("greater sorted insert 2\n"); - printf("descending sorted output using transform\n"); - dlist_transform(list,complex_out); - dlist_destroy(list); - c1=complex_maker(1,1,"one"); - c2=complex_maker(2,2,"two"); - c3=complex_maker(3,3,"three"); - c4=complex_maker(4,4,"four"); - if((list=dlist_new_with_delete(sizeof(Complex),complex_del))==NULL) - { - fprintf(stderr,"ERR dlist_new fail\n"); - return(2); - } - dlist_push(list,c2); - dlist_push(list,c1); - dlist_push(list,c4); - dlist_push(list,c3); - printf("unsorted custom\n"); - complex_dump(list); - printf("unsorted custom reversed\n"); - complex_dump_rev(list); - dlist_sort_custom(list,complex_comp); - printf("custom sorted output\n"); - complex_dump(list); - - dlist_filter_sort(list, complex_filter, complex_comp); - printf("custom filtered and sorted output\n"); - complex_dump(list); - dlist_destroy(list); - } - return(0); -} - -void simple_dump (Dlist *list) -{ - Simple *thisone; - printf("count %ld \n",list->count); - dlist_for_each_data(list,thisone,Simple) - { - printf("label %s number %d \n",thisone->label,thisone->number); - } - -} -void simple_dump_rev (Dlist *list) -{ - Simple *thisone; - printf("rev count %ld \n",list->count); - dlist_for_each_data_rev(list,thisone,Simple) - { - printf("label %s number %d \n",thisone->label,thisone->number); - } -} - -Simple * simple_maker(int snumber,char *label) -{ - Simple *stemp; - if((stemp=malloc(sizeof(Simple)))==NULL) - { - fprintf(stderr,"ERR malloc fail\n"); - return(NULL); - } - stemp->number=snumber; - strcpy(stemp->label,label); - return(stemp); -} - -Complex * complex_maker(int cnumber, int snumber, char* label) -{ - Complex *ctemp; - if((ctemp=malloc(sizeof(Complex)))==NULL) - { - fprintf(stderr,"ERR malloc fail\n"); - return(NULL); - } - ctemp->cnumber=cnumber; - ctemp->sthing=simple_maker(snumber,label); - return(ctemp); -} - -void complex_out(void *data) -{ - Complex *thisone=(Complex *)data; - printf("cnumber %d label %s number %d \n",thisone->cnumber,thisone->sthing->label,thisone->sthing->number); -} - -/** - * return 1 if a==b, else 0 - */ -int complex_equal(void *a, void *b) -{ - if((((Complex *)a)->cnumber==((Complex *)b)->cnumber) - && (((Complex *)a)->sthing->number== - ((Complex *)b)->sthing->number) - && strcmp(((Complex *)a)->sthing->label, - ((Complex *)b)->sthing->label)==0) - return(1); - return(0); -} - -/** for sorting - * return 1 if a<b, else 0 - */ -int complex_less(void *a, void *b) -{ - return( ((Complex *)a)->cnumber < ((Complex *)b)->cnumber ); -} - -/** for sorting - * return 1 if a>b, else 0 - */ -int complex_greater(void *a, void *b) -{ - return( ((Complex *)a)->cnumber > ((Complex *)b)->cnumber ); -} - -int complex_comp(void *a, void *b) -{ - return( ((Complex *)a)->cnumber - ((Complex *)b)->cnumber ); -} - -void complex_silly_multiply_by_two( void *a) -{ - ((Complex *)a)->cnumber=((Complex *)a)->cnumber*2; - ((Complex *)a)->sthing->number=((Complex *)a)->sthing->number*2; -} - -void complex_dump (Dlist *list) -{ - Complex *thisone; - dlist_start(list); - printf("count %ld \n",list->count); - dlist_for_each_data(list,thisone,Complex) - { - printf("cnumber %d label %s number %d \n",thisone->cnumber,thisone->sthing->label,thisone->sthing->number); - } - -} - -void complex_dump_rev (Dlist *list) -{ - Complex *thisone; - dlist_start(list); - printf("count %ld \n",list->count); - dlist_for_each_data_rev(list,thisone,Complex) - { - printf("cnumber %d label %s number %d \n",thisone->cnumber,thisone->sthing->label,thisone->sthing->number); - } - -} - -void complex_del (void *item) -{ - Complex *corpse=item; - printf("freeing complex\n"); - free(corpse->sthing); - free(corpse); -} - -int complex_filter(void *a) -{ - Complex *c = (Complex *)a; - - if (c->cnumber >= 2 && c->cnumber <= 3) - return 1; - else - return 0; -} |