| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- MODULE AddTestF; (* Add Benchmark *)
- IMPORT InitCompilerMods;
- FROM ModBase3 IMPORT DBFile, CloseDBF, DBFieldDescriptor,
- BuildDBF,Record,DefaultFixUp,AppendBlank, WriteDBRec,InitDBF;
- FROM DBIndxes IMPORT DBIndex, BuildIndex, InitIndex, CloseIndex,
- AddRecord, FindPositionCh,SetSafetyOff,
- AddToUpdateList,SetIndexBuffers,InsertEntry;
- FROM DBFields IMPORT Replace;
- FROM Timing IMPORT BeginTimer, ShowUsage;
- FROM InOut IMPORT WriteCard;
- (* FROM Random 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);
- IF BuildDBF( Fields,2, DBF)=0 THEN END; (* Create empty DBF file *)
- IF BuildIndex(NDX, 'NAME')=0 THEN END ; (* create initial empty index *)
- (* 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);
- InsertEntry(NDX,Name,Record(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 AddTestF.
|