ADDTESTN.MOD 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. MODULE AddTestN; (* Add Benchmark *)
  2. IMPORT InitCompilerMods;
  3. FROM NumTypes IMPORT Real8;
  4. FROM ModBase3 IMPORT DBFile, CloseDBF, DBFieldDescriptor,
  5. AppendBlank, WriteDBRec,InitDBF,BuildDBF,
  6. DefaultFixUp,Replace;
  7. FROM DBIndxes IMPORT DBIndex, BuildIndex, OpenIndex, CloseIndex,
  8. AddRecord, FindPositionN,AddToUpdateList,InitIndex;
  9. FROM Timing IMPORT BeginTimer, ShowUsage;
  10. FROM StringIO IMPORT PrintMessage;
  11. FROM InOut IMPORT WriteCard;
  12. FROM Rand IMPORT RandomInit, RandomCard,RandomReal;
  13. IMPORT StrConv;
  14. (* FROM Lib IMPORT RAND;*)
  15. PROCEDURE RandStr(VAR S : ARRAY OF CHAR);
  16. (* Generate a string of random letters with a random length *)
  17. VAR
  18. key:Real8;
  19. BEGIN
  20. (* StrConv.RealToStr((*RandomReal*)VAL(
  21. LONGREAL,RAND()) * 100000.0,2,10,S); *)
  22. StrConv.RealToStr((RandomReal() * 10000000.0),2,10,S);
  23. END RandStr;
  24. CONST
  25. KeyLen = 10;
  26. Buffers = 400;
  27. TYPE
  28. KeyStr = ARRAY [0..KeyLen-1] OF CHAR;
  29. VAR
  30. DBF : DBFile;
  31. Fields : ARRAY [1..2] OF DBFieldDescriptor;
  32. NDX : DBIndex;
  33. I : CARDINAL;
  34. Name : KeyStr;
  35. Found : BOOLEAN;
  36. BEGIN
  37. BeginTimer(); (* start timer counting *)
  38. RandomInit(1);
  39. WITH Fields[1] DO
  40. name := "NUMBER";
  41. size := 10;
  42. decplaces :=2;
  43. fldtype := 'N';
  44. END (* with *);
  45. WITH Fields[2] DO
  46. name := "PHONE";
  47. size := 13;
  48. fldtype := 'C';
  49. END (* with *);
  50. InitDBF('ModBasen.DBF', DBF,40000,FALSE,TRUE,FALSE,DefaultFixUp);
  51. InitIndex('ModBasen.NDX',NDX,DBF,Buffers,FALSE,TRUE);
  52. PrintMessage(BuildDBF( Fields,2, DBF)); (* Create empty DBF file *)
  53. PrintMessage(BuildIndex(NDX, 'NUMBER')); (* create initial empty index *)
  54. AddToUpdateList(DBF,NDX);
  55. FOR I := 1 TO 2000 DO
  56. WriteCard(I, 8);
  57. REPEAT (* generate random keys *)
  58. RandStr(Name);
  59. FindPositionN(NDX, Name, Found);
  60. UNTIL NOT Found; (* until not already added *)
  61. AppendBlank(DBF);
  62. Replace(DBF, 1, Name); (* store key in record *)
  63. WriteDBRec(DBF); (* add record to data file *)
  64. (* AddRecord(DBF, NDX); *)
  65. (* (* all ok now but good for diag*)
  66. FindPositionN(NDX, Name, Found);
  67. IF NOT Found THEN
  68. HALT;
  69. END (* if *);
  70. *)
  71. END (* for *);
  72. CloseIndex(NDX);
  73. CloseDBF(DBF);
  74. ShowUsage('add test'); (* display elaped time in seconds *)
  75. END AddTestN.
  76.