MODULE AddTest; (* Add Benchmark *) (* IMPORT PMD; *) IMPORT InitCompilerMods; FROM ErrorManager IMPORT WARN; FROM ModBase3 IMPORT DBFile, CloseDBF, DBFieldDescriptor, BuildDBF, AppendBlank, WriteDBRec,InitDBF,DefaultFixUp; FROM DBIndxes IMPORT DBIndex, BuildIndex, InitIndex, CloseIndex, AddRecord, FindPositionCh,SetSafetyOff, AddToUpdateList,SetIndexBuffers; FROM DBFields IMPORT Replace; FROM Timing IMPORT BeginTimer, ShowUsage; FROM InOut IMPORT WriteCard; FROM Rand IMPORT RandomInit, RandomCard; (* FROM Lib IMPORT RANDOM;*) 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(*RANDOM*)(HIGH(S)+1) ; (* random 1 to 30 Len *) FOR I := 0 TO Len - 1 DO S[I] := CHR(RandomCard(*RANDOM*)(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; (* was keylen=30 buffers 400 *) CONST KeyLen = 30; Buffers = 400; TYPE KeyStr = ARRAY [0..KeyLen-1] OF CHAR; VAR DBF : DBFile; Fields : ARRAY [1..2] OF DBFieldDescriptor; NDX : DBIndex; I : CARDINAL; Name : KeyStr; Found : BOOLEAN; BEGIN BeginTimer(); (* start timer counting *) RandomInit(1); WITH Fields[1] DO name := "NAME"; size := 30; fldtype := 'C'; END (* with *); WITH Fields[2] DO name := "PHONE"; size := 13; fldtype := 'C'; END (* with *); InitDBF('ModBase.DBF', DBF,40000,FALSE,TRUE,FALSE,DefaultFixUp); InitIndex('ModBase.NDX',NDX,DBF,Buffers,FALSE,TRUE,TRUE); IF BuildDBF( Fields,2, DBF)#0 THEN WARN('Unable to create modbase.dbf'); END; (* Create empty DBF file *) IF BuildIndex(NDX, 'NAME')#0 (* create initial empty index *) THEN WARN('unable to get excluse access to index') END; AddToUpdateList(DBF,NDX); FOR I := 1 TO 5000 DO WriteCard(I, 8); REPEAT (* generate random keys *) RandStr(Name); FindPositionCh(NDX, Name, Found); UNTIL NOT Found; (* until not already added *) AppendBlank(DBF); Replace(DBF, 1, Name); (* store key in record *) WriteDBRec(DBF); (* add record to data file *) (* AddRecord(DBF, NDX); *) (* (* all ok now but good for diag*) FindPositionCh(NDX, Name, Found); IF NOT Found THEN HALT; END (* if *); *) END (* for *); CloseIndex(NDX); CloseDBF(DBF); ShowUsage('add test'); (* display elaped time in seconds *) END AddTest.