MODULE AddTestN; (* Add Benchmark *) IMPORT InitCompilerMods; FROM NumTypes IMPORT Real8; FROM ModBase3 IMPORT DBFile, CloseDBF, DBFieldDescriptor, AppendBlank, WriteDBRec,InitDBF,BuildDBF, DefaultFixUp,Replace; FROM DBIndxes IMPORT DBIndex, BuildIndex, OpenIndex, CloseIndex, AddRecord, FindPositionN,AddToUpdateList,InitIndex; FROM Timing IMPORT BeginTimer, ShowUsage; FROM StringIO IMPORT PrintMessage; FROM InOut IMPORT WriteCard; FROM Rand IMPORT RandomInit, RandomCard,RandomReal; IMPORT StrConv; (* FROM Lib IMPORT RAND;*) PROCEDURE RandStr(VAR S : ARRAY OF CHAR); (* Generate a string of random letters with a random length *) VAR key:Real8; BEGIN (* StrConv.RealToStr((*RandomReal*)VAL( LONGREAL,RAND()) * 100000.0,2,10,S); *) StrConv.RealToStr((RandomReal() * 10000000.0),2,10,S); END RandStr; CONST KeyLen = 10; 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 := "NUMBER"; size := 10; decplaces :=2; fldtype := 'N'; END (* with *); WITH Fields[2] DO name := "PHONE"; size := 13; fldtype := 'C'; END (* with *); InitDBF('ModBasen.DBF', DBF,40000,FALSE,TRUE,FALSE,DefaultFixUp); InitIndex('ModBasen.NDX',NDX,DBF,Buffers,FALSE,TRUE); PrintMessage(BuildDBF( Fields,2, DBF)); (* Create empty DBF file *) PrintMessage(BuildIndex(NDX, 'NUMBER')); (* create initial empty index *) AddToUpdateList(DBF,NDX); FOR I := 1 TO 2000 DO WriteCard(I, 8); REPEAT (* generate random keys *) RandStr(Name); FindPositionN(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*) FindPositionN(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 AddTestN.