⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitcword.pas

📁 Delphi Generic Algorytms library - Maps, Lists, Hashmaps, Datastructures.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    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 + -