campo-sirio/cb5/t4skip.c

403 lines
8.5 KiB
C
Raw Normal View History

/* t4skip.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved. */
/* tests Code Base 'd4skip' routine. */
#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif
#include "t4test.h"
#ifndef S4INDEX_OFF
static FIELD4INFO fields[] =
{
{"FLD", 'N', 13, 1 },
{"CHR", 'C', 8, 0 },
{ 0, 0 , 0, 0 },
};
static TAG4INFO tags[] =
{
{"TAG", "CHR", "", 0, 0 },
{"TAG_TWO", "101-VAL(CHR)", "", 0, 0 },
{ 0, 0, 0, 0, 0 },
} ;
CODE4 cb;
DATA4 *data;
INDEX4 *test_index ;
FIELD4 *field ;
TAG4 *tag ;
static void t4test_eof( DATA4 *data, int bof_cond, int eof_cond )
{
int rc ;
rc = 0 ;
if ( bof_cond )
{
if ( ! d4bof( data ) )
rc = -1 ;
}
else
{
if ( d4bof( data ) )
rc = -1 ;
}
if ( rc )
t4severe( t4err_general, "01" ) ;
if ( eof_cond )
{
if ( ! d4eof( data ) )
rc = -1 ;
}
else
{
if ( d4eof( data ) )
rc = -1 ;
}
if ( rc )
t4severe( t4err_general, "02" ) ;
}
static void rec( DATA4 *data, long rec_no )
{
if ( d4recno( data ) != rec_no )
t4severe( t4err_recno, "03" ) ;
}
static int test_skip( D4DISPLAY *display, int do_open )
{
char buff[9] ;
long i_rec ;
cb.safety = 0 ;
if ( do_open )
{
cb.auto_open = 0 ;
data = d4open( &cb, "T4SKIP" ) ;
d4zap( data, 1L, d4reccount( data ) ) ;
}
else
data = d4create( &cb, "T4SKIP", fields, 0 ) ;
if ( data == 0 )
t4severe( t4err_data, "04" ) ;
d4opt_start( &cb ) ;
/* First Execute Skips on an Empty Database */
if ( d4bottom( data ) != r4eof )
t4severe( t4err_go, "05" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if ( d4top( data ) != r4eof )
t4severe( t4err_go, "06" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "07" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "08" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if (do_open)
{
test_index = i4open( data, "T4SKIP" ) ;
if( d4reindex( data ) != 0 )
t4severe( t4err_reindex, "09" ) ;
}
else
test_index = i4create( data, "T4SKIP", tags ) ;
if ( test_index == 0 )
t4severe( t4err_data, "10" ) ;
t4test_eof( data, 1, 1 ) ;
rec( data, 1L ) ;
/* Index File Skips on an Empty Database */
if ( d4bottom( data ) != r4eof )
t4severe( t4err_go, "11" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if ( d4top( data ) != r4eof )
t4severe( t4err_go, "12" ) ;
t4test_eof( data, 1, 1 ) ; rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "13" ) ;
t4test_eof( data, 1, 1 ) ;
rec( data, 1L ) ;
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "14" ) ;
t4test_eof( data, 1, 1 ) ;
rec( data, 1L ) ;
/* Index File Skips on a One Record Database */
if ( d4append_blank( data ) < 0 )
t4severe( t4err_append, "15" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 1L ) ;
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "16" ) ;
t4test_eof( data, 0, 1 ) ;
rec( data, 2L ) ;
if ( d4skip( data, -1L ) != 0 )
t4severe( t4err_skip, "17" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "18" ) ;
t4test_eof( data, 1,0 ) ;
rec( data, 1L ) ;
/* Database Skips on a One Record Database */
tag = d4tag( data, "TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "19" ) ;
d4tag_select( data, tag ) ;
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "20" ) ;
t4test_eof( data, 0, 1 ) ;
rec( data, 2L ) ;
if ( d4skip( data, -1L ) != 0 )
t4severe( t4err_skip, "21" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "22" ) ;
t4test_eof( data, 1,0 ) ;
rec( data, 1L ) ;
if ( d4zap( data, 1L, d4reccount( data ) ) != 0 )
t4severe( t4err_zap, "23" ) ;
t4test_eof( data, 1, 1 ) ;
d4display_str( display, " Writing 100 Records . . . ", 1 ) ;
/* Write 100 Records */
for ( i_rec = 1; i_rec <= 100; i_rec++ )
{
if ( d4display_quit( display ) ) return 1 ;
if ( d4append_start( data, 0 ) < 0 )
t4severe( t4err_append, "24" ) ;
f4assign_long( d4field_j( data, 2 ), (i_rec+1)/3 ) ;
c4ltoa45( (long) (101 - i_rec), buff, 8 ) ;
f4assign_n( d4field( data, "CHR" ), buff, 8 ) ;
if ( d4append( data ) < 0 )
t4severe( t4err_append, "25" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, i_rec ) ;
}
if ( d4top( data ) != 0 )
t4severe( t4err_go, "26" ) ;
if ( d4recno( data ) != 100 )
t4severe( t4err_recno, "27" ) ;
if ( d4skip( data, 60L ) != 0 )
t4severe( t4err_skip, "28" ) ;
if ( d4recno( data ) != 40 )
t4severe( t4err_recno, "29" ) ;
if ( d4skip( data, 22L ) != 0 )
t4severe( t4err_skip, "30" ) ;
if ( d4recno( data ) != 18 )
t4severe( t4err_recno, "31" ) ;
if ( d4skip( data, -74L ) != 0 )
t4severe( t4err_skip, "32" ) ;
if ( d4recno( data ) != 92 )
t4severe( t4err_recno, "33" ) ;
if ( d4skip( data, -20L ) != r4bof )
t4severe( t4err_skip, "34" ) ;
if ( !d4bof( data ) )
t4severe( t4err_general, "35" ) ;
/* Skip Test Without Index File */
d4tag_select( data, 0 ) ;
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "36" ) ;
if ( d4skip( data, -99L ) != 0 )
t4severe( t4err_skip, "37" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "38" ) ;
t4test_eof( data, 1,0 ) ;
rec( data, 1L ) ;
for ( i_rec = 2; i_rec <= 100; i_rec++ )
{
if ( d4display_quit( display ) )
return 1 ;
if ( d4skip( data, 1L ) != 0 )
t4severe( t4err_skip, "39" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, i_rec ) ;
}
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "40" ) ;
t4test_eof( data, 0, 1 ) ;
rec( data, 101L ) ;
for ( i_rec = 100; i_rec >=1; i_rec-- )
{
if ( d4display_quit( display ) ) return 1 ;
if ( d4skip( data, -1L ) != 0 )
t4severe( t4err_skip, "41" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, i_rec ) ;
}
/* Skip Test With an Index File */
d4tag_select( data, d4tag( data, "TAG_TWO" ) ) ;
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "42" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 100L ) ;
if ( d4skip( data, -99L ) != 0 )
t4severe( t4err_skip, "43" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, 1L ) ;
if ( d4skip( data, -1L ) != r4bof )
t4severe( t4err_skip, "44" ) ;
t4test_eof( data, 1,0 ) ;
rec( data, 1L ) ;
for ( i_rec = 2; i_rec <= 100; i_rec++ )
{
if ( d4display_quit( display ) )
return 1 ;
if ( d4skip( data, 1L ) != 0 )
t4severe( t4err_skip, "45" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, i_rec ) ;
}
if ( d4skip( data, 1L ) != r4eof )
t4severe( t4err_skip, "46" ) ;
t4test_eof( data, 0, 1 ) ;
rec( data, 101L ) ;
for ( i_rec = 100; i_rec >=1; i_rec-- )
{
if ( d4display_quit( display ) )
return 1 ;
if ( d4skip( data, -1L ) != 0 )
t4severe( t4err_skip, "47" ) ;
t4test_eof( data, 0, 0 ) ;
rec( data, i_rec ) ;
}
if ( d4close_all( &cb ) < 0 )
t4severe( t4err_close, "48" ) ;
return 0 ;
}
static int test_with_mem_check( D4DISPLAY *display )
{
d4init( &cb ) ;
cb.hWnd = (unsigned) display->hWnd ;
#ifdef S4DLL
cb.hInst = (unsigned) display->hInst ;
#endif
if ( test_skip( display, 0 ) )
return 1 ;
if ( test_skip( display, 1 ) )
return 1 ;
#ifndef S4TEST_KEEP_FILES
u4remove( "T4SKIP.dbf" ) ;
#ifdef N4OTHER
u4remove( "T4SKIP.CGP" ) ;
#endif
#ifdef S4MDX
u4remove( "T4SKIP.mdx" ) ;
#endif
#ifdef S4FOX
u4remove( "T4SKIP.cdx" ) ;
#endif
#ifdef S4CLIPPER
u4remove( "TAG.NTX" ) ;
u4remove( "TAG_TWO.NTX" ) ;
#endif
#ifdef S4NDX
u4remove( "TAG.NDX" ) ;
u4remove( "TAG_TWO.NDX" ) ;
#endif
#endif
d4init_undo(&cb) ;
mem4reset() ;
#ifdef S4DEBUG
mem4check_memory() ;
#ifndef S4DLL
if ( mem4free_check(100) != 0 )
t4severe( t4err_memory, "49" ) ;
#endif
#endif
return 0 ;
}
#endif
int S4FUNCTION t4test( D4DISPLAY *display )
{
#ifdef S4INDEX_OFF
display->y += 2 ;
d4display_str( display, "T4GROUP: REQUIRES INDEXING (S4INDEX_OFF DEFINED)", 1) ;
d4display_str( display, "", 1) ;
return 1 ;
#else
d4display_str( display, "T4SKIP Test ", 1 ) ;
d4display_str( display, " ", 1 ) ;
if ( test_with_mem_check( display ) )
e4exit(&cb) ;
display->y += 2 ;
d4display_str( display, "T4SKIP: SUCCESS", 1) ;
d4display_str( display, "", 1) ;
#endif
return 1 ;
}