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

📄 testdeque.pas

📁 在Delphi上实现的数据结构
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  tmpDeque.Insert(tmpDeque.ItBegin,FDeque.ItBegin,FDeque.ItEnd);

  CheckEquals(tmpDeque.Size,50);
  CheckEquals(FDeque.Size,49);
  CheckEquals(FDeque.IndexOf(Pointer(3)),1);
  CheckEquals(tmpDeque.IndexOf(Pointer(1)),50-1);
  Check(FDeque.Items[2]=Pointer(4));

  FDeque.Items[3]:=Pointer(17);
  Check(FDeque.Items[3]=Pointer(17));
  
  CheckEquals(FDeque.size(),tmpDeque.Size()-1);
  Check(not FDeque.IsEquals(tmpDeque));
  FDeque.Clear();
  FDeque.PushBack(tmpDeque.ItBegin,tmpDeque.ItEnd);
  Check(FDeque.IsEquals(tmpDeque));

  
  FDeque.Clear();
  for i:=0 to 50-1 do
    FDeque.PushBack(Pointer(i));
  FDeque.Items[4]:=Pointer(17);
  CheckEquals(FDeque.EraseValue(Pointer(17)),2);
  CheckEquals(FDeque.Size,48);

  Check(FDeque.Back=Pointer(49));
  FDeque.PopBack();
  Check(FDeque.Back=Pointer(48));
    

  //
  FDeque.PushFront(Pointer(21));
  Check(FDeque.Front=Pointer(21));
  FDeque.PushFront(Pointer(13));
  Check(FDeque.Front=Pointer(13));
  Check(FDeque.Items[1]=Pointer(21));
  FDeque.PopFront();
  Check(FDeque.Front=Pointer(21));

  FDeque.Assign(10,Pointer(5));
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[3]=Pointer(5));

  it0:=FDeque.ItBegin;
  for i:=0 to 10-1 do
  begin
    Check(it0.Value=Pointer(5));
    it0.Next;
  end;

  tmpDeque.Assign(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(tmpDeque.size,10);
  Check(tmpDeque.Items[3]=Pointer(5));
  CheckEquals(FDeque.size,10);
  FDeque.Reserve(1000);
  CheckEquals(FDeque.size,10);
  FDeque.Resize(7);
  CheckEquals(FDeque.size,7);


  FDeque.Erase(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(FDeque.size,0);
  for i:=0 to 15-1 do
    FDeque.Insert(FDeque.ItEnd,Pointer(i));
  CheckEquals(FDeque.size,15);
  CheckEquals(FDeque.ItBegin.Distance(FDeque.ItEnd),15);
  CheckEquals(FDeque.ItEnd.Clone().Distance(FDeque.ItEnd),0);
  CheckEquals(FDeque.ItEnd.Clone(-1).Distance(FDeque.ItEnd),1);
  It0:=FDeque.ItBegin.Clone(5);
  CheckEquals(it0.Distance(FDeque.ItEnd),10);
  it1:=FDeque.ItEnd.Clone(-5);
  CheckEquals(it1.Distance(FDeque.ItEnd),5);
  CheckEquals(it0.Distance(it1),5);
  FDeque.Erase(It0,it1);
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[6]=Pointer(11));
  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Erase(It0);
  CheckEquals(FDeque.size,9);
  Check(FDeque.Items[6]=Pointer(12));

  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,Pointer(31));
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[5]=Pointer(31));
  Check(FDeque.Items[6]=Pointer(11));

  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,Pointer(32));
  CheckEquals(FDeque.size,11);
  Check(FDeque.Items[5]=Pointer(32));
  Check(FDeque.Items[6]=Pointer(31));
  //}
end;


procedure TTest_Deque.testRecordDeque;
var
    FDeque        : IPointVector;
    tmpDeque        : IPointVector;
    i : integer;
    It0,It1:IPointIterator;
