/* 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 }