campo-sirio/cb5/t4seek.c
alex a0f5e0898b This commit was generated by cvs2svn to compensate for changes in r975,
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
1995-02-06 15:33:45 +00:00

606 lines
15 KiB
C
Executable File

/* t4seek.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved. */
/* Tests CodeBase d4seek() function. */
#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif
#include "t4test.h"
#ifndef S4INDEX_OFF
static FIELD4INFO fields[] =
{
{ "FIELD", 'C', 25, 0 },
{ 0, 0,0,0 },
} ;
static FIELD4INFO fields2[] =
{
{ "FIELD1", 'C', 5, 0 },
{ "FIELD2", 'C', 4, 0 },
{ 0, 0,0,0 },
} ;
static TAG4INFO tags[] =
{
{ "TAG_NAME", "FIELD", "", 0, 0 },
{ 0,0,0, 0, 0 },
} ;
static TAG4INFO tags2[] =
{
#ifndef N4OTHER
{ "TAG_NAME", "FIELD1+FIELD2", ".NOT. DELETED()", 0, 0 },
#else
{ "TAG_NAME", "FIELD1+FIELD2", "", 0, 0 },
#endif
{ "TAG2", "FIELD1", "", 0, 0 },
{ 0,0,0, 0, 0 },
} ;
CODE4 cb;
DATA4 *data;
INDEX4 *test_index ;
FIELD4 *field, *field1, *field2 ;
static long power( long val, long p )
{
long r ;
r = 1L ;
while ( --p >= 0 )
r *= val ;
return r ;
}
static void do_seek( DATA4 *data )
{
int i ;
i = d4seek( data, " " ) ;
if ( (d4recno(data) != 3) || (i != 0) )
t4severe( t4err_seek, "01" ) ;
i = d4seek( data, " 1 222 " ) ;
if ( (d4recno(data) != 2) || (i != 0) )
t4severe( t4err_seek, "02" ) ;
i = d4seek( data, " 1 222 " ) ;
if ( (d4recno(data) != 2) || (i != 0) )
t4severe( t4err_seek, "03" ) ;
i = d4seek( data, "123456789" ) ;
if ( (d4recno(data) != 7) || (i != 0) )
t4severe( t4err_seek, "04" ) ;
/* do some 'not found' seeks */
i = d4seek( data, " 1 2" ) ;
if ( (d4recno(data) != 8) || (i != r4after) )
t4severe( t4err_seek, "05" ) ;
i = d4seek( data, " 111 " ) ;
if ( (d4recno(data) != 1) || (i != r4after) )
t4severe( t4err_seek, "06" ) ;
i = d4seek( data, "123456799" ) ;
if ( (d4recno(data) != 13) || (i != r4eof) )
t4severe( t4err_seek, "07" ) ;
}
static int test_seek( D4DISPLAY *display, long left )
{
long num_digits, num_recs, on_rec, i ;
long limit, extra ;
int rc ;
unsigned on_digits ;
char buff[200] ;
cb.safety = 0 ;
data = d4create( &cb, "T4SEEK", fields, 0 ) ;
if ( data == 0 )
t4severe( t4err_data, "08" ) ;
d4opt_start( &cb ) ;
for ( num_digits = 0; left> 0; num_digits++ )
left /= 10 ;
if ( num_digits <= 0 ) num_digits = 1 ;
for ( num_recs = 10, i=1; i< num_digits; i++ )
num_recs *= 10 ;
num_recs-- ;
if ( num_digits > fields[0].len )
t4severe( t4err_field, "09" ) ;
field = d4field( data, "FIELD" ) ;
if ( field == 0 )
t4severe( t4err_field, "10" ) ;
d4display_str( display, " Writing Record: ", 1 ) ;
for ( on_rec = 1 ; on_rec <= num_recs ; on_rec++ )
{
if ( d4display_quit( display ) )
return 1 ;
if ( on_rec % 50 == 0 || on_rec == num_recs )
{
display->x = (int) 0 ;
d4display_str( display, " Writing Record: ", 0 ) ;
d4display_num( display, on_rec, 0 ) ;
}
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "11" ) ;
c4ltoa45( (long) on_rec, buff, (int) -num_digits ) ;
f4assign_n( field, buff, (int) num_digits ) ;
if ( d4append( data ) < 0 )
t4severe( t4err_append, "12" ) ;
}
d4display_str( display, " Indexing . . . ", 1 ) ;
test_index = i4create( data, "T4SEEK", tags ) ;
if ( test_index == 0 )
t4severe( t4err_data, "13" ) ;
for ( on_digits = 1; on_digits <= (unsigned)num_digits; on_digits++ )
{
limit = power( 10L, on_digits ) ;
extra = power( 10L, num_digits-on_digits ) ;
d4display_str( display, " Seeking Value: ", 1 ) ;
display->x = 0;
for ( i=0; i< limit; i++ )
{
if ( d4display_quit( display ) ) return 1 ;
#ifdef _MSC_VER
#pragma warning( disable : 4146 )
#endif
c4ltoa45( (long) i, buff, (int)-on_digits ) ;
#ifdef _MSC_VER
#pragma warning( default : 4146 )
#endif
buff[on_digits] = '\0' ;
d4display_str( display, " Seeking Value: ", 0 ) ;
d4display_num( display, i, 0 ) ;
rc = d4seek( data, buff ) ;
d4display_str( display, " Record: ", 0 ) ;
d4display_num( display, d4recno( data ), 0 ) ;
display->x = 0;
if ( rc != 0 )
{
if ( rc != r4after || d4recno( data ) != 1 )
t4severe( t4err_recno, "14" ) ;
}
if ( d4recno( data ) != i*extra && d4recno( data ) != 1 )
t4severe( t4err_recno, "15" ) ;
}
}
if ( d4close_all( &cb ) != 0 )
t4severe( t4err_close, "16" ) ;
cb.safety = 0 ;
d4display_str( display, "T4SEEK Test: Part TWO \n", 1 ) ;
data = d4create( &cb, "T4SEEK2", fields2, tags2 ) ;
if ( data == 0 )
t4severe( t4err_data, "17" ) ;
field1 = d4field( data, "FIELD1" ) ; /* assign pointers to fields */
field2 = d4field( data, "FIELD2" ) ; /* assign pointers to fields */
if ( field1 == 0 || field2 == 0 )
t4severe( t4err_field, "18" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "19" ) ;
f4assign( field1, " " ) ;
f4assign( field2, "1111" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "20" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "21" ) ;
f4assign( field1, " 1" ) ;
f4assign( field2, "222" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "22" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "23" ) ;
f4assign( field1, " " ) ;
f4assign( field2, " " ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "24" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "25" ) ;
f4assign( field1, " 1 " ) ;
f4assign( field2, "223" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "26" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "27" ) ;
f4assign( field1, " 1 " ) ;
f4assign( field2, " " ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "28" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "29" ) ;
f4assign( field1, " 1 " ) ;
f4assign( field2, "224" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "30" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "31" ) ;
f4assign( field1, "12345" ) ;
f4assign( field2, "6789" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "32" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "33" ) ;
f4assign( field1, " 1 " ) ;
f4assign( field2, " 3" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "34" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "35" ) ;
f4assign( field1, " " ) ;
f4assign( field2, " 111" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "36" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "37" ) ;
f4assign( field1, " 3 " ) ;
f4assign( field2, "333" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "38" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "39" ) ;
f4assign( field1, " 1" ) ;
f4assign( field2, "7777" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "40" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "41" ) ;
f4assign( field1, " 1 " ) ;
f4assign( field2, "333" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "42" ) ;
d4tag_select( data, d4tag_default( data ) ) ;
/* do some basic checks on database to ensure tag order is correct */
if ( d4top( data ) != 0 )
t4severe( t4err_go, "43" ) ;
if ( memcmp( f4ptr(field2), " ", 4 ) )
t4severe( t4err_field, "44" ) ;
if ( d4skip( data, 4 ) != 0 )
t4severe( t4err_skip, "45" ) ;
if ( memcmp( f4ptr(field2), "222 ", 4 ) )
t4severe( t4err_field, "46" ) ;
if ( d4skip( data, 5 ) != 0 )
t4severe( t4err_skip, "47" ) ;
if ( memcmp( f4ptr(field2), "333 ", 4 ) )
t4severe( t4err_field, "48" ) ;
if ( d4skip( data, -4 ) != 0 )
t4severe( t4err_skip, "49" ) ;
if ( memcmp( f4ptr(field2), " ", 4 ) )
t4severe( t4err_field, "50" ) ;
d4delete( data ) ;
if ( d4skip( data, -2 ) != 0 )
t4severe( t4err_skip, "51" ) ;
if ( memcmp( f4ptr(field2), "7777", 4 ) )
t4severe( t4err_field, "52" ) ;
if ( d4skip( data, 2 ) != 0 )
t4severe( t4err_skip, "53" ) ;
#ifndef N4OTHER
if ( memcmp( f4ptr(field2), " 3", 4 ) )
#else
if ( memcmp( f4ptr(field2), " ", 4 ) )
#endif
t4severe( t4err_field, "54" ) ;
if ( d4go( data, 7 ) != 0 )
t4severe( t4err_go, "55" ) ;
if ( memcmp( f4ptr(field2), "6789", 4 ) )
t4severe( t4err_field, "56" ) ;
if ( d4skip( data, 1 ) != r4eof )
t4severe( t4err_skip, "57" ) ;
if ( (d4recno(data) != d4reccount(data)+1) || (!d4eof(data)) )
t4severe( t4err_recno, "58" ) ;
if ( d4top( data ) != 0 )
t4severe( t4err_go, "59" ) ;
if (d4recno(data) != 3)
t4severe( t4err_recno, "60" ) ;
if ( d4skip( data, -1 ) != r4bof )
t4severe( t4err_skip, "61" ) ;
/* test seeking */
do_seek( data ) ;
if ( d4go( data, 4 ) != 0 )
t4severe( t4err_go, "62" ) ;
d4delete( data ) ;
if ( d4go( data, 9 ) != 0 )
t4severe( t4err_go, "63" ) ;
d4delete( data ) ;
#ifndef N4OTHER
do_seek( data ) ;
i = d4seek( data, " 1 223 " ) ;
if ( (d4recno(data) != 6) || (i != r4after) )
t4severe( t4err_recno, "64" ) ;
i = d4seek( data, " 111" ) ;
if ( (d4recno(data) != 1) || (i != r4after) )
t4severe( t4err_recno, "65" ) ;
/* delete all records so tag is empty */
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "66" ) ;
for ( ;; )
{
if ( d4eof( data ) )
break ;
d4delete( data ) ;
if ( d4skip( data, -1L ) < 0 )
t4severe( t4err_skip, "67" ) ;
}
/* check empty tag */
if ( d4go( data, 4 ) != 0 )
t4severe( t4err_go, "68" ) ;
if ( d4skip( data, -1 ) != r4eof )
t4severe( t4err_skip, "69" ) ;
if ( (d4recno(data) != d4reccount(data)+1) || (!d4eof(data)) || (!d4bof(data)) )
t4severe( t4err_recno, "70" ) ;
if ( d4go( data, 6 ) != 0 )
t4severe( t4err_go, "71" ) ;
if ( d4skip( data, 1 ) != r4eof )
t4severe( t4err_skip, "72" ) ;
if ( (d4recno(data) != d4reccount(data)+1) || (!d4eof(data)) || (!d4bof(data)) )
t4severe( t4err_recno, "73" ) ;
if ( d4seek( data, " 1 333 " ) != r4eof )
t4severe( t4err_seek, "74" ) ;
/* recall one record */
if ( d4go( data, 6 ) != 0 )
t4severe( t4err_go, "75" ) ;
d4recall( data ) ;
if ( d4go( data, 2 ) != 0 )
t4severe( t4err_go, "76" ) ;
if ( d4skip( data, -1 ) != r4bof )
t4severe( t4err_skip, "77" ) ;
if ( (d4recno(data) != 6) || (!d4bof(data)) )
t4severe( t4err_recno, "78" ) ;
if ( d4go( data, 8 ) != 0 )
t4severe( t4err_go, "79" ) ;
if ( d4skip( data, 1 ) != 0 )
t4severe( t4err_skip, "80" ) ;
if ( (d4recno(data) != 6) || (d4eof(data)) || (d4bof(data)) )
t4severe( t4err_recno, "81" ) ;
if ( d4skip( data, 1 ) != r4eof )
t4severe( t4err_skip, "82" ) ;
if ( (d4recno(data) != d4reccount(data)+1) || (!d4eof(data)) || (d4bof(data)) )
t4severe( t4err_recno, "83" ) ;
if ( d4seek( data, " 1 224 " ) != 0 )
t4severe( t4err_seek, "84" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "85" ) ;
d4tag_select( data, d4tag( data, "TAG2" ) ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "86" ) ;
f4assign( field1, "ZZZZZ" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "87" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "88" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "89" ) ;
f4assign( field1, "YYYYY" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "90" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "91" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "92" ) ;
f4assign( field1, "VVVVV" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "93" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "94" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "95" ) ;
f4assign( field1, "XXXXX" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "96" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "97" ) ;
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "98" ) ;
if ( memcmp( f4str( field1 ), "ZZZZZ", 5 ) != 0 )
t4severe( t4err_field, "99" ) ;
f4assign( field1, "VVVVV" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "100" ) ;
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "101" ) ;
if ( memcmp( f4str( field1 ), "YYYYY", 5 ) != 0 )
t4severe( t4err_field, "102" ) ;
f4assign( field1, "VVVVV" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "103" ) ;
if ( d4bottom( data ) != 0 )
t4severe( t4err_go, "104" ) ;
if ( memcmp( f4str( field1 ), "XXXXX", 5 ) != 0 )
t4severe( t4err_field, "105" ) ;
f4assign( field1, "VVVVV" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "106" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "107" ) ;
f4assign( field1, "AAAAA" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "108" ) ;
if ( d4append_start( data, 0 ) != 0 )
t4severe( t4err_append, "109" ) ;
f4assign( field1, "AA B" ) ;
if ( d4append( data ) != 0 )
t4severe( t4err_append, "110" ) ;
if ( d4seek( data, "AA " ) != 0 )
t4severe( t4err_seek, "111" ) ;
if ( memcmp( f4str( field1 ), "AA B", 5 ) != 0 )
t4severe( t4err_field, "112" ) ;
if ( d4check( data ) != 0 )
t4severe( t4err_check, "113" ) ;
#endif
if ( d4close_all( &cb ) != 0 )
t4severe( t4err_close, "114" ) ;
return 0 ;
}
static int test_with_mem_check( D4DISPLAY *display, long left )
{
d4init( &cb ) ;
cb.hWnd = (unsigned) display->hWnd ;
#ifdef S4DLL
cb.hInst = (unsigned) display->hInst ;
#endif
if ( test_seek( display, left ) )
return 1 ;
#ifndef S4TEST_KEEP_FILES
u4remove( "T4SEEK.dbf" ) ;
u4remove( "T4SEEK2.dbf" ) ;
#ifdef N4OTHER
u4remove( "T4SEEK.CGP" ) ;
u4remove( "T4SEEK2.CGP" ) ;
#endif
#ifdef S4MDX
u4remove( "T4SEEK.mdx" ) ;
u4remove( "T4SEEK2.mdx" ) ;
#endif
#ifdef S4FOX
u4remove( "T4SEEK.cdx" ) ;
u4remove( "T4SEEK2.cdx" ) ;
#endif
#ifdef S4CLIPPER
u4remove( "TAG_NAME.NTX" ) ;
#endif
#ifdef S4NDX
u4remove( "TAG_NAME.NDX" ) ;
#endif
#endif
d4init_undo(&cb) ;
mem4reset() ;
#ifdef S4DEBUG
mem4check_memory() ;
#ifndef S4DLL
if ( mem4free_check(100) != 0 )
t4severe( t4err_memory, "115" ) ;
#endif
#endif
return 0 ;
}
#endif
int S4FUNCTION t4test( D4DISPLAY *display )
{
#ifdef S4INDEX_OFF
display->y += 2 ;
d4display_str( display, "T4SEEK: REQUIRES INDEXING (S4INDEX_OFF DEFINED)", 1) ;
d4display_str( display, "", 1) ;
return 1 ;
#else
long left = 999 ;
#ifndef S4NO_PARMS
left = atol( d4parsestring_nparm( &display->parse_str ) ) ;
if ( left <= 0 )
t4severe( t4err_parm, "116" ) ;
#endif
d4display_str( display, "T4SEEK Test ", 1 ) ;
d4display_str( display, " ", 1 ) ;
d4display_str( display, "Number of Recs: ", 1 ) ;
d4display_num( display, (long) left, 0 ) ;
d4display_str( display, "", 1 ) ;
if ( test_with_mem_check( display, left ) )
t4severe( t4err_memory, "117" ) ;
display->y += 2 ;
d4display_str( display, "T4SEEK: SUCCESS", 1) ;
d4display_str( display, "", 1) ;
return 1 ;
#endif
}