ghashsettest.pp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. {$mode objfpc}
  2. unit ghashsettest;
  3. interface
  4. uses fpcunit, testregistry, ghashset;
  5. type hint=class
  6. class function hash(a,n:SizeUInt):SizeUInt;
  7. end;
  8. type THashsetlli=specialize THashSet<longint, hint>;
  9. type TGHashSetTest = class(TTestCase)
  10. Published
  11. procedure HashSetTest1;
  12. procedure HashSetTest2;
  13. procedure HashSetTest3;
  14. public
  15. procedure Setup;override;
  16. private
  17. data:THashsetlli;
  18. end;
  19. implementation
  20. class function hint.hash(a,n:SizeUInt):SizeUInt;
  21. begin
  22. hash:= (a xor (a shr 5) xor (a shl 7)) and (n-1);
  23. end;
  24. procedure TGHashSetTest.HashSetTest1;
  25. var i:longint;
  26. begin
  27. AssertEquals('Not IsEmpty', true, data.IsEmpty);
  28. data.insert(47);
  29. AssertEquals('47 not found', true, data.contains(47));
  30. AssertEquals('39 found', false, data.contains(39));
  31. data.insert(39);
  32. data.insert(47);
  33. AssertEquals('bad size', 2, data.size);
  34. for i:=0 to 10000 do
  35. data.insert(20*i+42);
  36. for i:=0 to 10000 do
  37. AssertEquals('bad number found', false, data.contains(i*5+101));
  38. for i:=0 to 10000 do
  39. AssertEquals('number not found', true, data.contains(i*20+42));
  40. AssertEquals('IsEmpty', false, data.IsEmpty);
  41. end;
  42. procedure TGHashSetTest.HashSetTest2;
  43. var i:longint;
  44. begin
  45. for i:=0 to 1000 do
  46. data.insert(3*i);
  47. for i:=0 to 1000 do
  48. data.delete(3*i+1);
  49. AssertEquals('bad size before delete', 1001, data.size);
  50. for i:=500 to 1000 do
  51. data.delete(3*i);
  52. AssertEquals('bad size after delete', 500, data.size);
  53. for i:=0 to 499 do
  54. AssertEquals('element not found', true, data.contains(3*i));
  55. for i:=500 to 1000 do
  56. AssertEquals('deleted element found', false, data.contains(3*i));
  57. end;
  58. procedure TGHashSetTest.HashSetTest3;
  59. var i:longint;
  60. x:array[0..1000] of longint;
  61. it:THashSetlli.TIterator;
  62. begin
  63. it:=data.Iterator;
  64. if it <> nil then
  65. AssertEquals('it not null', 0, 1);
  66. for i:=0 to 1000 do begin
  67. data.insert(i);
  68. x[i]:=0;
  69. end;
  70. it:=data.Iterator;
  71. repeat
  72. inc(x[it.GetValue]);
  73. until not it.next;
  74. for i:=0 to 1000 do begin
  75. AssertEquals('som not 1', 1, x[i]);
  76. end;
  77. end;
  78. procedure TGHashSetTest.Setup;
  79. begin
  80. data:=THashSetlli.create;
  81. end;
  82. initialization
  83. RegisterTest(TGHashSetTest);
  84. end.