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
		
			
				
	
	
		
			407 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			407 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* t4max.c   (C)Copyright Sequiter Software Inc., 1990-1993.  All rights reserved. */
 | 
						|
/* Maximum Testing */
 | 
						|
 | 
						|
#include  "d4all.h"
 | 
						|
#ifdef __TURBOC__
 | 
						|
#pragma hdrstop
 | 
						|
#endif
 | 
						|
 | 
						|
#include  "t4test.h"
 | 
						|
 | 
						|
static FIELD4INFO test_field[] =
 | 
						|
{
 | 
						|
{ "C1", 'C', 28767, 0 },
 | 
						|
{ "C2", 'C', 11733, 0 },
 | 
						|
{ 0,  0, 0, 0 },
 | 
						|
} ;
 | 
						|
 | 
						|
#ifdef S4UNIX
 | 
						|
int max_fields = 1022 ;
 | 
						|
#else
 | 
						|
const int max_fields = 1022 ;
 | 
						|
#endif
 | 
						|
 | 
						|
CODE4 cb ;
 | 
						|
DATA4 *database ;
 | 
						|
INDEX4 *test_index ;
 | 
						|
FIELD4 *f1 ;
 | 
						|
FIELD4 *f2 ;
 | 
						|
 | 
						|
char test1[] = "1234567890" ;
 | 
						|
char test2[] = "ABCDEFGHIJ" ;
 | 
						|
 | 
						|
static void check( FIELD4 *f1, FIELD4 *f2 )
 | 
						|
{
 | 
						|
  if ( memcmp( f4ptr(f1)+40000, test1, sizeof(test1) ) != 0 )
 | 
						|
    t4severe( t4err_field, "01" ) ;
 | 
						|
  if ( memcmp( f4ptr(f2)+10000, test2, sizeof(test2) ) != 0 )
 | 
						|
    t4severe( t4err_field, "02" ) ;
 | 
						|
}
 | 
						|
 | 
						|