begin
  FDeque :=TPointDeque.Create();
  Check(FDeque.IsEmpty());

  FDeque.Insert(FDeque.ItBegin,Point(5,5));
  CheckEquals(FDeque.Size,1);
  Check(FDeque.Back.x=5);

  Check(FDeque.ItBegin.Value.x=(5));

  FDeque.Clear();
  Check(FDeque.IsEmpty);

  tmpDeque:=IPointVector(FDeque.Clone());
  tmpDeque.PushBack(Point(13,11));
  Check(FDeque.IsEmpty);
  Check(tmpDeque.ItBegin.Value.x=(13));
  Check(tmpDeque.ItBegin.Value.y=(11));

  FDeque.PushBack(Point(31,31));
  tmpDeque:=TPointDeque.Create(FDeque.ItBegin,FDeque.ItEnd);
  Check(tmpDeque.Back.x=(31));

  FDeque.Clear();
  for i:=2 to 50 do
    FDeque.PushBack(Point(i,i));
  CheckEquals(FDeque.Size,49);
  CheckEquals(FDeque.IndexOf(Point(3,3)),1);
  tmpDeque.Clear();
  tmpDeque.PushBack(Point(1,1));
  tmpDeque.Insert(tmpDeque.ItBegin,FDeque.ItBegin,FDeque.ItEnd);

  CheckEquals(tmpDeque.IndexOf(Point(1,1)),50-1);
  Check(FDeque.Items[2].x=(4));

  FDeque.Items[3]:=Point(17,17);
  Check(FDeque.Items[3].y=(17));

  Check(not FDeque.IsEquals(tmpDeque));
  FDeque.Clear();
  FDeque.PushBack(tmpDeque.ItBegin,tmpDeque.ItEnd);
  Check(FDeque.IsEquals(tmpDeque));

  FDeque.Clear();
  for i:=0 to 50-1 do
    FDeque.PushBack(Point(i,i));
  FDeque.Items[4]:=Point(17,17);
  CheckEquals(FDeque.EraseValue(Point(17,17)),2);
  CheckEquals(FDeque.Size,48);

  Check(FDeque.Back.x=Point(49,49).x);
  FDeque.PopBack();
  Check(FDeque.Back.y=Point(48,48).y);


  //
  FDeque.PushFront(Point(21,21));
  Check(FDeque.Front.y=(21));
  FDeque.PushFront(Point(13,13));
  Check(FDeque.Front.y=(13));
  Check(FDeque.Items[1].x=(21));
  FDeque.PopFront();
  Check(FDeque.Front.y=(21));

  FDeque.Assign(10,Point(5,5));
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[3].y=(5));
  tmpDeque.Assign(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(tmpDeque.size,10);
  Check(tmpDeque.Items[3].x=(5));
  CheckEquals(FDeque.size,10);
  FDeque.Reserve(1000);
  CheckEquals(FDeque.size,10);
  FDeque.Resize(7);
  CheckEquals(FDeque.size,7);

  FDeque.Erase(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(FDeque.size,0);
  for i:=0 to 15-1 do
    FDeque.Insert(FDeque.ItEnd,Point(i,i));
  It0:=FDeque.ItBegin.Clone(5);
  it1:=FDeque.ItEnd.Clone(-5);
  FDeque.Erase(It0,it1);
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[6].y=(11));
  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Erase(It0);
  CheckEquals(FDeque.size,9);
  Check(FDeque.Items[6].x=(12));
  
  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,Point(31,31));
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[5].y=(31));
  Check(FDeque.Items[6].x=(11));

  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,Point(32,32));
  CheckEquals(FDeque.size,11);
  Check(FDeque.Items[5].x=(32));
  Check(FDeque.Items[6].y=(31));

  //
  FDeque.Clear();
  FDeque.PushFront(3,Point(12,12));
  CheckEquals(FDeque.size,3);
  Check(FDeque.Items[2].y=(12));

  FDeque.PushFront(5,Point(11,11));
  CheckEquals(FDeque.size,8);
  Check(FDeque.Items[0].x=(11));
  Check(FDeque.Items[4].x=(11));
  Check(FDeque.Items[5].y=(12));
  Check(FDeque.Items[7].x=(12));

  //}
end;     

procedure TTest_Deque.testStrDeque;
var
    FDeque        : IStrDeque;
    tmpDeque        : IStrDeque;
    i : integer;
    It0,It1 : IStrIterator;
