which included commits to RCS files with non-trunk default branches. git-svn-id: svn://10.65.10.50/trunk@976 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			281 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			281 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* t4write2.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved.
 | 
						|
 | 
						|
   Tests Code Base 'd4seek()' and 'd4write()' routines.
 | 
						|
 | 
						|
   1.  Create databases 't4test.dbf' and 't4test.mdx'.
 | 
						|
 | 
						|
   2.  Write 'n' records with even values
 | 
						|
   2*reccount - 2*n
 | 
						|
   Ex.  For 5 records      8, 6, 4, 2, 0
 | 
						|
   
 | 
						|
 | 
						|
   3.  Seek for a record which has not yet been searched for.
 | 
						|
   Write corresponding Odd Value.   2*n-1
 | 
						|
   Ex.  For 5 records   1, 3, 5, 7, 9
 | 
						|
 | 
						|
   4.  Check the index file.
 | 
						|
   */
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#ifdef __TURBOC__
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
 | 
						|
#include "t4test.h"
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
 | 
						|
CODE4 cb;
 | 
						|
DATA4 *data;
 | 
						|
FIELD4 *field ;
 | 
						|
TAG4 *tag ;
 | 
						|
 | 
						|
static FIELD4INFO fields[] =
 | 
						|
{
 | 
						|
{ "TEST", 'C', 10, 0 },
 | 
						|
{ 0,0,0,0 },
 | 
						|
} ;
 | 
						|
 | 
						|
static TAG4INFO tags[] =
 | 
						|
{
 | 
						|
{ "TAG", "TEST", "", 0, 0 },
 | 
						|
{ 0,0,0,0,0 },
 | 
						|
} ;
 | 
						|
 | 
						|
