ADDTEST.MOD 2.9 KB

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