begin
  FDeque :=TStrDeque.Create();
  Check(FDeque.IsEmpty());

  FDeque.Insert(FDeque.ItBegin,'5');
  CheckEquals(FDeque.Size,1);
  Check(FDeque.Back='5');

  Check(FDeque.ItBegin.Value='5');

  FDeque.Clear();
  Check(FDeque.IsEmpty);

  tmpDeque:=IStrDeque(FDeque.Clone());
  tmpDeque.PushBack('13');
  Check(FDeque.IsEmpty);
  Check(tmpDeque.ItBegin.Value='13');

  FDeque.PushBack('31');
  tmpDeque:=TStrDeque.Create(FDeque.ItBegin,FDeque.ItEnd);
  Check(tmpDeque.Back='31');

  FDeque.Clear();
  for i:=2 to 50 do
    FDeque.PushBack(inttostr(i));
  tmpDeque.Clear();
  tmpDeque.PushBack('1');
  tmpDeque.Insert(tmpDeque.ItBegin,FDeque.ItBegin,FDeque.ItEnd);

  CheckEquals(FDeque.Size,49);
  CheckEquals(FDeque.IndexOf('3'),1);
  CheckEquals(tmpDeque.IndexOf('1'),50-1);
  Check(FDeque.Items[2]='4');

  FDeque.Items[3]:='17';
  Check(FDeque.Items[3]='17');

  Check(not FDeque.IsEquals(tmpDeque));
  FDeque.Clear();
  FDeque.PushBack(tmpDeque.ItBegin,tmpDeque.ItEnd);
  Check(FDeque.IsEquals(tmpDeque));

  FDeque.Clear();
  for i:=0 to 50-1 do
    FDeque.PushBack(inttostr(i));
  FDeque.Items[4]:='17';
  CheckEquals(FDeque.EraseValue('17'),2);
  CheckEquals(FDeque.Size,48);

  Check(FDeque.Back='49');
  FDeque.PopBack();
  Check(FDeque.Back='48');

  //
  FDeque.PushFront('21');
  Check(FDeque.Front='21');
  FDeque.PushFront('13');
  Check(FDeque.Front='13');
  Check(FDeque.Items[1]='21');
  FDeque.PopFront();
  Check(FDeque.Front='21');

  FDeque.Assign(10,'5');
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[3]='5');
  tmpDeque.Assign(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(tmpDeque.size,10);
  Check(tmpDeque.Items[3]='5');
  CheckEquals(FDeque.size,10);
  FDeque.Reserve(1000);
  CheckEquals(FDeque.size,10);
  FDeque.Resize(7);
  CheckEquals(FDeque.size,7);

  FDeque.Erase(FDeque.ItBegin,FDeque.ItEnd);
  CheckEquals(FDeque.size,0);
  for i:=0 to 15-1 do
    FDeque.Insert(FDeque.ItEnd,inttostr(i));
  It0:=FDeque.ItBegin.Clone(5);
  it1:=FDeque.ItEnd.Clone(-5);
  FDeque.Erase(It0,it1);
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[6]='11');
  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Erase(It0);
  CheckEquals(FDeque.size,9);
  Check(FDeque.Items[6]='12');

  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,'31');
  CheckEquals(FDeque.size,10);
  Check(FDeque.Items[5]='31');
  Check(FDeque.Items[6]='11');

  It0:=FDeque.ItBegin.Clone(5);
  FDeque.Insert(It0,'32');
  CheckEquals(FDeque.size,11);
  Check(FDeque.Items[5]='32');
  Check(FDeque.Items[6]='31');

  //
  FDeque.Clear();
  FDeque.PushFront(3,'12');
  CheckEquals(FDeque.size,3);
  Check(FDeque.Items[2]='12');

  FDeque.PushFront(5,'11');
  CheckEquals(FDeque.size,8);
  Check(FDeque.Items[0]='11');
  Check(FDeque.Items[4]='11');
  Check(FDeque.Items[5]='12');
  Check(FDeque.Items[7]='12');
end;

initialization
  RegisterTest(TTest_Deque.Suite);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -