| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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.
|