Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

125 рядки
3.4 KiB

  1. unit uutlAlgorithmTests;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, TestFramework,
  6. uutlComparer;
  7. type
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TutlAlgorithmTest = class(TTestCase)
  10. published
  11. procedure BinarySearch;
  12. procedure QuickSort;
  13. end;
  14. implementation
  15. uses
  16. uutlTypes, uutlGenerics, uutlAlgorithm;
  17. type
  18. TIntArray = specialize TutlArray<Integer>;
  19. TQuickSort = specialize TutlQuickSort<Integer>;
  20. TBinarySearch = specialize TutlBinarySearch<Integer>;
  21. TIntComparer = specialize TutlComparer<Integer>;
  22. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  23. //TutlAlgorithmTest/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  25. procedure TutlAlgorithmTest.BinarySearch;
  26. var
  27. arr: TIntArray;
  28. index: Integer;
  29. ret: Boolean;
  30. begin
  31. SetLength(arr, 10);
  32. arr[0] := 1;
  33. arr[1] := 4;
  34. arr[2] := 5;
  35. arr[3] := 6;
  36. arr[4] := 10;
  37. arr[5] := 11;
  38. arr[6] := 13;
  39. arr[7] := 20;
  40. arr[8] := 21;
  41. arr[9] := 22;
  42. ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 4, index);
  43. AssertTrue (ret);
  44. AssertEquals(1, index);
  45. ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 7, index);
  46. AssertFalse (ret);
  47. AssertEquals(4, index);
  48. ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 13, index);
  49. AssertTrue (ret);
  50. AssertEquals(6, index);
  51. ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 19, index);
  52. AssertFalse (ret);
  53. AssertEquals(7, index);
  54. ret := TBinarySearch.Search(arr[0], Length(arr), TIntComparer.Create, 25, index);
  55. AssertFalse (ret);
  56. AssertEquals(10, index);
  57. end;
  58. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  59. procedure TutlAlgorithmTest.QuickSort;
  60. var
  61. arr: TIntArray;
  62. begin
  63. SetLength(arr, 20);
  64. arr[ 0] := 134;
  65. arr[ 1] := 314;
  66. arr[ 2] := 721;
  67. arr[ 3] := 672;
  68. arr[ 4] := 831;
  69. arr[ 5] := 163;
  70. arr[ 6] := 126;
  71. arr[ 7] := 732;
  72. arr[ 8] := 175;
  73. arr[ 9] := 274;
  74. arr[10] := 462;
  75. arr[11] := 627;
  76. arr[12] := 633;
  77. arr[13] := 672;
  78. arr[14] := 752;
  79. arr[15] := 367;
  80. arr[16] := 263;
  81. arr[17] := 456;
  82. arr[18] := 678;
  83. arr[19] := 832;
  84. TQuickSort.Sort(arr[0], Length(arr), TIntComparer.Create);
  85. AssertEquals(126, arr[ 0]);
  86. AssertEquals(134, arr[ 1]);
  87. AssertEquals(163, arr[ 2]);
  88. AssertEquals(175, arr[ 3]);
  89. AssertEquals(263, arr[ 4]);
  90. AssertEquals(274, arr[ 5]);
  91. AssertEquals(314, arr[ 6]);
  92. AssertEquals(367, arr[ 7]);
  93. AssertEquals(456, arr[ 8]);
  94. AssertEquals(462, arr[ 9]);
  95. AssertEquals(627, arr[10]);
  96. AssertEquals(633, arr[11]);
  97. AssertEquals(672, arr[12]);
  98. AssertEquals(672, arr[13]);
  99. AssertEquals(678, arr[14]);
  100. AssertEquals(721, arr[15]);
  101. AssertEquals(732, arr[16]);
  102. AssertEquals(752, arr[17]);
  103. AssertEquals(831, arr[18]);
  104. AssertEquals(832, arr[19]);
  105. end;
  106. initialization
  107. RegisterTest(TutlAlgorithmTest.Suite);
  108. end.