fpc/packages/fcl-stl/tests/gsettest.pp
vladob 5dd0d99368 iterators for fcl-stl containers
git-svn-id: trunk@17310 -
2011-04-12 13:50:19 +00:00

126 lines
3.3 KiB
ObjectPascal

{$mode objfpc}
unit gsettest;
interface
uses fpcunit, testregistry, gset, gutil;
type lesslli=specialize TLess<longint>;
setlli=specialize TSet<longint,lesslli>;
type TGSetTest = class(TTestCase)
Published
procedure SetTest;
procedure IteratorTest;
public
procedure Setup;override;
private
data:setlli;
end;
implementation
procedure TGSetTest.IteratorTest;
var it:setlli.TIterator;
begin
it:=data.min;
if (it <> nil) then
AssertEquals('not null min', 0, 1);
data.insert(3);
data.insert(5);
data.insert(7);
it:=data.min;
AssertEquals('bad value', 3, it.Data);
AssertEquals('next not true', true, it.Next);
AssertEquals('bad value', 5, it.Data);
AssertEquals('next not true', true, it.Next);
AssertEquals('bad value', 7, it.Data);
AssertEquals('next not false', false, it.Next);
end;
procedure TGSetTest.SetTest;
var it:setlli.TIterator;
begin
data.insert(3);
data.insert(5);
data.insert(7);
AssertEquals('Wrong min', 3, data.min().Data);
AssertEquals('Wrong max', 7, data.max().Data);
data.delete(3);
AssertEquals('Wrong size', 2, data.size);
AssertEquals('Wrong min', 5, data.min().Data);
data.insert(3);
data.insert(3);
data.insert(3);
AssertEquals('Wrong size', 3, data.size);
AssertEquals('Wrong min', 3, data.min().Data);
if(data.find(4)<>nil) then
Fail('Found key which not there');
if(data.find(5)=nil) then
Fail('Not found key which was there');
if(data.FindLess(8).Data<>7) then
Fail('Wrong less than 8');
if(data.FindLess(7).Data<>5) then
Fail('Wrong less than 7');
if(data.FindLess(3)<>nil) then
Fail('Wrong less than 3');
if(data.FindLessEqual(8).Data<>7) then
Fail('Wrong less equal than 8');
if(data.FindLessEqual(7).Data<>7) then
Fail('Wrong less equal than 7');
if(data.FindLessEqual(6).Data<>5) then
Fail('Wrong less equal than 6');
if(data.FindLessEqual(2)<>nil) then
Fail('Wrong less equal than 2');
if(data.FindGreater(2).Data<>3) then
Fail('Wrong greater than 2');
if(data.Findgreater(3).Data<>5) then
Fail('Wrong greater than 3');
if(data.Findgreater(7)<>nil) then
Fail('Wrong greater than 7');
if(data.FindGreaterEqual(2).Data<>3) then
Fail('Wrong greater equal than 2');
if(data.FindGreaterEqual(3).Data<>3) then
Fail('Wrong greater equal than 3');
if(data.FindGreaterEqual(4).Data<>5) then
Fail('Wrong greater equal than 4');
if(data.FindGreaterEqual(8)<>nil) then
Fail('Wrong greater equal than 8');
data.insert(17);
it:=data.min;
AssertEquals('Wrong min', 3, it.Data);
AssertEquals('Next not true', true, it.next);
AssertEquals('Wrong next', 5, it.Data);
AssertEquals('Next not true', true, it.next);
AssertEquals('Wrong next', 7, it.Data);
AssertEquals('Next not true', true, it.next);
AssertEquals('Wrong next', 17, it.Data);
AssertEquals('Last next not fail', false, it.next);
it:=data.max;
AssertEquals('Wrong max', 17, it.Data);
AssertEquals('Prev not true', true, it.prev);
AssertEquals('Wrong prev', 7, it.Data);
AssertEquals('Prev not true', true, it.prev);
AssertEquals('Wrong prev', 5, it.Data);
AssertEquals('Prev not true', true, it.prev);
AssertEquals('Wrong prev', 3, it.Data);
AssertEquals('First prev not fail', false, it.prev);
end;
procedure TGSetTest.Setup;
begin
data:=setlli.create;
end;
initialization
RegisterTest(TGSetTest);
end.