|
@@ -1,58 +1,4 @@
|
|
|
program TestStr;
|
|
|
-{$ifdef timer}
|
|
|
-uses Timer;
|
|
|
-{$else}
|
|
|
-type
|
|
|
- TTimer = Object
|
|
|
- TotalMSec,
|
|
|
- StartMSec : longint;
|
|
|
- constructor init;
|
|
|
- procedure reset;
|
|
|
- procedure start;
|
|
|
- procedure stop;
|
|
|
- Function MSec:longint;
|
|
|
- end;
|
|
|
-
|
|
|
-procedure TTimer.Reset;
|
|
|
-begin
|
|
|
-end;
|
|
|
-
|
|
|
-procedure TTimer.Start;
|
|
|
-begin
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-procedure TTimer.Stop;
|
|
|
-begin
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-Function TTimer.MSec:longint;
|
|
|
-begin
|
|
|
- MSec:=0;
|
|
|
-end;
|
|
|
-
|
|
|
-Constructor TTimer.Init;
|
|
|
-begin
|
|
|
-end;
|
|
|
-
|
|
|
-{$endif}
|
|
|
-
|
|
|
-const
|
|
|
- TestSize=10; {Use at least 10 for reasonable results}
|
|
|
-type
|
|
|
- BenType=array[1..8] of longint;
|
|
|
-var
|
|
|
- Total : longint;
|
|
|
- headBen,
|
|
|
- LoadBen,
|
|
|
- ConcatBen,
|
|
|
- DelBen,
|
|
|
- InsBen,
|
|
|
- CopyBen,
|
|
|
- CmpBen,
|
|
|
- MixBen : BenType;
|
|
|
- t : TTimer;
|
|
|
|
|
|
function TestOK:boolean;
|
|
|
Const
|
|
@@ -85,7 +31,7 @@ begin
|
|
|
S:=S + T [25]; {'THIS'}
|
|
|
S:=S + Copy (S, 3, -5) + Copy (S, 3, 2); {'THISIS'}
|
|
|
V:=T; {'THE QUICK BROWN FOX JUMPS OVER THE LAZY ..'}
|
|
|
- Delete (V, -10, 47); {'AZY DOG 1234567890'}
|
|
|
+ Delete (V, 1, 36); {'AZY DOG 1234567890'}
|
|
|
if (Copy (V, -7, -1)='') and (Pos ('DOG', V)=5) then {TRUE}
|
|
|
Insert (V, S, 200); {'THISISAZY DOG 1234567890'}
|
|
|
U:=Copy (T, 44, 40); {' '}
|
|
@@ -104,7 +50,7 @@ begin
|
|
|
Insert ('HELLO', S, -4); {'HELLOTHIS IS A0 TEST'}
|
|
|
Insert (',', S, 6); {'HELLO,THIS IS A0 TEST'}
|
|
|
Delete (S, Pos ('TEST', S) - 2, 1); {'HELLO,THIS IS A TEST'}
|
|
|
- Delete (Q, 0, 32767); {''}
|
|
|
+ Delete (Q, 1, 32767); {''}
|
|
|
Q:=Q + ' '; {' '}
|
|
|
Insert (Q, S, 7); {'HELLO, THIS IS A TEST'}
|
|
|
Insert (Q, S, 255); {'HELLO, THIS IS A TEST '}
|
|
@@ -114,153 +60,12 @@ begin
|
|
|
end;
|
|
|
|
|
|
|
|
|
-procedure TestSpeed(Row,Len:byte);
|
|
|
-var
|
|
|
- l : longint;
|
|
|
- hstr,
|
|
|
- OrgStr : string;
|
|
|
begin
|
|
|
- HeadBen[Row]:=Len;
|
|
|
- OrgStr:='';
|
|
|
- while Length(OrgStr)<Len do
|
|
|
- OrgStr:=OrgStr+'aaaaaaaaaa';
|
|
|
- OrgStr:=Copy(OrgStr,1,Len);
|
|
|
- OrgStr[Len]:='b';
|
|
|
-{Load/Store}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1to 5000*TestSize do
|
|
|
- HSTr:=OrgStr;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- LoadBen[Row]:=t.MSec;
|
|
|
-{Concat}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1to 2000*TestSize do
|
|
|
- begin
|
|
|
- Hstr:='aaa';
|
|
|
- Hstr:=Hstr+OrgStr;
|
|
|
- end;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- ConcatBen[Row]:=t.MSec;
|
|
|
-{Copy}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1to 2000*TestSize do
|
|
|
- HSTr:=Copy(OrgStr,1,Len);
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- CopyBen[Row]:=t.MSec;
|
|
|
-{Delete}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1to 2000*TestSize do
|
|
|
- begin
|
|
|
- Hstr:=OrgStr;
|
|
|
- Delete(HStr,1,9);
|
|
|
- end;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- DelBen[Row]:=t.MSec;
|
|
|
-{Insert}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1to 1000*TestSize do
|
|
|
- begin
|
|
|
- Hstr:='aaa';
|
|
|
- Insert(OrgStr,hstr,2);
|
|
|
- Hstr:=OrgStr;
|
|
|
- Insert('aaaaaaaaaaaaa',hstr,9);
|
|
|
- end;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- InsBen[Row]:=t.MSec;
|
|
|
-{Compare}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- Hstr:='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'+
|
|
|
- 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'+
|
|
|
- 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
|
|
|
- for l:=1to 5000*TestSize do
|
|
|
- if OrgStr=Hstr then;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- CmpBen[Row]:=t.MSec;
|
|
|
-{Mixed}
|
|
|
- t.Reset;
|
|
|
- t.Start;
|
|
|
- for l:=1 to 400*TestSize do
|
|
|
- begin
|
|
|
- hstr:=OrgStr;
|
|
|
- hstr:=Copy(hstr,1,30);
|
|
|
- Delete(hstr,5,40);
|
|
|
- hstr:=Copy(hstr,1,length(hstr));
|
|
|
- hstr:=hstr+' ';
|
|
|
- Delete(hstr,length(hstr)-2,2);
|
|
|
- Insert('aaaaaaaaaaaaaaaaaaaaaaaaaaaa',hstr,10);
|
|
|
- Insert('aaaaaaaaaaaaaaaaaaaaaaaaaaaa',hstr,20);
|
|
|
- hstr:=Copy(hstr,1,length(hstr));
|
|
|
- hstr:=Copy(hstr,1,80)+'aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbb';
|
|
|
- hstr:=hstr+OrgStr;
|
|
|
- end;
|
|
|
- t.Stop;
|
|
|
- inc(Total,t.MSec);
|
|
|
- MixBen[Row]:=t.MSec;
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-procedure PutBen(const r:BenType);
|
|
|
-var
|
|
|
- i : byte;
|
|
|
-begin
|
|
|
- for i:=1to 8 do
|
|
|
- Write(r[i]:6);
|
|
|
- Writeln;
|
|
|
-end;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-begin
|
|
|
- t.Init;
|
|
|
- WriteLn ('String Function Compatibility and Speed Test');
|
|
|
- WriteLn;
|
|
|
-
|
|
|
if TestOK then
|
|
|
WriteLn('Test OK')
|
|
|
else
|
|
|
- WriteLn('Test Failure!');
|
|
|
-
|
|
|
- if paramstr(1)='t' then
|
|
|
- halt;
|
|
|
-
|
|
|
- WriteLn;
|
|
|
- TestSpeed(1,10);
|
|
|
- TestSpeed(2,30);
|
|
|
- TestSpeed(3,50);
|
|
|
- TestSpeed(4,70);
|
|
|
- TestSpeed(5,100);
|
|
|
- TestSpeed(6,150);
|
|
|
- TestSpeed(7,200);
|
|
|
- TestSpeed(8,250);
|
|
|
-
|
|
|
- Write('Length ');
|
|
|
- PutBen(HeadBen);
|
|
|
- WriteLn('------------------------------------------------------------------------------');
|
|
|
- Write('Load/Store ');
|
|
|
- PutBen(LoadBen);
|
|
|
- Write('Concat ');
|
|
|
- PutBen(ConcatBen);
|
|
|
- Write('Copy ');
|
|
|
- PutBen(CopyBen);
|
|
|
- Write('Delete ');
|
|
|
- PutBen(DelBen);
|
|
|
- Write('Insert ');
|
|
|
- PutBen(InsBen);
|
|
|
- Write('Compare ');
|
|
|
- PutBen(CmpBen);
|
|
|
- Write('Mixed ');
|
|
|
- PutBen(MixBen);
|
|
|
- WriteLn('String-Benchmark avarage ',Total div 8,' ms');
|
|
|
+ begin
|
|
|
+ WriteLn('Test Failure!');
|
|
|
+ halt(1);
|
|
|
+ end;
|
|
|
end.
|