MODULE AccTest; (* Access Benchmark *) IMPORT InitCompilerMods; FROM DBIndxes IMPORT DBIndex, InitIndex, CloseIndex, FindPositionCh; FROM ModBase3 IMPORT Replace,DBFile,InitDBF,OpenDBF,DefaultFixUp; FROM Timing IMPORT BeginTimer, ShowUsage; FROM Rand IMPORT RandomInit, RandomCard; (* FROM Lib IMPORT RANDOM;*) IMPORT StringIO; IMPORT StrConv; VAR counter:CARDINAL; string:ARRAY[0..79] OF CHAR; PROCEDURE RandStr(VAR S : ARRAY OF CHAR); (* Generate a string of random letters with a random length *) VAR I : CARDINAL; Len : CARDINAL; BEGIN Len := 1 + (*RandomCard*)RandomCard(HIGH(S)+1) ; (* random 1 to 30 Len *) FOR I := 0 TO Len - 1 DO S[I] := CHR((*RandomCard*)RandomCard(26)+65); (* random letters *) END (* for *); FOR I := Len TO HIGH(S) DO (* ModBase requires space padded keys *) S[I] := ' '; (* instead of a 0C terminated string *) END (* if *); END RandStr; CONST KeyLen = 30; Buffers = 400; TYPE KeyStr = ARRAY [0..KeyLen-1] OF CHAR; VAR DBF : DBFile; NDX : DBIndex; Name : KeyStr; Found : BOOLEAN; BEGIN BeginTimer(); (* BeginTimer() timer counting *) RandomInit(1); counter:=0; InitDBF('Modbase.DBF',DBF,0,FALSE,TRUE,FALSE,DefaultFixUp); IF OpenDBF(DBF) THEN END; InitIndex("ModBase.NDX", NDX,DBF, Buffers,FALSE,TRUE,TRUE); REPEAT (* generate random keys *) RandStr(Name); FindPositionCh(NDX, Name, Found); INC(counter); UNTIL NOT Found; (* until not in index *) CloseIndex(NDX); DEC(counter); StrConv.CardinalToStr(counter,0,string); StringIO.WriteStr(StringIO.outp,string); StringIO.WriteEol(StringIO.outp,' Keys found'); ShowUsage(' Accsesstest time'); (* display elaped time in seconds *) END AccTest.