ghashmaptest.pp 2.3 KB

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