static int test_write2( D4DISPLAY *display , long num_recs, int do_open )
 | 
						|
{
 | 
						|
  long odd_rec, i_rec ;
 | 
						|
  int  rc ;
 | 
						|
  /*   long count = 1 ;        */
 | 
						|
  /*   long start_check = 94 ; */
 | 
						|
  char buff[11] ;
 | 
						|
 | 
						|
  cb.safety = 0 ;
 | 
						|
 | 
						|
  if ( do_open )
 | 
						|
  {
 | 
						|
    data = d4open( &cb, "T4WRITE2" ) ;
 | 
						|
    if ( data == 0 )
 | 
						|
      t4severe( t4err_data, "01" ) ;
 | 
						|
    if ( d4zap( data, 1L, d4reccount( data ) ) != 0 )
 | 
						|
      t4severe( t4err_zap, "02" ) ;
 | 
						|
  }
 | 
						|
  else
 | 
						|
  {
 | 
						|
    data = d4create( &cb, "T4WRITE2", fields, tags ) ;
 | 
						|
    if ( data == 0 )
 | 
						|
      t4severe( t4err_data, "03" ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  d4opt_start( &cb ) ;
 | 
						|
 | 
						|
  field = d4field( data, "TEST" ) ;
 | 
						|
  if ( field == 0 )
 | 
						|
    t4severe( t4err_field, "04" ) ;
 | 
						|
 | 
						|
  d4display_str( display,  "        Writing Record:  ", 1 ) ;
 | 
						|
 | 
						|
  tag = d4tag( data, "TAG" ) ;
 | 
						|
  /* in ntx, ndx and mdx versions (except fox)can manually increase the levels for better testing */
 | 
						|
#ifndef S4FOX
 | 
						|
#ifndef S4CLIPPER
 | 
						|
  tag->header.keys_max = 4 ;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
  for ( i_rec = 1L; i_rec <= num_recs; i_rec++ )
 | 
						|
  {
 | 
						|
    if ( d4display_quit( display ) )
 | 
						|
      return 1 ;
 | 
						|
 | 
						|
    if ( i_rec % 50 == 0 || i_rec == num_recs )
 | 
						|
    {
 | 
						|
      display->x = (int) 0 ;
 | 
						|
      d4display_str( display,  "        Writing Record:  ", 0 ) ;
 | 
						|
      d4display_num( display, i_rec, 0 ) ;
 | 
						|
    }
 | 
						|
 | 
						|
    if ( d4append_start( data, 0 ) != 0 )
 | 
						|
      t4severe( t4err_append, "05" ) ;
 | 
						|
    f4assign_long( field, 2*num_recs - 2*i_rec ) ;
 | 
						|
    if ( d4append( data ) != 0 )
 | 
						|
      t4severe( t4err_append, "06" ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  d4display_str( display,  "        Checking Index . . .", 1 ) ;
 | 
						|
  d4display_wait( display ) ;
 | 
						|
  rc = d4check( data ) ;
 | 
						|
  d4display_start() ;
 | 
						|
  if ( rc != 0 )
 | 
						|
    t4severe( t4err_check, "07" ) ;
 | 
						|
 | 
						|
  /* Ex. 5 records:  2,3,1,4,0 (ignored),5;
 | 
						|
     Ex. 4 records:  2,3,1,4
 | 
						|
     */
 | 
						|
 | 
						|
  if (  num_recs & 1L )
 | 
						|
    odd_rec = num_recs ;
 | 
						|
  else 
 | 
						|
    odd_rec = num_recs+1 ;
 | 
						|
 | 
						|
  d4display_str( display,  "        Seeking Record:  ", 1 ) ;
 | 
						|
 | 
						|
  for ( i_rec = num_recs/2; i_rec >= 0; )
 | 
						|
  {
 | 
						|
    if ( d4display_quit( display ) )  return 1 ;
 | 
						|
 | 
						|
    if ( i_rec > 0  &&  i_rec <= num_recs )
 | 
						|
    {
 | 
						|
      display->x = (int) 0 ;
 | 
						|
      d4display_str( display,  "        Seeking Record:  ", 0 ) ;
 | 
						|
      d4display_num( display, i_rec, 0 ) ;
 | 
						|
      d4display_str( display,  "          ", 0 ) ;
 | 
						|
 | 
						|
      c4ltoa45( (long) (2*num_recs - 2*i_rec), buff, 10 ) ;
 | 
						|
      buff[10] = '\0' ;
 | 
						|
 | 
						|
      /*         if ( (count++) >= start_check )
 | 
						|
                 {
 | 
						|
                 if ( d4check( data ) != 0 )
 | 
						|
                 t4severe( t4err_check, "XX" ) ;
 | 
						|
                 }
 | 
						|
                 */
 | 
						|
      if ( d4seek( data, buff ) != 0 )
 | 
						|
        t4severe( t4err_seek, "08" ) ;
 | 
						|
 | 
						|
      c4ltoa45( (long) 2*i_rec-1, buff, 10 ) ;
 | 
						|
      f4assign( field, buff ) ;
 | 
						|
      d4write( data, d4recno( data ) ) ;
 | 
						|
      d4write( data, d4recno( data ) ) ;   /* make sure duplicate write works as well */
 | 
						|
    }
 | 
						|
 | 
						|
    if ( i_rec <= num_recs/2 )
 | 
						|
      i_rec = odd_rec-i_rec ;
 | 
						|
    else
 | 
						|
    {
 | 
						|
      i_rec = odd_rec-i_rec ;
 | 
						|
      i_rec -- ;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  d4display_wait( display ) ;
 | 
						|
  rc = d4check( data ) ;
 | 
						|
  d4display_start() ;
 | 
						|
  if ( rc != 0 )
 | 
						|
    t4severe( t4err_check, "09" ) ;
 | 
						|
 | 
						|
  d4display_str( display,  "        Checking Record:  ", 1 ) ;
 | 
						|
 | 
						|
  d4tag_select( data, tag ) ;
 | 
						|
 | 
						|
  for ( i_rec = 1L, rc = d4top( data ); rc != r4eof;
 | 
						|
       i_rec++,  rc = d4skip( data, 1L ) ) 
 | 
						|
  {
 | 
						|
    if ( d4display_quit( display ) )  return 1 ;
 | 
						|
 | 
						|
    if ( i_rec % 50 == 0 )
 | 
						|
    {
 | 
						|
      display->x = (int) 0 ;
 | 
						|
      d4display_str( display,  "        Checking Record:  ", 0 ) ;
 | 
						|
      d4display_num( display, i_rec, 0 ) ;
 | 
						|
    }
 | 
						|
 | 
						|
    if ( d4recno( data ) != i_rec )
 | 
						|
      t4severe( t4err_recno, "10" ) ;
 | 
						|
 | 
						|
    c4ltoa45( (long) 2*i_rec-1, buff, 10 ) ;
 | 
						|
    buff[10] = '\0' ;
 | 
						|
 | 
						|
    if ( memcmp( buff, f4ptr( field ), 10 ) != 0 )
 | 
						|
      t4severe( t4err_field, "11" ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  if ( d4close_all( &cb ) != 0 )
 | 
						|
    t4severe( t4err_close, "12" ) ;
 | 
						|
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
static int  test_with_mem_check( D4DISPLAY *display, long num_recs )
 | 
						|
{
 | 
						|
  d4init( &cb ) ;
 | 
						|
 | 
						|
  cb.hWnd = (unsigned) display->hWnd ;
 | 
						|
#ifdef S4DLL
 | 
						|
  cb.hInst = (unsigned) display->hInst ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( test_write2( display, num_recs, 0 ) )
 | 
						|
    return 1 ;
 | 
						|
  if ( test_write2( display, num_recs, 1 ) )
 | 
						|
    return 1 ;
 | 
						|
 | 
						|
#ifndef S4TEST_KEEP_FILES
 | 
						|
  u4remove( "T4WRITE2.dbf" ) ;
 | 
						|
#ifdef N4OTHER
 | 
						|
  u4remove( "T4WRITE2.CGP" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4MDX
 | 
						|
  u4remove( "T4WRITE2.mdx" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4FOX
 | 
						|
  u4remove( "T4WRITE2.cdx" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4CLIPPER
 | 
						|
  u4remove( "TAG.NTX" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4NDX
 | 
						|
  u4remove( "TAG.NDX" ) ;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
  d4init_undo( &cb ) ;
 | 
						|
  mem4reset() ;
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  mem4check_memory() ;
 | 
						|
 | 
						|
#ifndef S4DLL
 | 
						|
  if ( mem4free_check(100) != 0 )
 | 
						|
    t4severe( t4err_memory, "13" ) ;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
int  S4FUNCTION t4test( D4DISPLAY *display )
 | 
						|
{
 | 
						|
#ifdef S4INDEX_OFF
 | 
						|
  display->y += 2 ;
 | 
						|
  d4display_str( display, "T4WRITE2:   REQUIRES INDEXING (S4INDEX_OFF DEFINED)", 1) ;
 | 
						|
  d4display_str( display, "", 1) ;
 | 
						|
  return 1 ;
 | 
						|
#else
 | 
						|
  long num_recs = 1000 ;
 | 
						|
 | 
						|
#ifndef S4NO_PARMS
 | 
						|
  num_recs = atol( d4parsestring_nparm( &display->parse_str ) ) ;
 | 
						|
  if ( num_recs <= 0 )
 | 
						|
    t4severe( t4err_general, "14 - Program requires numeric paramater" ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  d4display_str( display,  "T4WRITE2 Test  ", 1 ) ;
 | 
						|
  d4display_str( display,  " ", 1 ) ;
 | 
						|
  d4display_str( display,  "Number of Recs:   ", 1 ) ;
 | 
						|
  d4display_num( display,  (long) num_recs, 0 ) ;
 | 
						|
  d4display_str( display,  "", 1 ) ;
 | 
						|
 | 
						|
  if ( test_with_mem_check( display, num_recs ) )
 | 
						|
    t4severe( t4err_general, "15" ) ;
 | 
						|
 | 
						|
  display->y += 2 ;
 | 
						|
  d4display_str( display, "T4WRITE2:   SUCCESS", 1 ) ;
 | 
						|
  d4display_str( display, "", 1 ) ;
 | 
						|
#endif
 | 
						|
  return 1 ;
 | 
						|
}
 |