📄 unitcword.pas
字号:
end;
AddtestResult(li,Start,RandomVisiteTimes);
//test Insert at Middle
Container.Resize(PushBackTimes);
Start := GetNowTime;
//it:=Container.ItBegin;
//it.Next(PushBackTimes div 2);
for I := 0 to InsertAtMiddleTimes - 1 do
begin
Container.InsertByIndex(PushBackTimes shr 1,i);
end;
AddtestResult(li,Start,InsertAtMiddleTimes);
//test PushFront
(Container).Resize(PushBackTimes);
Start := GetNowTime;
for I := 0 to PushFrontTimes do
(Container).PushFront(I);
AddtestResult(li,Start,PushFrontTimes);
end;
procedure TestPerformances_Deque(const ContainerName:string;const Container:TIntDeque;
PushBackTimes,NextVisiteTimes,RandomVisiteTimes,InsertAtMiddleTimes,PushFrontTimes:integer);
var
li:TListItem;
Start: extended;
i : integer;
it : IIntDequeIterator;
ClearSum : extended;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:=ContainerName;
application.ProcessMessages();
//test PushBack
Container.Clear();
Start := GetNowTime();
for I := 0 to PushBackTimes-1 do
Container.PushBack(I);
AddtestResult(li,Start,PushBackTimes);
//test Next Visite
Container.Resize(NextVisiteTimes);
Start := GetNowTime;
IIntIterator(it):=Container.ItBegin;
for I := 0 to NextVisiteTimes - 1 do
begin
g_tmp:=it.Value;
it.Value:=g_tmp;
it.Next();
end;
AddtestResult(li,Start,NextVisiteTimes);
//test Random Visite
Container.Resize(csRandomVisiteSize);
Start := GetNowTime;
IIntIterator(it):=Container.ItBegin;
for I := 0 to RandomVisiteTimes - 1 do
begin
g_tmp:=it.NextValue[_rand() mod (csRandomVisiteSize)]; //
it.NextValue[_rand() mod (csRandomVisiteSize)]:=g_tmp; //
end;
AddtestResult(li,Start,RandomVisiteTimes);
//test Insert at Middle
Container.Resize(PushBackTimes);
Start := GetNowTime;
//it:=Container.ItBegin;
//it.Next(PushBackTimes div 2);
for I := 0 to InsertAtMiddleTimes - 1 do
begin
Container.InsertByIndex(PushBackTimes shr 1,i);
end;
AddtestResult(li,Start,InsertAtMiddleTimes);
//test PushFront
(Container).Resize(PushBackTimes);
Start := GetNowTime;
for I := 0 to PushFrontTimes do
(Container).PushFront(I);
AddtestResult(li,Start,PushFrontTimes);
end;
procedure TestPerformances_List(const ContainerName:string;const Container:TIntList;
PushBackTimes,NextVisiteTimes,RandomVisiteTimes,InsertAtMiddleTimes,PushFrontTimes:integer);
var
li:TListItem;
Start: extended;
i : integer;
it : IIntListIterator;
ClearSum : extended;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:=ContainerName;
application.ProcessMessages();
//test PushBack
Container.Clear();
Start := GetNowTime();
for I := 0 to PushBackTimes-1 do
Container.PushBack(I);
AddtestResult(li,Start,PushBackTimes);
//test Next Visite
Container.Resize(NextVisiteTimes);
Start := GetNowTime;
IIntIterator(it):=Container.ItBegin;
for I := 0 to NextVisiteTimes - 1 do
begin
g_tmp:=it.Value;
it.Value:=g_tmp;
it.Next();
end;
AddtestResult(li,Start,NextVisiteTimes);
//test Random Visite
Container.Resize(csRandomVisiteSize);
Start := GetNowTime;
IIntIterator(it):=Container.ItBegin;
for I := 0 to RandomVisiteTimes - 1 do
begin
g_tmp:=it.NextValue[_rand() mod (csRandomVisiteSize)]; //
it.NextValue[_rand() mod (csRandomVisiteSize)]:=g_tmp; //
end;
AddtestResult(li,Start,RandomVisiteTimes);
//test Insert at Middle
Container.Resize(PushBackTimes);
Start := GetNowTime;
IIntIterator(it):=Container.ItBegin;
it.Next(PushBackTimes shr 1);
for I := 0 to InsertAtMiddleTimes - 1 do
begin
Container.Insert(it,i);
end;
AddtestResult(li,Start,InsertAtMiddleTimes);
//test PushFront
(Container).Resize(PushBackTimes);
Start := GetNowTime;
for I := 0 to PushFrontTimes do
(Container).PushFront(I);
AddtestResult(li,Start,PushFrontTimes);
end;
procedure TestPerformances_Array(const ContainerName:string;
PushBackTimes,NextVisiteTimes,RandomVisiteTimes,InsertAtMiddleTimes,PushFrontTimes:integer);
var
li:TListItem;
Start: extended;
Container:array of integer;
L,i,j,k : integer;
ClearSum : extended;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:=ContainerName;
application.ProcessMessages();
Container:=nil;
//test PushBack
Start := GetNowTime();
for I := 0 to PushBackTimes-1 do
begin
L:=length(Container);
setlength(Container,L+1);
Container[L]:=i;
end;
AddtestResult(li,Start,PushBackTimes);
//test Next Visite
setlength(Container,NextVisiteTimes);
Start := GetNowTime;
for I := 0 to NextVisiteTimes - 1 do
begin
//g_tmp:=g_tmp div 132423457;
g_tmp:=Container[i]; //
Container[i]:=g_tmp; //
end;
AddtestResult(li,Start,NextVisiteTimes);
//test Random Visite
setlength(Container,csRandomVisiteSize);
Start := GetNowTime;
//it:=Container.ItBegin;
for I := 0 to RandomVisiteTimes - 1 do
begin
g_tmp:=Container[_rand() mod (csRandomVisiteSize)]; //
Container[_rand() mod (csRandomVisiteSize)]:=g_tmp; //
//g_tmp:=Random(csRandomVisiteSize); //
//g_tmp:=Random(csRandomVisiteSize); //
end;
AddtestResult(li,Start,RandomVisiteTimes);
//test Insert at Middle
setlength(Container,PushBackTimes);
Start := GetNowTime;
for I := 0 to InsertAtMiddleTimes - 1 do
begin
L:=length(Container);
setlength(Container,L+1);
for j :=L-1 downto (PushBackTimes shr 1) do
Container[j+1]:=Container[j];
Container[PushBackTimes shr 1]:=i;
end;
AddtestResult(li,Start,InsertAtMiddleTimes);
//test PushFront
setlength(Container,PushBackTimes);
Start := GetNowTime;
for I := 0 to PushFrontTimes do
begin
L:=length(Container);
setlength(Container,L+1);
for j :=L-1 downto 0 do
Container[j+1]:=Container[j];
Container[0]:=i;
end;
AddtestResult(li,Start,PushFrontTimes);
end;
procedure TestPerformances_TList(const ContainerName:string;
PushBackTimes,NextVisiteTimes,RandomVisiteTimes,InsertAtMiddleTimes,PushFrontTimes:integer);
var
li:TListItem;
Start: extended;
Container:TList;
L,i,j,k : integer;
ClearSum : extended;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:=ContainerName;
application.ProcessMessages();
Container:=TList.Create;
//test PushBack
Start := GetNowTime();
for I := 0 to PushBackTimes-1 do
begin
Container.Add(Pointer(i));
end;
AddtestResult(li,Start,PushBackTimes);
//test Next Visite
Assert(Container.Count=NextVisiteTimes);
Start := GetNowTime;
for I := 0 to NextVisiteTimes - 1 do
begin
g_tmp:=integer(Container.Items[i]); //
Container.Items[i]:=Pointer(g_tmp); //
end;
AddtestResult(li,Start,NextVisiteTimes);
//test Random Visite
Container.Clear();
for i:=0 to csRandomVisiteSize-1 do
Container.Add(Pointer(i));
Start := GetNowTime;
//it:=Container.ItBegin;
for I := 0 to RandomVisiteTimes - 1 do
begin
Pointer(g_tmp):=Container.Items[_rand() mod (csRandomVisiteSize)]; //
Container.Items[_rand() mod (csRandomVisiteSize)]:=Pointer(g_tmp); //
//g_tmp:=Random(csRandomVisiteSize); //
//g_tmp:=Random(csRandomVisiteSize); //
end;
AddtestResult(li,Start,RandomVisiteTimes);
//test Insert at Middle
Container.Clear();
for i:=0 to PushBackTimes-1 do
Container.Add(Pointer(i));
Start := GetNowTime;
for I := 0 to InsertAtMiddleTimes - 1 do
begin
Container.Insert(PushBackTimes shr 1,Pointer(i));
end;
AddtestResult(li,Start,InsertAtMiddleTimes);
//test PushFront
Container.Clear();
for i:=0 to PushBackTimes-1 do
Container.Add(Pointer(i));
Start := GetNowTime;
for I := 0 to PushFrontTimes do
begin
Container.Insert(0,Pointer(i));
end;
AddtestResult(li,Start,PushFrontTimes);
Container.Free;
end;
var
Container :TContainerType;
Container_Vector :TIntVector;
Container_Deque :TIntDeque;
Container_List :TIntList;
li:TListItem;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:='Container:';
li.SubItems.Add('PushBack');
li.SubItems.Add('Next Visite');
li.SubItems.Add('Random Visite');
li.SubItems.Add('Insert At Middle');
li.SubItems.Add('PushFront');
Screen.Cursor := crHourGlass;
try
TestPerformances_Array('array of type',20000000,20000000,2000000,5,5);
TestPerformances_TList('TList',20000000,20000000,2000000,5,5);
Container_Vector:=TIntVector.Create();
TestPerformances_Vector('TVector',Container_Vector,20000000,20000000,2000000,5,5);
Container_Vector.Free;
Container_Deque:=TIntDeque.Create();
TestPerformances_Deque('TDeque',Container_Deque,20000000,20000000,2000000,5,20000000);
Container_Deque.Free; // }
Container_List:=TIntList.Create();
TestPerformances_List('TList',Container_List,10000000,10000000,100,10000000,10000000);
Container_List.Free;
Container:=TIntVector.Create();
TestPerformances('IVector',Container,20000000,20000000,2000000,5,5);
Container:=nil;
Container:=TIntDeque.Create();
TestPerformances('IDeque',Container,20000000,20000000,2000000,5,20000000);
Container:=nil;
Container:=TIntList.Create();
TestPerformances('IList',Container,10000000,10000000,100,10000000,10000000,true);
Container:=nil;
// }
finally
Screen.Cursor := crDefault;
end;
li:=self.lvPerfo.Items.Add();
end;
procedure TForm1.btnTestVectorClick(Sender: TObject);
var
V : TIntVector;
//V : IIntVector;
//it,it1 : IIntVectorIterator;
it,it1 : IIntIterator;
ClearSum,Start : extended;
rTimes,i : integer;
li:TListItem;
ar : array of integer;
par : Pinteger;
begin
li:=self.lvPerfo.Items.Add();
li.Caption:='way:';
li.SubItems.Add('Next Visite');
li.SubItems.Add('way:');
li.SubItems.Add('Next Visite');
Screen.Cursor := crHourGlass;
try
rTimes:=20000000;
V:=TIntVector.Create(rTimes);
li:=self.lvPerfo.Items.Add();
li.Caption:='Array of Type';
setlength(ar,rTimes);
Start := GetNowTime();
ClearSum:=0;
for i:=0 to rTimes -1 do
begin
g_tmp:=ar[i];
ar[i]:=g_tmp;
end;
ClearSum:=(GetNowTime-Start);
AddtestResult(li,GetNowTime-ClearSum,rTimes);
li.SubItems.Add('PValue^');
par:=@ar[0];
Start := GetNowTime();
ClearSum:=0;
for i:=0 to rTimes -1 do
begin
g_tmp:=par^;
par^:=g_tmp;
inc(par);
end;
ClearSum:=(GetNowTime-Start);
AddtestResult(li,GetNowTime-ClearSum,rTimes);
li:=self.lvPerfo.Items.Add();
li.Caption:='TVector.Items';
Start := GetNowTime();
ClearSum:=0;
for i:=0 to rTimes -1 do
begin
g_tmp:=v.Items[i];
v.Items[i]:=g_tmp;
end;
ClearSum:=(GetNowTime-Start);
AddtestResult(li,GetNowTime-ClearSum,rTimes);
li.SubItems.Add('Iterator.Value');
Start := GetNowTime();
ClearSum:=0;
it.Assign(v.ItBegin);
it1.Assign(v.ItEnd);
//while not it.IsEqual(It1) do
for i:=0 to rTimes -1 do
begin
g_tmp:=it.Value;
it.Value:=g_tmp;
it.Next;
end;
ClearSum:=(GetNowTime-Start);
AddtestResult(li,GetNowTime-ClearSum,rTimes);
v.clear();
v.Free();
finally
Screen.Cursor := crDefault;
end;
li:=self.lvPerfo.Items.Add();
end;
procedure TForm1.Button1Click(Sender: TObject);
var
vv : IIntVVector;
begin
vv:=TIntVVector.Create();
vv.Resize(2);
vv.Items[0].PushBack(10,1);
vv.Items[1].PushBack(10,2);
assert(vv.Items[0].Items[0]+vv.Items[1].Items[0]=3);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,si : integer;
strs: string;
begin
strs:='';
for i:=0 to self.lvPerfo.Items.Count - 1 do
begin
strs:=strs+self.lvPerfo.Items.Item[i].Caption + #9;
for si := 0 to self.lvPerfo.Items.Item[i].SubItems.Count - 1 do
strs:=strs+self.lvPerfo.Items.Item[i].SubItems.Strings[si] + #9;
strs:=strs+#13#10;
end;
strs:=strs+#13#10;
clipboard.SetTextBuf(PChar(strs));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -