mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-01 09:33:40 +02:00
98 lines
2.1 KiB
ObjectPascal
98 lines
2.1 KiB
ObjectPascal
{$mode objfpc}
|
|
|
|
unit ghashsettest;
|
|
|
|
interface
|
|
|
|
uses fpcunit, testregistry, ghashset;
|
|
|
|
type hint=class
|
|
class function hash(a,n:SizeUInt):SizeUInt;
|
|
end;
|
|
|
|
type THashsetlli=specialize THashSet<longint, hint>;
|
|
|
|
type TGHashSetTest = class(TTestCase)
|
|
Published
|
|
procedure HashSetTest1;
|
|
procedure HashSetTest2;
|
|
procedure HashSetTest3;
|
|
public
|
|
procedure Setup;override;
|
|
private
|
|
data:THashsetlli;
|
|
end;
|
|
|
|
implementation
|
|
|
|
class function hint.hash(a,n:SizeUInt):SizeUInt;
|
|
begin
|
|
hash:= (a xor (a shr 5) xor (a shl 7)) and (n-1);
|
|
end;
|
|
|
|
procedure TGHashSetTest.HashSetTest1;
|
|
var i:longint;
|
|
begin
|
|
AssertEquals('Not IsEmpty', true, data.IsEmpty);
|
|
data.insert(47);
|
|
AssertEquals('47 not found', true, data.contains(47));
|
|
AssertEquals('39 found', false, data.contains(39));
|
|
data.insert(39);
|
|
data.insert(47);
|
|
AssertEquals('bad size', 2, data.size);
|
|
for i:=0 to 10000 do
|
|
data.insert(20*i+42);
|
|
for i:=0 to 10000 do
|
|
AssertEquals('bad number found', false, data.contains(i*5+101));
|
|
for i:=0 to 10000 do
|
|
AssertEquals('number not found', true, data.contains(i*20+42));
|
|
AssertEquals('IsEmpty', false, data.IsEmpty);
|
|
end;
|
|
|
|
procedure TGHashSetTest.HashSetTest2;
|
|
var i:longint;
|
|
begin
|
|
for i:=0 to 1000 do
|
|
data.insert(3*i);
|
|
for i:=0 to 1000 do
|
|
data.delete(3*i+1);
|
|
AssertEquals('bad size before delete', 1001, data.size);
|
|
for i:=500 to 1000 do
|
|
data.delete(3*i);
|
|
AssertEquals('bad size after delete', 500, data.size);
|
|
for i:=0 to 499 do
|
|
AssertEquals('element not found', true, data.contains(3*i));
|
|
for i:=500 to 1000 do
|
|
AssertEquals('deleted element found', false, data.contains(3*i));
|
|
end;
|
|
|
|
procedure TGHashSetTest.HashSetTest3;
|
|
var i:longint;
|
|
x:array[0..1000] of longint;
|
|
it:THashSetlli.TIterator;
|
|
begin
|
|
it:=data.Iterator;
|
|
if it <> nil then
|
|
AssertEquals('it not null', 0, 1);
|
|
for i:=0 to 1000 do begin
|
|
data.insert(i);
|
|
x[i]:=0;
|
|
end;
|
|
it:=data.Iterator;
|
|
repeat
|
|
inc(x[it.Data]);
|
|
until not it.next;
|
|
for i:=0 to 1000 do begin
|
|
AssertEquals('som not 1', 1, x[i]);
|
|
end;
|
|
end;
|
|
|
|
procedure TGHashSetTest.Setup;
|
|
begin
|
|
data:=THashSetlli.create;
|
|
end;
|
|
|
|
initialization
|
|
RegisterTest(TGHashSetTest);
|
|
end.
|