]> git.sur5r.net Git - openldap/blob - libraries/libavl/testavl.c
71939f4985d0d6a4213cbead4d71682c7fa67b40
[openldap] / libraries / libavl / testavl.c
1 /* testavl.c - Test Tim Howes AVL code */
2 #include <sys/types.h>
3 #include <stdio.h>
4 #include "avl.h"
5
6 char *strdup( s )
7 char    *s;
8 {
9         char    *new;
10
11         if ( (new = (char *) malloc( strlen( s ) + 1 )) == NULL )
12                 return( NULL );
13
14         strcpy( new, s );
15
16         return( new );
17 }
18
19 main( argc, argv )
20 int     argc;
21 char    **argv;
22 {
23         Avlnode *tree = NULLAVL;
24         char    command[ 10 ];
25         char    name[ 80 ];
26         char    *p;
27         int     free(), strcmp();
28
29         printf( "> " );
30         while ( fgets( command, sizeof( command ), stdin ) != NULL ) {
31                 switch( *command ) {
32                 case 'n':       /* new tree */
33                         ( void ) avl_free( tree, free );
34                         tree = NULLAVL;
35                         break;
36                 case 'p':       /* print */
37                         ( void ) myprint( tree );
38                         break;
39                 case 't':       /* traverse with first, next */
40                         printf( "***\n" );
41                         for ( p = (char * ) avl_getfirst( tree );
42                             p != NULL; p = (char *) avl_getnext( tree, p ) )
43                                 printf( "%s\n", p );
44                         printf( "***\n" );
45                         break;
46                 case 'f':       /* find */
47                         printf( "data? " );
48                         if ( fgets( name, sizeof( name ), stdin ) == NULL )
49                                 exit( 0 );
50                         name[ strlen( name ) - 1 ] = '\0';
51                         if ( (p = (char *) avl_find( tree, name, strcmp ))
52                             == NULL )
53                                 printf( "Not found.\n\n" );
54                         else
55                                 printf( "%s\n\n", p );
56                         break;
57                 case 'i':       /* insert */
58                         printf( "data? " );
59                         if ( fgets( name, sizeof( name ), stdin ) == NULL )
60                                 exit( 0 );
61                         name[ strlen( name ) - 1 ] = '\0';
62                         if ( avl_insert( &tree, strdup( name ), strcmp, 
63                             avl_dup_error ) != OK )
64                                 printf( "\nNot inserted!\n" );
65                         break;
66                 case 'd':       /* delete */
67                         printf( "data? " );
68                         if ( fgets( name, sizeof( name ), stdin ) == NULL )
69                                 exit( 0 );
70                         name[ strlen( name ) - 1 ] = '\0';
71                         if ( avl_delete( &tree, name, strcmp ) == NULL )
72                                 printf( "\nNot found!\n" );
73                         break;
74                 case 'q':       /* quit */
75                         exit( 0 );
76                         break;
77                 case '\n':
78                         break;
79                 default:
80                         printf("Commands: insert, delete, print, new, quit\n");
81                 }
82
83                 printf( "> " );
84         }
85         /* NOTREACHED */
86 }
87
88 static ravl_print( root, depth )
89 Avlnode *root;
90 int     depth;
91 {
92         int     i;
93
94         if ( root == 0 )
95                 return;
96
97         ravl_print( root->avl_right, depth+1 );
98
99         for ( i = 0; i < depth; i++ )
100                 printf( "   " );
101         printf( "%s %d\n", root->avl_data, root->avl_bf );
102
103         ravl_print( root->avl_left, depth+1 );
104 }
105
106 myprint( root )
107 Avlnode *root;
108 {
109         printf( "********\n" );
110
111         if ( root == 0 )
112                 printf( "\tNULL\n" );
113         else
114                 ( void ) ravl_print( root, 0 );
115
116         printf( "********\n" );
117 }