tcclasses.pas 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. unit tcclasses;
  2. {$mode ObjFPC}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry;
  6. Type
  7. { TSortObj }
  8. TSortObj = Class (TObject)
  9. Value : String;
  10. Constructor create(aValue : string);
  11. end;
  12. { TTestClasses }
  13. TTestClasses = class(TTestCase)
  14. private
  15. FList: TFPList;
  16. FStrings: TStringList;
  17. procedure AssertSortedList;
  18. procedure AssertSortedStrings;
  19. public
  20. Procedure Setup; override;
  21. procedure TearDown; override;
  22. property Strings : TStringList Read FStrings;
  23. property List : TFPList Read FList;
  24. Published
  25. Procedure TestSort;
  26. Procedure TestSorted;
  27. Procedure TestSortedInverse;
  28. Procedure TestListSort;
  29. Procedure TestListSorted;
  30. Procedure TestListSortedInverse;
  31. end;
  32. implementation
  33. { TSortObj }
  34. constructor TSortObj.create(aValue: string);
  35. begin
  36. Value:=aValue;
  37. end;
  38. { TTestClasses }
  39. procedure TTestClasses.Setup;
  40. begin
  41. Inherited;
  42. FStrings:=TStringLisT.Create;
  43. FList:=TFPList.Create;
  44. end;
  45. procedure TTestClasses.TearDown;
  46. Var
  47. I : Integer;
  48. O : TObject;
  49. begin
  50. FreeAndNil(FStrings);
  51. For I:=0 to Flist.Count-1 do
  52. begin
  53. O:=TObject(Flist[i]);
  54. FreeAndNil(O);
  55. end;
  56. FreeAndNil(FList);
  57. Inherited;
  58. end;
  59. procedure TTestClasses.AssertSortedStrings;
  60. Var
  61. I : Integer;
  62. begin
  63. For I:=0 to Strings.Count-2 do
  64. if not (Strings[i]<=Strings[i+1]) then
  65. Fail(Strings.Text+Format('Not sorted at %d (%s) - %d (%s)',[I,Strings[i],I+1,Strings[i+1]]));
  66. end;
  67. procedure TTestClasses.TestSort;
  68. begin
  69. Strings.Add('beta');
  70. Strings.Add('delta');
  71. Strings.Add('alfa');
  72. Strings.Add('gamma');
  73. Strings.Sort;
  74. AssertSortedStrings;
  75. end;
  76. procedure TTestClasses.TestSorted;
  77. begin
  78. Strings.Add('alfa');
  79. Strings.Add('beta');
  80. Strings.Add('gamma');
  81. Strings.Add('delta');
  82. Strings.Sort;
  83. AssertSortedStrings;
  84. end;
  85. procedure TTestClasses.TestSortedInverse;
  86. begin
  87. Strings.Add('delta');
  88. Strings.Add('gamma');
  89. Strings.Add('beta');
  90. Strings.Add('alfa');
  91. Strings.Sort;
  92. AssertSortedStrings;
  93. end;
  94. procedure TTestClasses.AssertSortedList;
  95. Var
  96. I : Integer;
  97. begin
  98. For I:=0 to FList.Count-2 do
  99. if not (TSortObj(Flist[i]).Value<=TSortObj(Flist[i+1]).Value) then
  100. Fail(Strings.Text+Format('Not sorted at %d (%s) - %d (%s)',[I,TSortObj(Flist[i]).Value,I+1,TSortObj(Flist[i+1]).Value]));
  101. end;
  102. Function ObjSort (A,B : JSValue) : Integer;
  103. begin
  104. Result:=CompareText(TSortObj(A).Value,TSortObj(B).Value);
  105. end;
  106. procedure TTestClasses.TestListSort;
  107. begin
  108. FList.Add(TSortObj.Create('beta'));
  109. FList.Add(TSortObj.Create('delta'));
  110. FList.Add(TSortObj.Create('alfa'));
  111. FList.Add(TSortObj.Create('gamma'));
  112. FList.Sort(@ObjSort);
  113. AssertSortedList;
  114. end;
  115. procedure TTestClasses.TestListSorted;
  116. begin
  117. FList.Add(TSortObj.Create('alfa'));
  118. FList.Add(TSortObj.Create('beta'));
  119. FList.Add(TSortObj.Create('gamma'));
  120. FList.Add(TSortObj.Create('delta'));
  121. FList.Sort(@ObjSort);
  122. AssertSortedList;
  123. end;
  124. procedure TTestClasses.TestListSortedInverse;
  125. begin
  126. FList.Add(TSortObj.Create('delta'));
  127. FList.Add(TSortObj.Create('gamma'));
  128. FList.Add(TSortObj.Create('beta'));
  129. FList.Add(TSortObj.Create('alfa'));
  130. FList.Sort(@ObjSort);
  131. AssertSortedList;
  132. end;
  133. initialization
  134. RegisterTests([TTestClasses]);
  135. end.