ACCTEST.MOD 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. MODULE AccTest; (* Access Benchmark *)
  2. IMPORT InitCompilerMods;
  3. FROM DBIndxes IMPORT DBIndex, InitIndex, CloseIndex, FindPositionCh;
  4. FROM ModBase3 IMPORT Replace,DBFile,InitDBF,OpenDBF,DefaultFixUp;
  5. FROM Timing IMPORT BeginTimer, ShowUsage;
  6. FROM Rand IMPORT RandomInit, RandomCard;
  7. (* FROM Lib IMPORT RANDOM;*)
  8. IMPORT StringIO;
  9. IMPORT StrConv;
  10. VAR
  11. counter:CARDINAL;
  12. string:ARRAY[0..79] OF CHAR;
  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*)RandomCard(HIGH(S)+1) ; (* random 1 to 30 Len *)
  20. FOR I := 0 TO Len - 1 DO
  21. S[I] := CHR((*RandomCard*)RandomCard(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. CONST
  28. KeyLen = 30;
  29. Buffers = 400;
  30. TYPE
  31. KeyStr = ARRAY [0..KeyLen-1] OF CHAR;
  32. VAR
  33. DBF : DBFile;
  34. NDX : DBIndex;
  35. Name : KeyStr;
  36. Found : BOOLEAN;
  37. BEGIN
  38. BeginTimer(); (* BeginTimer() timer counting *)
  39. RandomInit(1);
  40. counter:=0;
  41. InitDBF('Modbase.DBF',DBF,0,FALSE,TRUE,FALSE,DefaultFixUp);
  42. IF OpenDBF(DBF) THEN END;
  43. InitIndex("ModBase.NDX", NDX,DBF, Buffers,FALSE,TRUE,TRUE);
  44. REPEAT (* generate random keys *)
  45. RandStr(Name);
  46. FindPositionCh(NDX, Name, Found);
  47. INC(counter);
  48. UNTIL NOT Found; (* until not in index *)
  49. CloseIndex(NDX);
  50. DEC(counter);
  51. StrConv.CardinalToStr(counter,0,string);
  52. StringIO.WriteStr(StringIO.outp,string);
  53. StringIO.WriteEol(StringIO.outp,' Keys found');
  54. ShowUsage(' Accsesstest time'); (* display elaped time in seconds *)
  55. END AccTest.