Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

182 lignes
4.8 KiB

  1. unit uutlHandleManagerTests;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, TestFramework,
  6. uutlGenerics;
  7. type
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TStringHandleManager = specialize TutlHandleManager<String>;
  10. TutlHandleManagerTests = class(TTestCase)
  11. private
  12. fManager: TStringHandleManager;
  13. public
  14. procedure SetUp; override;
  15. procedure TearDown; override;
  16. published
  17. procedure Add;
  18. procedure GetValue;
  19. procedure SetValue;
  20. procedure ComplexAddAndRemove;
  21. procedure Enumerate;
  22. end;
  23. implementation
  24. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  25. //TutlHandleManagerTests////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  27. procedure TutlHandleManagerTests.SetUp;
  28. begin
  29. inherited SetUp;
  30. fManager := TStringHandleManager.Create(true);
  31. end;
  32. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  33. procedure TutlHandleManagerTests.TearDown;
  34. begin
  35. FreeAndNil(fManager);
  36. inherited TearDown;
  37. end;
  38. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. procedure TutlHandleManagerTests.Add;
  40. var
  41. h: TutlHandle;
  42. begin
  43. h := fManager.Add(0, 0, 'test');
  44. AssertEquals($0000000100000000, h);
  45. h := fManager.Add(1, 0, 'test');
  46. AssertEquals($0001000100000001, h);
  47. h := fManager.Add(2, 0, 'test');
  48. AssertEquals($0002000100000002, h);
  49. h := fManager.Add(0, 1, 'test');
  50. AssertEquals($0100000100000000, h);
  51. end;
  52. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. procedure TutlHandleManagerTests.GetValue;
  54. var
  55. h: TutlHandle;
  56. s: String;
  57. b: Boolean;
  58. begin
  59. h := fManager.Add(0, 0, 'test');
  60. b := fManager.TryGetValue(h, s);
  61. AssertTrue (b);
  62. AssertEquals('test', s);
  63. b := fManager.TryGetValue(123, s);
  64. AssertFalse(b);
  65. end;
  66. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  67. procedure TutlHandleManagerTests.SetValue;
  68. var
  69. b: Boolean;
  70. s: String;
  71. begin
  72. b := fManager.TrySetValue($0000000100000010, 'test');
  73. AssertTrue(b);
  74. b := fManager.TryGetValue($0000000100000010, s);
  75. AssertTrue (b);
  76. AssertEquals('test', s);
  77. b := fManager.TrySetValue($0000000100000010, 'hello');
  78. AssertTrue(b);
  79. b := fManager.TryGetValue($0000000100000010, s);
  80. AssertTrue (b);
  81. AssertEquals('hello', s);
  82. b := fManager.TrySetValue($0000000200000010, 'blubb');
  83. AssertFalse(b);
  84. end;
  85. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. procedure TutlHandleManagerTests.ComplexAddAndRemove;
  87. var
  88. h1, h2, h3, h4, h5: TutlHandle;
  89. b: Boolean;
  90. begin
  91. h1 := fManager.Add(0, 0, '1');
  92. AssertEquals($0000000100000000, h1);
  93. h2 := fManager.Add(0, 0, '2');
  94. AssertEquals($0000000100000001, h2);
  95. h3 := fManager.Add(0, 0, '3');
  96. AssertEquals($0000000100000002, h3);
  97. h4 := fManager.Add(0, 0, '4');
  98. AssertEquals($0000000100000003, h4);
  99. h5 := fManager.Add(0, 0, '5');
  100. AssertEquals($0000000100000004, h5);
  101. b := fManager.Remove(h2);
  102. AssertTrue(b);
  103. h2 := fManager.Add(0, 0, '12');
  104. AssertEquals($0000000200000001, h2);
  105. b := fManager.Remove(h4);
  106. AssertTrue(b);
  107. b := fManager.Remove(h3);
  108. AssertTrue(b);
  109. h3 := fManager.Add(0, 0, '13');
  110. AssertEquals($0000000200000002, h3);
  111. h4 := fManager.Add(0, 0, '14');
  112. AssertEquals($0000000200000003, h4);
  113. end;
  114. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  115. procedure TutlHandleManagerTests.Enumerate;
  116. var
  117. h, h1, h2, h3: TutlHandle;
  118. b: Boolean;
  119. e: TStringHandleManager.IEnumerator;
  120. begin
  121. e := fManager.GetEnumerator;
  122. h1 := fManager.Add(0, 0, '1');
  123. h2 := fManager.Add(0, 0, '2');
  124. h3 := fManager.Add(0, 0, '3');
  125. b := e.MoveNext;
  126. AssertTrue(b);
  127. h := e.Current;
  128. AssertTrue(h1 = h);
  129. b := e.MoveNext;
  130. AssertTrue(b);
  131. h := e.Current;
  132. AssertTrue(h2 = h);
  133. b := e.MoveNext;
  134. AssertTrue(b);
  135. h := e.Current;
  136. AssertTrue(h3 = h);
  137. b := e.MoveNext;
  138. AssertFalse(b);
  139. end;
  140. initialization
  141. RegisterTest(TutlHandleManagerTests.Suite);
  142. end.