campo-sirio/cb5/t4unique.c

420 lines
9.8 KiB
C
Raw Normal View History

/* t4unique.c (c)Copyright Sequiter Software Inc., 1990-1993. All rights reserved. */
/* Tests CodeBase unique entry code. */
#include "d4all.h"
#ifdef __TURBOC__
#pragma hdrstop
#endif
#include "t4test.h"
#ifndef S4INDEX_OFF
CODE4 cb;
DATA4 *data, *data2;
FIELD4 *c_field, *d_field, *n_field, *num, *char1, *char2 ;
TAG4 *tag ;
int count = 9 ;
static FIELD4INFO fields[] =
{
{ "N_FIELD", 'N', 8, 0 },
{ "C_FIELD", 'C', 8, 0 },
{ "D_FIELD", 'D', 8, 0 },
{ 0, 0,0,0 },
} ;
static TAG4INFO tags[] =
{
#ifdef N4OTHER
{ "N_TAG", "N_FIELD", "", r4unique_continue, 0 },
{ "C_TAG", "C_FIELD", "", r4unique_continue, 0 },
{ "D_TAG", "D_FIELD", "", r4unique_continue, 0 },
#else
{ "N_TAG", "N_FIELD", "", r4unique_continue, r4descending },
{ "C_TAG", "C_FIELD", "", r4unique_continue, r4descending },
{ "D_TAG", "D_FIELD", "", r4unique_continue, r4descending },
#endif
{ 0,0,0, 0, 0 },
} ;
static FIELD4INFO fields2[] =
{
{ "NUM", 'N', 8, 0 },
{ "CHAR1", 'C', 8, 0 },
{ "CHAR2", 'C', 8, 0 },
{ 0, 0,0,0 },
} ;
static TAG4INFO tags2[] =
{
{ "TAG1", "NUM", "", r4unique_continue, 0 },
{ "TAG2", "NUM", "", r4unique, 0 },
{ "TAG3", "NUM", ".NOT. DELETED()", r4unique_continue, 0 },
{ "TAG4", "NUM", ".NOT. DELETED()", r4unique, 0 },
{ "TAG5", "CHAR1", "", r4unique_continue, 0 },
{ "TAG6", "CHAR1", "", r4unique, 0 },
{ "TAG7", "CHAR1", ".NOT. DELETED()", r4unique_continue, 0 },
{ "TAG8", "CHAR1", ".NOT. DELETED()", r4unique, 0 },
{ "TAG9", "CHAR1+CHAR2", "", r4unique_continue, 0 },
{ "TAG10", "CHAR1+CHAR2", "", r4unique, 0 },
{ "TAG11", "CHAR1+CHAR2", ".NOT. DELETED()", r4unique_continue, 0 },
{ "TAG12", "CHAR1+CHAR2", ".NOT. DELETED()", r4unique, 0 },
{ 0,0,0, 0, 0 },
} ;
static int test_tag( D4DISPLAY *display )
{
#ifdef N4OTHER
long r = 1 ;
#else
long r = 9 ;
#endif
if ( d4top( data ) != 0 )
t4severe( t4err_go, "01" ) ;
for ( ;; )
{
if ( d4eof( data ) )
break ;
if ( d4display_quit( display ) )
return 1 ;
if ( d4recno( data ) != r )
t4severe( t4err_recno, "02" ) ;
#ifdef N4OTHER
r += 2 ;
#else
r -= 2 ;
#endif
if ( d4skip( data, 1L ) < 0 )
t4severe( t4err_skip, "03" ) ;
}
if ( d4go( data, 2L ) != 0 )
t4severe( t4err_go, "04" ) ;
#ifndef N4OTHER
if ( d4skip( data, 2L ) != r4eof )
#else
if ( d4skip( data, 5 ) != r4eof )
#endif
t4severe( t4err_skip, "05" ) ;
return 0 ;
}
static int test_unique( D4DISPLAY *display, int do_open )
{
long start_date, r ;
char hold[10] ;
start_date = date4long( "19800101" ) ;
cb.skip_error = 0 ;
cb.safety = 0 ;
if (do_open)
{
data = d4open( &cb, "T4UNIQUE" ) ;
d4zap( data, 1L, d4reccount(data) ) ;
}
else
data = d4create( &cb, "T4UNIQUE", fields, tags ) ;
if ( data == 0 )
t4severe( t4err_data, "06" ) ;
d4opt_start( &cb ) ;
c_field = d4field( data, "C_FIELD" ) ;
d_field = d4field( data, "D_FIELD" ) ;
n_field = d4field( data, "N_FIELD" ) ;
if ( c_field == 0 || d_field == 0 || n_field == 0 )
t4severe( t4err_field, "07" ) ;
for ( r = 1; r <= 10; r++ )
{
if ( d4display_quit( display ) )
return 1 ;
if ( d4append_start(data, 0) < 0 )
t4severe( t4err_append, "08" ) ;
f4assign_long( n_field, (r+1)/2 ) ;
f4assign_long( c_field, (r+1)/2 ) ;
f4assign_long( d_field, start_date + (r+1)/2 ) ;
if ( d4append(data) < 0 )
t4severe( t4err_append, "09" ) ;
}
d4display_str( display, "Testing using tags . . . ", 1 ) ;
tag = d4tag( data, "N_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "10" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
if ( d4seek_double( data, 2.0 ) != 0 )
t4severe( t4err_seek, "11" ) ;
if ( d4recno( data ) != 3 )
t4severe( t4err_recno, "12" ) ;
tag = d4tag( data, "D_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "13" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
tag = d4tag( data, "C_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "14" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
if ( d4reindex( data ) != 0 )
t4severe( t4err_reindex, "15" ) ;
tag = d4tag( data, "N_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "16" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
tag = d4tag( data, "D_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "17" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
tag = d4tag( data, "C_TAG" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "18" ) ;
d4tag_select( data, tag ) ;
if ( test_tag( display ) )
return 1 ;
#ifndef N4OTHER
if (do_open)
{
data2 = d4open( &cb, "T4UNIQU2" ) ;
if ( data2 == 0 )
t4severe( t4err_data, "19" ) ;
for ( r = 0, tag = 0; r < 6; r++ ) /* set every second tag.unique_error to r4unique */
{
tag = d4tag_next( data2 , d4tag_next( data2, tag ) ) ;
if ( tag == 0 )
t4severe( t4err_tag, "20" ) ;
tag->unique_error = r4unique ;
}
if ( d4zap( data2, 6L, d4reccount( data2 ) ) != 0 ) /* delete half the records */
t4severe( t4err_zap, "21" ) ;
count -= 5 ; /* set count so that append adds zapped records back */
if ( d4check( data2 ) != 0 )
t4severe( t4err_check, "22" ) ;
}
else
{
d4display_str( display, "T4UNIQUE: Part two . . . ", 1 ) ;
data2 = d4create( &cb, "T4UNIQU2", fields2, tags2 ) ;
if ( data2 == 0 )
t4severe( t4err_data, "23" ) ;
}
num = d4field( data2, "NUM" ) ;
char1 = d4field( data2, "CHAR1" ) ;
char2 = d4field( data2, "CHAR2" ) ;
if ( num == 0 || char1 == 0 || char2 == 0 )
t4severe( t4err_field, "24" ) ;
for ( r = count; r >= 0; r-- )
{
if ( d4display_quit( display ) )
return 1 ;
if ( d4append_start( data2, 0) < 0 )
t4severe( t4err_append, "25" ) ;
f4assign_long( num, (r*100000+24689) ) ;
c4ltoa45( (r*100000+24689), hold, 8 ) ;
f4assign( char1, hold ) ;
c4ltoa45( (r*100000+24689), hold, 8 ) ;
f4assign( char2, hold ) ;
if ( d4append( data2 ) < 0 )
t4severe( t4err_append, "26" ) ;
}
if ( d4check( data2 ) != 0 )
t4severe( t4err_check, "27" ) ;
tag = d4tag( data2, "TAG6" ) ;
if ( tag == 0 )
t4severe( t4err_tag, "28" ) ;
d4tag_select( data2, tag ) ;
if ( d4go( data2, 2L ) != 0 )
t4severe( t4err_go, "29" ) ;
f4assign( char1, " 724689" ) ; /* create non-unique key situation */
if ( d4flush( data2 ) != r4unique )
t4severe( t4err_flush, "30" ) ;
data2->record_changed = 0 ; /* replace with d4abort_change */
if ( d4seek( data2, " 824689" ) ) /* check that no change made to tag */
t4severe( t4err_seek, "31" ) ;
if ( memcmp( f4ptr( char1 ), " 824689", 8 ) ) /* check record unchanged */
t4severe( t4err_field, "32" ) ;
if ( d4check( data2 ) != 0 )
t4severe( t4err_check, "33" ) ;
tag = d4tag( data2, "TAG2" ) ; /* check that previous tags not updated */
if ( tag == 0 )
t4severe( t4err_tag, "34" ) ;
d4tag_select( data2, tag ) ;
if ( d4seek_double( data2, 724689.0 ) )
t4severe( t4err_seek, "35" ) ;
if ( d4seek( data2, "724689" ) )
t4severe( t4err_seek, "36" ) ;
if ( d4append_start( data2, 0 ) != 0 )
t4severe( t4err_append, "37" ) ;
f4assign_long( num, 99999999 ) ;
f4assign( char1, "99999999" ) ;
f4assign( char2, "99999999" ) ;
if ( d4append_start( data2, 0 ) != 0 )
t4severe( t4err_append, "38" ) ;
if ( d4flush( data2 ) != 0 )
t4severe( t4err_flush, "39" ) ;
if ( d4seek_double( data2, 99999999.0 ) != r4eof ) /* check that no change made to tag */
t4severe( t4err_seek, "40" ) ;
if ( d4check( data2 ) != 0 )
t4severe( t4err_check, "41" ) ;
#endif
if ( d4close_all( &cb ) < 0 )
t4severe( t4err_close, "42" ) ;
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_unique( display, 0 ) )
return 1 ;
if ( test_unique( display, 1 ) )
return 1 ;
#ifndef S4TEST_KEEP_FILES
u4remove( "T4UNIQUE.dbf" ) ;
u4remove( "T4UNIQU2.dbf" ) ;
#ifdef N4OTHER
u4remove( "T4UNIQUE.CGP" ) ;
u4remove( "T4UNIQU2.CGP" ) ;
#endif
#ifdef S4MDX
u4remove( "T4UNIQUE.mdx" ) ;
u4remove( "T4UNIQU2.mdx" ) ;
#endif
#ifdef S4FOX
u4remove( "T4UNIQUE.cdx" ) ;
u4remove( "T4UNIQU2.cdx" ) ;
#endif
#ifdef S4CLIPPER
u4remove( "N_TAG.NTX" ) ;
u4remove( "C_TAG.NTX" ) ;
u4remove( "D_TAG.NTX" ) ;
u4remove( "TAG1.NTX" ) ;
u4remove( "TAG2.NTX" ) ;
u4remove( "TAG3.NTX" ) ;
u4remove( "TAG4.NTX" ) ;
u4remove( "TAG5.NTX" ) ;
u4remove( "TAG6.NTX" ) ;
u4remove( "TAG7.NTX" ) ;
u4remove( "TAG8.NTX" ) ;
u4remove( "TAG9.NTX" ) ;
u4remove( "TAG10.NTX" ) ;
u4remove( "TAG11.NTX" ) ;
u4remove( "TAG12.NTX" ) ;
#endif
#ifdef S4NDX
u4remove( "N_TAG.NDX" ) ;
u4remove( "C_TAG.NDX" ) ;
u4remove( "D_TAG.NDX" ) ;
u4remove( "TAG1.NDX" ) ;
u4remove( "TAG2.NDX" ) ;
u4remove( "TAG3.NDX" ) ;
u4remove( "TAG4.NDX" ) ;
u4remove( "TAG5.NDX" ) ;
u4remove( "TAG6.NDX" ) ;
u4remove( "TAG7.NDX" ) ;
u4remove( "TAG8.NDX" ) ;
u4remove( "TAG9.NDX" ) ;
u4remove( "TAG10.NDX" ) ;
u4remove( "TAG11.NDX" ) ;
u4remove( "TAG12.NDX" ) ;
#endif
#endif
d4init_undo(&cb) ;
mem4reset() ;
#ifdef S4DEBUG
mem4check_memory() ;
#ifndef S4DLL
if ( mem4free_check(100) != 0 )
t4severe( t4err_memory, "43" ) ;
#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, "T4UNIQUE Test ", 1 ) ;
d4display_str( display, " ", 1 ) ;
if ( test_with_mem_check( display ) )
e4exit(&cb) ;
display->y += 2 ;
d4display_str( display, "T4UNIQUE: SUCCESS", 1) ;
#endif
return 1 ;
}