shortbench.pp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. program TestShortStr;
  2. uses timer;
  3. const
  4. TestSize=1000; {Use at least 10 for reasonable results}
  5. type
  6. BenType=array[1..8] of longint;
  7. var
  8. Total : longint;
  9. headBen,
  10. LoadBen,
  11. ConcatBen,
  12. DelBen,
  13. InsBen,
  14. CopyBen,
  15. CmpBen,
  16. MixBen : BenType;
  17. procedure TestSpeed(Row,Len:byte);
  18. var
  19. l : longint;
  20. hstr,
  21. OrgStr : shortstring;
  22. begin
  23. HeadBen[Row]:=Len;
  24. OrgStr:='';
  25. while Length(OrgStr)<Len do
  26. OrgStr:=OrgStr+'aaaaaaaaaa';
  27. OrgStr:=Copy(OrgStr,1,Len);
  28. OrgStr[Len]:='b';
  29. {Load/Store}
  30. Start;
  31. for l:=1to 5000*TestSize do
  32. HSTr:=OrgStr;
  33. Stop;
  34. inc(Total,MSec);
  35. LoadBen[Row]:=MSec;
  36. {Concat}
  37. Start;
  38. for l:=1to 2000*TestSize do
  39. begin
  40. Hstr:='aaa';
  41. Hstr:=Hstr+OrgStr;
  42. end;
  43. Stop;
  44. inc(Total,MSec);
  45. ConcatBen[Row]:=MSec;
  46. {Copy}
  47. Start;
  48. for l:=1to 2000*TestSize do
  49. HSTr:=Copy(OrgStr,1,Len);
  50. Stop;
  51. inc(Total,MSec);
  52. CopyBen[Row]:=MSec;
  53. {Delete}
  54. Start;
  55. for l:=1to 2000*TestSize do
  56. begin
  57. Hstr:=OrgStr;
  58. Delete(HStr,1,9);
  59. end;
  60. Stop;
  61. inc(Total,MSec);
  62. DelBen[Row]:=MSec;
  63. {Insert}
  64. Start;
  65. for l:=1to 1000*TestSize do
  66. begin
  67. Hstr:='aaa';
  68. Insert(OrgStr,hstr,2);
  69. Hstr:=OrgStr;
  70. Insert('aaaaaaaaaaaaa',hstr,9);
  71. end;
  72. Stop;
  73. inc(Total,MSec);
  74. InsBen[Row]:=MSec;
  75. {Compare}
  76. Start;
  77. Hstr:='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'+
  78. 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'+
  79. 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
  80. for l:=1to 5000*TestSize do
  81. if OrgStr=Hstr then;
  82. Stop;
  83. inc(Total,MSec);
  84. CmpBen[Row]:=MSec;
  85. {Mixed}
  86. Start;
  87. for l:=1 to 400*TestSize do
  88. begin
  89. hstr:=OrgStr;
  90. hstr:=Copy(hstr,1,30);
  91. Delete(hstr,5,40);
  92. hstr:=Copy(hstr,1,length(hstr));
  93. hstr:=hstr+' ';
  94. Delete(hstr,length(hstr)-2,2);
  95. Insert('aaaaaaaaaaaaaaaaaaaaaaaaaaaa',hstr,10);
  96. Insert('aaaaaaaaaaaaaaaaaaaaaaaaaaaa',hstr,20);
  97. hstr:=Copy(hstr,1,length(hstr));
  98. hstr:=Copy(hstr,1,80)+'aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbb';
  99. hstr:=hstr+OrgStr;
  100. end;
  101. Stop;
  102. inc(Total,MSec);
  103. MixBen[Row]:=MSec;
  104. end;
  105. procedure PutBen(const r:BenType);
  106. var
  107. i : byte;
  108. rtot : cardinal;
  109. begin
  110. rtot:=0;
  111. for i:=1to 8 do
  112. begin
  113. inc(rtot,r[i]);
  114. Write(r[i]:6);
  115. end;
  116. Write('':4);
  117. Write('avg=',rtot div 8);
  118. Writeln;
  119. end;
  120. begin
  121. VerboseTimer:=false;
  122. WriteLn ('Shortstring Speed Test');
  123. WriteLn;
  124. TestSpeed(1,10);
  125. TestSpeed(2,30);
  126. TestSpeed(3,50);
  127. TestSpeed(4,70);
  128. TestSpeed(5,100);
  129. TestSpeed(6,150);
  130. TestSpeed(7,200);
  131. TestSpeed(8,250);
  132. Write('Length ');
  133. PutBen(HeadBen);
  134. WriteLn('------------------------------------------------------------------------------');
  135. Write('Load/Store ');
  136. PutBen(LoadBen);
  137. Write('Concat ');
  138. PutBen(ConcatBen);
  139. Write('Copy ');
  140. PutBen(CopyBen);
  141. Write('Delete ');
  142. PutBen(DelBen);
  143. Write('Insert ');
  144. PutBen(InsBen);
  145. Write('Compare ');
  146. PutBen(CmpBen);
  147. Write('Mixed ');
  148. PutBen(MixBen);
  149. WriteLn('Shortstring-Benchmark avarage ',Total div 8,' ms');
  150. end.