garrayutilstest.pp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. {$mode objfpc}
  2. unit garrayutilstest;
  3. interface
  4. uses fpcunit, testregistry, gvector, garrayutils, gutil;
  5. type vectorlli=specialize TVector<longint>;
  6. lesslli=specialize TLess<longint>;
  7. sortlli=specialize TOrderingArrayUtils<vectorlli, longint, lesslli>;
  8. type TGArrayUtilsTest = class(TTestCase)
  9. Published
  10. procedure SortRandomTest;
  11. procedure SortZeroOneTest;
  12. procedure NextPermutationTest1;
  13. procedure NextPermutationTest2;
  14. procedure NextPermutationTest3;
  15. procedure NextPermutationTest4;
  16. public
  17. procedure Setup;override;
  18. private
  19. data:vectorlli;
  20. end;
  21. implementation
  22. procedure TGArrayUtilsTest.SortRandomTest;
  23. var i:longint;
  24. begin
  25. for i:=0 to 5000 do
  26. data.pushBack(random(10000));
  27. sortlli.sort(data, 5001);
  28. for i:=0 to 4999 do
  29. AssertEquals('Wrong order', false, data[i+1]<data[i]);
  30. end;
  31. procedure TGArrayUtilsTest.SortZeroOneTest;
  32. var i:longint;
  33. begin
  34. for i:=0 to 5000 do
  35. data.pushBack(random(2));
  36. sortlli.sort(data, 5001);
  37. for i:=0 to 4999 do
  38. AssertEquals('Wrong order', false, data[i+1]<data[i]);
  39. end;
  40. procedure TGArrayUtilsTest.NextPermutationTest1;
  41. begin
  42. data.pushBack(1);
  43. data.pushBack(2);
  44. data.pushBack(3);
  45. data.pushBack(4);
  46. AssertEquals('Wrong ret', true, sortlli.NextPermutation(data, 4));
  47. AssertEquals('Wrong perm 1', 1, data[0]);
  48. AssertEquals('Wrong perm 2', 2, data[1]);
  49. AssertEquals('Wrong perm 3', 4, data[2]);
  50. AssertEquals('Wrong perm 4', 3, data[3]);
  51. end;
  52. procedure TGArrayUtilsTest.NextPermutationTest2;
  53. begin
  54. data.pushBack(4);
  55. data.pushBack(3);
  56. data.pushBack(2);
  57. data.pushBack(1);
  58. AssertEquals('Wrong ret', false, sortlli.NextPermutation(data, 4));
  59. AssertEquals('Wrong perm 1', 4, data[0]);
  60. AssertEquals('Wrong perm 2', 3, data[1]);
  61. AssertEquals('Wrong perm 3', 2, data[2]);
  62. AssertEquals('Wrong perm 4', 1, data[3]);
  63. end;
  64. procedure TGArrayUtilsTest.NextPermutationTest3;
  65. begin
  66. data.pushBack(5);
  67. data.pushBack(10);
  68. data.pushBack(9);
  69. data.pushBack(8);
  70. data.pushBack(7);
  71. data.pushBack(3);
  72. AssertEquals('Wrong ret', true, sortlli.NextPermutation(data, 6));
  73. AssertEquals('Wrong perm 1', 7, data[0]);
  74. AssertEquals('Wrong perm 2', 3, data[1]);
  75. AssertEquals('Wrong perm 3', 5, data[2]);
  76. AssertEquals('Wrong perm 4', 8, data[3]);
  77. AssertEquals('Wrong perm 5', 9, data[4]);
  78. AssertEquals('Wrong perm 6', 10, data[5]);
  79. end;
  80. procedure TGArrayUtilsTest.NextPermutationTest4;
  81. begin
  82. data.pushBack(0);
  83. data.pushBack(1);
  84. data.pushBack(0);
  85. data.pushBack(1);
  86. data.pushBack(1);
  87. data.pushBack(0);
  88. AssertEquals('Wrong ret', true, sortlli.NextPermutation(data, 6));
  89. AssertEquals('Wrong perm 1', 0, data[0]);
  90. AssertEquals('Wrong perm 2', 1, data[1]);
  91. AssertEquals('Wrong perm 3', 1, data[2]);
  92. AssertEquals('Wrong perm 4', 0, data[3]);
  93. AssertEquals('Wrong perm 5', 0, data[4]);
  94. AssertEquals('Wrong perm 6', 1, data[5]);
  95. end;
  96. procedure TGArrayUtilsTest.Setup;
  97. begin
  98. data:=vectorlli.create;
  99. end;
  100. initialization
  101. RegisterTest(TGArrayUtilsTest);
  102. end.