/*
 *      itest
 */

#include <stdio.h>
#include "db.h"

main()
{
        DATA_SET ds;
        char     data[50];
        int      i,j;

        memset(data,' ',50);
        printf("itest - Test ISAM file routines\n\n");
        rcreate();
        printf("...test file created...\n\n");

        ds = db_open("", "itest.dat");
        if (db_error)
        {       printf("Open Failure - %s\n", db_error_msg(db_error));
                exit(0);
        }

        printf("...adding 100 records in reverse ...\n");
        for (i=100; i>0; i--)
        {       printf("%d\n",i);
                sprintf(data,"%05d",i);
                db_add(ds, data);
                if (db_error)
                {       printf("Add Failure - %s\n", db_error_msg(db_error));
                        exit(0);
                }
        }
        printf("...add complete...\n\n");

	printf("...read forward...\n\n");
        db_read_first(ds, data);
        while (!db_error)
        {       printf("%5s\n",data);
                db_read_next(ds, data);
        }
        if (db_error != DB_END_OF_FILE)
        {       printf("Read Sequential - %s\n", db_error_msg(db_error));
                exit(0);
        }
	printf("...read forward complete...\n\n");

	printf("...read reverse...\n\n");
	db_read_last(ds, data);
        while (!db_error)
        {       printf("%5s\n",data);
		db_read_prev(ds, data);
        }
        if (db_error != DB_END_OF_FILE)
        {       printf("Read Sequential - %s\n", db_error_msg(db_error));
                exit(0);
        }
	printf("...read reverse complete...\n\n");

        printf("...find and delete...\n");
        for (i=1; i<101; i++)
        {       printf("%d\n",i);
                sprintf(data,"%05d",i);

                db_find(ds, data, data, 0);
                if (db_error)
                {       printf("Find Failure - %s\n", db_error_msg(db_error));
                        exit(0);
                }
                db_delete(ds);
                if (db_error)
                {       printf("Delete Failure - %s\n", db_error_msg(db_error));
                        exit(0);
                }

/*              for (j=i+1; j<101; j++)
 *              {       sprintf(data,"%05d",j);
 *                      db_find(ds, data, data, 0);
 *                      printf("%d-%d\n",i,j);
 *
 *                      if (db_error)
 *                      {       printf("Find Failure - %s\n", db_error_msg(db_error));
 *                              exit(0);
 *                      }
 *              }
 */
        }
        printf("...find and delete complete...\n\n");

        printf("...adding 100 records (again) ...\n");
        for (i=1; i<100; i++)
        {       printf("%d\n",i);
                sprintf(data,"%05d",i);
                db_add(ds, data);
                if (db_error)
                {       printf("Add Failure - %s\n", db_error_msg(db_error));
                        exit(0);
                }
        }
        printf("...add complete...\n\n");

        db_close(ds);
        unlink("itest.dat");
}

/*
 *      rcreate - create our test random file
 */

rcreate()
{
        FILE_HDR fh;
        DATA_SET ds;
        char    *calloc();

        fh = (FILE_HDR) calloc(1, sizeof(struct db_file_hdr));

        fh->fh_file_type    = DB_INDEX;
        fh->fh_data_size    =  50;
        fh->fh_key_size     =   5;

        ds = db_create("", "itest.dat", fh);
        if (db_error)
        {       printf("Create Failure - %s\n", db_error_msg(db_error));
                exit(0);
        }

        db_close(ds);
        if (db_error)
        {       printf("Close Failure - %s\n", db_error_msg(db_error));
                exit(0);
        }
}
