ADDTESTF.MOD 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. MODULE AddTestF; (* Add Benchmark *)
  2. IMPORT InitCompilerMods;
  3. FROM ModBase3 IMPORT DBFile, CloseDBF, DBFieldDescriptor,
  4. BuildDBF,Record,DefaultFixUp,AppendBlank, WriteDBRec,InitDBF;
  5. FROM DBIndxes IMPORT DBIndex, BuildIndex, InitIndex, CloseIndex,
  6. AddRecord, FindPositionCh,SetSafetyOff,
  7. AddToUpdateList,SetIndexBuffers,InsertEntry;
  8. FROM DBFields IMPORT Replace;
  9. FROM Timing IMPORT BeginTimer, ShowUsage;
  10. FROM InOut IMPORT WriteCard;
  11. (* FROM Random IMPORT RandomInit, RandomCard;*)
  12. FROM Lib IMPORT RANDOM;
  13. PROCEDURE RandStr(VAR S : ARRAY OF CHAR);
  14. (* Generate a string of random letters with a random length *)
  15. VAR
  16. I : CARDINAL;
  17. Len : CARDINAL;
  18. BEGIN
  19. Len := 1 + (*RandomCard*)RANDOM(HIGH(S)+1) ; (* random 1 to 30 Len *)
  20. FOR I := 0 TO Len - 1 DO
  21. S[I] := CHR((*RandomCard*)RANDOM(26)+65); (* random letters *)
  22. END (* for *);
  23. FOR I := Len TO HIGH(S) DO (* ModBase requires space padded keys *)
  24. S[I] := ' '; (* instead of a 0C terminated string *)
  25. END (* if *);
  26. END RandStr;
  27. (* was keylen=30 buffers 400 *)
  28. CONST
  29. KeyLen = 30;
  30. Buffers = 400;
  31. TYPE
  32. KeyStr = ARRAY [0..KeyLen-1] OF CHAR;
  33. VAR
  34. DBF : DBFile;
  35. Fields : ARRAY [1..2] OF DBFieldDescriptor;
  36. NDX : DBIndex;
  37. I : CARDINAL;
  38. Name : KeyStr;
  39. Found : BOOLEAN;
  40. BEGIN
  41. BeginTimer(); (* start timer counting *)
  42. (* RandomInit(1);*)
  43. WITH Fields[1] DO
  44. name := "NAME";
  45. size := 30;
  46. fldtype := 'C';
  47. END (* with *);
  48. WITH Fields[2] DO
  49. name := "PHONE";
  50. size := 13;
  51. fldtype := 'C';
  52. END (* with *);
  53. InitDBF('ModBase.DBF', DBF,40000,FALSE,TRUE,FALSE,DefaultFixUp);
  54. InitIndex('ModBase.NDX',NDX,DBF,Buffers,FALSE,TRUE);
  55. IF BuildDBF( Fields,2, DBF)=0 THEN END; (* Create empty DBF file *)
  56. IF BuildIndex(NDX, 'NAME')=0 THEN END ; (* create initial empty index *)
  57. (* AddToUpdateList(DBF,NDX);*)
  58. FOR I := 1 TO 5000 DO
  59. WriteCard(I, 8);
  60. REPEAT (* generate random keys *)
  61. RandStr(Name);
  62. FindPositionCh(NDX, Name, Found);
  63. UNTIL NOT Found; (* until not already added *)
  64. AppendBlank(DBF);
  65. Replace(DBF, 1, Name); (* store key in record *)
  66. WriteDBRec(DBF);
  67. InsertEntry(NDX,Name,Record(DBF));
  68. (* add record to data file *)
  69. (* AddRecord(DBF, NDX); *)
  70. (* (* all ok now but good for diag*)
  71. FindPositionCh(NDX, Name, Found);
  72. IF NOT Found THEN
  73. HALT;
  74. END (* if *);
  75. *)
  76. END (* for *);
  77. CloseIndex(NDX);
  78. CloseDBF(DBF);
  79. ShowUsage('add test'); (* display elaped time in seconds *)
  80. END AddTestF.
  81.