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