static void test_fields( DATA4 *database, long num_rec, int num_field )
 | 
						|
{
 | 
						|
  long start_rec, r ;
 | 
						|
  int  i_field ;
 | 
						|
 | 
						|
  start_rec = d4reccount( database ) ;
 | 
						|
 | 
						|
  if ( database->n_fields < num_field )
 | 
						|
    t4severe( t4err_count, "03" ) ;
 | 
						|
 | 
						|
  for ( r = 1; r <= num_rec; r++ )
 | 
						|
  {
 | 
						|
    if ( d4append_start( database, 0 ) != 0 )
 | 
						|
      t4severe( t4err_append, "04" ) ;
 | 
						|
 | 
						|
    for ( i_field = 1 ; i_field <= num_field ; i_field++ )
 | 
						|
      f4assign_long( d4field_j( database, i_field ), i_field ) ;
 | 
						|
 | 
						|
    if ( d4append( database ) != 0 )
 | 
						|
      t4severe( t4err_append, "05" ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  for ( r = 1; r <= num_rec; r++ )
 | 
						|
  {
 | 
						|
    if ( d4go( database, start_rec + r) != 0 )
 | 
						|
      t4severe( t4err_go, "06" ) ;
 | 
						|
 | 
						|
    for ( i_field = 1 ; i_field <= num_field ; i_field++ )
 | 
						|
      if ( f4long( d4field_j( database, i_field ) ) != i_field )
 | 
						|
        t4severe( t4err_field, "07" ) ;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
static void test_tags( D4DISPLAY *display, DATA4 *database, char *names, int num_tags, long num_recs )
 | 
						|
{
 | 
						|
  TAG4INFO *tags ;
 | 
						|
  int i, i_field ;
 | 
						|
  long r ;
 | 
						|
 | 
						|
  tags = (TAG4INFO *)u4alloc( sizeof(TAG4INFO) * 48 ) ;
 | 
						|
  if ( tags == 0 )
 | 
						|
    t4severe( t4err_memory, "08" ) ;
 | 
						|
 | 
						|
  for ( i = 0; i < num_tags; i++ )
 | 
						|
  {
 | 
						|
    tags[i].name       = names + i*6 ;
 | 
						|
    tags[i].expression = names + i*6 ;
 | 
						|
  }
 | 
						|
 | 
						|
  d4display_str( display,  "        Creating Index. . .", 1 ) ;
 | 
						|
 | 
						|
#ifdef S4OPEN_FILE
 | 
						|
  test_index = i4open( database, "T4MANY" ) ;
 | 
						|
#else
 | 
						|
  test_index = i4create( database, "T4MANY", tags ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  /* i4check( test_index ) ; */
 | 
						|
 | 
						|
  d4opt_start( &cb ) ;
 | 
						|
 | 
						|
  d4display_str( display,  "        Appending Record:   ", 1 ) ;
 | 
						|
 | 
						|
  for ( r = 1; r <= num_recs; r++ )
 | 
						|
  {
 | 
						|
    if ( r % 50 == 0 || r == num_recs || r == 1)
 | 
						|
    {
 | 
						|
      display->x = (int) 0 ;
 | 
						|
      d4display_str( display,  "        Appending Record:   ", 0 ) ;
 | 
						|
      d4display_num( display, r, 0 ) ;
 | 
						|
    }
 | 
						|
 | 
						|
    if ( d4append_start( database, 0 ) != 0 )
 | 
						|
      t4severe( t4err_append, "09" ) ;
 | 
						|
 | 
						|
    for ( i_field = 1; i_field < d4num_fields(database); i_field++ )
 | 
						|
      f4assign_long( d4field_j(database, i_field), r ) ;
 | 
						|
 | 
						|
    if ( d4append(database) != 0 )
 | 
						|
      t4severe( t4err_append, "10" ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  d4display_str( display,  "        Checking Index. . .", 1 ) ;
 | 
						|
  if ( i4check( test_index )  != 0 )
 | 
						|
    t4severe( t4err_check, "11" ) ;
 | 
						|
 | 
						|
  if ( i4close( test_index ) != 0 )
 | 
						|
    t4severe( t4err_close, "12" ) ;
 | 
						|
 | 
						|
  u4free( tags ) ;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
static int do_test( D4DISPLAY *disp , long n_rec, int num_tags, int block_size, long n_rec2 )
 | 
						|
{
 | 
						|
  FIELD4INFO *fields ;
 | 
						|
  char *names ;
 | 
						|
  long i_rec ;
 | 
						|
  int i ;
 | 
						|
 | 
						|
  cb.hWnd = (unsigned) disp->hWnd ;
 | 
						|
#ifdef S4DLL
 | 
						|
  cb.hInst = (unsigned) disp->hInst ;
 | 
						|
#endif
 | 
						|
 | 
						|
  cb.safety = 0 ;
 | 
						|
  cb.mem_expand_block = 1 ;  /* Keep from running out of memory */
 | 
						|
  cb.mem_start_block = 1 ;
 | 
						|
 | 
						|
  /* Check 'max_fields' Fields */
 | 
						|
  fields = (FIELD4INFO *) u4alloc( sizeof(FIELD4INFO) * 1023 ) ;
 | 
						|
  names  = (char *) u4alloc( 6 * max_fields ) ;
 | 
						|
  if ( fields == 0 || names == 0 )
 | 
						|
    t4severe( t4err_field, "13" ) ;
 | 
						|
 | 
						|
  for ( i = 0 ; i < max_fields ; i++ )
 | 
						|
  {
 | 
						|
    fields[i].name = names + i*6 ;
 | 
						|
    fields[i].name[0] = 'F' ;
 | 
						|
    c4ltoa45( (long)i, fields[i].name + 1, -4 ) ;
 | 
						|
 | 
						|
    fields[i].type = 'C' ;
 | 
						|
    fields[i].len = (short) 4 ;
 | 
						|
  }
 | 
						|
 | 
						|
  d4display_str( disp, "Creating Data File.  Number of Fields: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) max_fields , 0 ) ;
 | 
						|
 | 
						|
#ifdef S4OPEN_FILE
 | 
						|
  database = d4open( &cb, "T4MANY" ) ;
 | 
						|
#else
 | 
						|
  database = d4create( &cb, "T4MANY", fields, 0 ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  if ( database == 0 )
 | 
						|
    t4severe( t4err_data, "14" ) ;
 | 
						|
 | 
						|
  if (database->n_fields != max_fields )
 | 
						|
    t4severe( t4err_field, "15" ) ;
 | 
						|
 | 
						|
  u4free( fields ) ;
 | 
						|
 | 
						|
  test_fields( database, 5, max_fields ) ;
 | 
						|
 | 
						|
 | 
						|
  d4display_str( disp, "Test an Index file with 1 tag. Number of Records: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) n_rec , 0 ) ;
 | 
						|
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  test_tags( disp, database, names, 1, n_rec ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  d4display_str( disp, "Test an Index file. Number of Tags: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) num_tags, 0 ) ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  test_tags( disp, database, names, num_tags, 1 ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  d4display_str( disp, "Test an Index file with a block size of: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) block_size, 0 ) ;
 | 
						|
  d4display_str( disp, "   Number of Records: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) n_rec2, 0 ) ;
 | 
						|
 | 
						|
  cb.mem_size_block = (int) block_size ;
 | 
						|
#ifndef S4INDEX_OFF
 | 
						|
  test_tags( disp, database, names, 1, n_rec2 ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  u4free( names ) ;
 | 
						|
 | 
						|
  if ( d4close( database ) != 0 )
 | 
						|
    e4exit( &cb ) ;
 | 
						|
 | 
						|
  d4display_str( disp, "Check Wide Field and Large Record Width. . . ", 1 ) ;
 | 
						|
 | 
						|
  /* Check Wide Field and Large Record Width */
 | 
						|
 | 
						|
#ifdef S4OPEN_FILE
 | 
						|
  database = d4open( &cb, "T4MLARGE" ) ;
 | 
						|
#else
 | 
						|
  database = d4create( &cb, "T4MLARGE", test_field, 0 ) ;
 | 
						|
#endif
 | 
						|
 | 
						|
  e4exit_test( &cb ) ;
 | 
						|
 | 
						|
  f1 = d4field( database, "C1" ) ;
 | 
						|
  f2 = d4field( database, "C2" ) ;
 | 
						|
 | 
						|
  if ( f1 == 0 || f2 == 0 )
 | 
						|
    t4severe( t4err_field, "16" ) ;
 | 
						|
 | 
						|
  if ( (short)f4len( f1 ) != (short)test_field[0].len )
 | 
						|
    t4severe( t4err_field, "17" ) ;
 | 
						|
 | 
						|
  if ( (short)f4len( f2 ) != (short)test_field[1].len )
 | 
						|
    t4severe( t4err_field, "18" ) ;
 | 
						|
 | 
						|
  if ( d4append_start( database, 0 ) != 0 )
 | 
						|
    t4severe( t4err_append, "19" ) ;
 | 
						|
 | 
						|
  f4assign( f1, "A") ;
 | 
						|
 | 
						|
  memcpy( f4assign_ptr( f1 ) + 40000, test1, sizeof( test1 ) ) ;
 | 
						|
  memcpy( f4assign_ptr( f2 ) + 10000, test2, sizeof( test2 ) ) ;
 | 
						|
  if ( d4append( database ) < 0 )
 | 
						|
    t4severe( t4err_append, "20" ) ;
 | 
						|
 | 
						|
  check( f1, f2 ) ;
 | 
						|
 | 
						|
  if ( d4append_start( database, 0 ) != 0 )
 | 
						|
    t4severe( t4err_append, "21" ) ;
 | 
						|
  if ( d4append( database ) != 0 )
 | 
						|
    t4severe( t4err_append, "22" ) ;
 | 
						|
 | 
						|
  check( f1, f2 ) ;
 | 
						|
 | 
						|
  if ( d4close( database ) != 0 )
 | 
						|
    t4severe( t4err_close, "23" ) ;
 | 
						|
  e4exit_test( &cb ) ;
 | 
						|
 | 
						|
  cb.auto_open = 0 ;
 | 
						|
 | 
						|
  database = d4open( &cb, "T4MLARGE" ) ;
 | 
						|
  f1 = d4field( database, "C1" ) ;
 | 
						|
  f2 = d4field( database, "C2" ) ;
 | 
						|
  if ( database == 0 || f1 == 0 || f2 == 0 )
 | 
						|
    t4severe( t4err_field, "24" ) ;
 | 
						|
  e4exit_test( &cb ) ;
 | 
						|
 | 
						|
  for ( i_rec = 1L; i_rec <= 2; i_rec++ )
 | 
						|
  {
 | 
						|
    if ( d4go( database, i_rec ) != 0 )
 | 
						|
      t4severe( t4err_go, "25" ) ;
 | 
						|
    check( f1, f2 ) ;
 | 
						|
  }
 | 
						|
 | 
						|
  if ( d4close( database ) != 0 )
 | 
						|
    t4severe( t4err_close, "26" ) ;
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
static int test_with_mem_check( D4DISPLAY *disp , long n_rec, int num_tags,
 | 
						|
                               int block_size, long n_rec2)
 | 
						|
{
 | 
						|
  d4init( &cb ) ;
 | 
						|
 | 
						|
  if ( do_test( disp , n_rec, num_tags, block_size, n_rec2 ) )
 | 
						|
    return 1 ;
 | 
						|
 | 
						|
#ifndef S4TEST_KEEP_FILES
 | 
						|
  u4remove( "T4MANY.dbf" ) ;
 | 
						|
#ifdef N4OTHER
 | 
						|
  u4remove( "T4MANY.CGP" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4MDX
 | 
						|
  u4remove( "T4MANY.mdx" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4FOX
 | 
						|
  u4remove( "T4MANY.cdx" ) ;
 | 
						|
#endif
 | 
						|
#ifdef S4CLIPPER
 | 
						|
#endif
 | 
						|
#ifdef S4NDX
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
  d4init_undo(&cb) ;
 | 
						|
  mem4reset() ;
 | 
						|
 | 
						|
#ifdef S4DEBUG
 | 
						|
  mem4check_memory() ;
 | 
						|
 | 
						|
#ifndef DLL
 | 
						|
  if ( mem4free_check(100) != 0 )
 | 
						|
    t4severe( t4err_memory, "27" ) ;
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
  return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int S4FUNCTION t4test( D4DISPLAY *disp )
 | 
						|
{
 | 
						|
  int num_tags = 47 ;
 | 
						|
  unsigned block_size = 16384 ;
 | 
						|
  long n_rec = 2000 ;
 | 
						|
  long n_rec2 = 5000 ;
 | 
						|
#ifndef S4NO_PARMS
 | 
						|
  long temp_parm ;
 | 
						|
 | 
						|
  temp_parm = atol( d4parsestring_nparm( &disp->parse_str ) ) ;
 | 
						|
  if ( temp_parm == 0 )
 | 
						|
  {
 | 
						|
    d4display_str( disp, "T4MAX Test  ", 1 ) ;
 | 
						|
    d4display_num( disp, n_rec, 0 ) ;
 | 
						|
    d4display_num( disp, (long)num_tags, 0 ) ;
 | 
						|
    d4display_num( disp, (long)block_size, 0 ) ;
 | 
						|
    d4display_num( disp, n_rec2, 0 ) ;
 | 
						|
#ifdef S4WINDOWS
 | 
						|
    d4display_quit( disp ) ;
 | 
						|
#endif
 | 
						|
    return 1 ;
 | 
						|
  }
 | 
						|
  
 | 
						|
  n_rec = temp_parm ;
 | 
						|
  
 | 
						|
  temp_parm = atol( d4parsestring_nparm( &disp->parse_str ) ) ;
 | 
						|
  if ( temp_parm > 0 )
 | 
						|
    num_tags = (int) temp_parm ;
 | 
						|
  
 | 
						|
  if ( num_tags > 47 )
 | 
						|
    num_tags = 47 ;
 | 
						|
  
 | 
						|
  temp_parm = atol( d4parsestring_nparm( &disp->parse_str ) ) ;
 | 
						|
  if ( temp_parm > 0 )
 | 
						|
    block_size = (unsigned) temp_parm  ;
 | 
						|
  
 | 
						|
  temp_parm = atol( d4parsestring_nparm( &disp->parse_str ) ) ;
 | 
						|
  if ( temp_parm > 0 )
 | 
						|
    n_rec2 = temp_parm ;
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef N4OTHER     /* for twentry file limit consideration */
 | 
						|
  if ( num_tags > 14 )
 | 
						|
    num_tags = 14 ;
 | 
						|
#endif
 | 
						|
 | 
						|
  d4display_str( disp, "Warning: this test program creates large database and index", 1 ) ;
 | 
						|
  d4display_str( disp, "files that are not deleted upon completion.  It requires", 1 ) ;
 | 
						|
  d4display_str( disp, "several megabytes of hard disk space.", 1 ) ;
 | 
						|
  d4display_str( disp, " ", 1 );
 | 
						|
  d4display_str( disp, "Warning: This program requires a significant amount of time", 1 ) ;
 | 
						|
  d4display_str( disp, "         to run.  On a standard 386 time requirements may be", 1 ) ;
 | 
						|
  d4display_str( disp, "         as high as 30 minutes.", 1 );
 | 
						|
  d4display_str( disp, " ", 1 );
 | 
						|
  d4display_str( disp, "Please note that number of tags may be decreased because", 1 ) ;
 | 
						|
  d4display_str( disp, "of twenty-files-open considerations", 1 ) ;
 | 
						|
  d4display_str( disp, " ", 1 );
 | 
						|
 | 
						|
  d4display_str( disp, "Num Recs for Test 1:   ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) n_rec, 0 ) ;
 | 
						|
 | 
						|
  d4display_str( disp, "Num Tags for Test 2:   ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) num_tags, 0 ) ;
 | 
						|
 | 
						|
  d4display_str( disp, "Block Size for Test 3: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) block_size, 0 ) ;
 | 
						|
 | 
						|
  d4display_str( disp, "Num Recs for Test 3:   ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) n_rec2, 0 ) ;
 | 
						|
 | 
						|
  d4display_str( disp, "Number of Fields for test: ", 1 ) ;
 | 
						|
  d4display_num( disp, (long) max_fields, 0 ) ;
 | 
						|
 | 
						|
  if ( test_with_mem_check( disp, n_rec, num_tags, block_size, n_rec2 ) )
 | 
						|
    e4exit( &cb ) ;
 | 
						|
 | 
						|
  disp->y += 2 ;
 | 
						|
  d4display_str( disp, "T4MAX:   SUCCESS", 1) ;
 | 
						|
  d4display_str( disp, "", 1) ;
 | 
						|
  return 1 ;
 | 
						|
}
 |