Files
lcdproc/tests/LL_test.c
T
1999-12-09 23:15:14 +00:00

157 lines
2.2 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include "LL.h"
/* Tested functions:
LL_New();
LL_Rewind();
LL_AddNode();
LL_Next();
LL_Get();
LL_Push();
LL_Unshift();
LL_InsertNode();
LL_Roll();
LL_UnRoll();
LL_SwapNodes();
LL_Sort();
LL_Find();
*/
typedef struct my_struct
{
int num;
char str[16];
} my_struct;
int list_list(LL *list)
{
my_struct *foo;
if(!list) return -1;
printf("Listing the list contents...\n");
printf(" Items: %i\n", LL_Length(list));
LL_Rewind(list);
do{
foo = (my_struct *)LL_Get(list);
if(!foo)
{
printf("Can't read list data\n");
return -1;
}
printf("\tItem: %i\n", foo->num);
} while(LL_Next(list) == 0);
return 0;
}
int compare(void *one, void *two)
{
my_struct *a, *b;
if(!one || !two) return 0;
a = (my_struct *)one;
b = (my_struct *)two;
return (a->num - b->num);
}
int main()
{
LL *list = NULL;
my_struct *foo;
my_struct bar;
int i,j;
list = LL_new();
if(!list)
{
printf("Cannot create list.\n");
return -1;
}
for(i=0; i<10; i++)
{
foo = malloc(sizeof(my_struct));
if(!foo)
{
printf("Can't allocate new struct\n");
return -1;
}
foo->num = i;
LL_InsertNode(list, (void *)foo);
printf("Added node: %i\n", foo->num);
}
if(list_list(list) != 0) return -1;
printf("Sorting the list...\n");
if(LL_Sort(list, compare) < 0)
{
printf("Error sorting.\n");
return -1;
}
if(list_list(list) != 0) return -1;
bar.num = 5;
printf("Searching for item \"5\"\n");
LL_Rewind(list);
foo = LL_Find(list, compare, &bar);
if(foo)
{
printf(" Found... %i\n", foo->num);
}
printf("Deallocating list...\n");
LL_Rewind(list);
do{
foo = LL_Get(list);
free(foo);
} while(LL_Next(list) == 0);
if(LL_Destroy(list) == 0) return 0;
printf("Attempting to access list...\n");
printf("List = %x\n", list);
LL_Rewind(list);
do{
foo = LL_Get(list);
if(foo) printf(" Item: %i\n", foo->num);
} while(LL_Next(list) == 0);
return 0;
}