mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-06 10:37:49 +02:00
169 lines
3.2 KiB
ObjectPascal
169 lines
3.2 KiB
ObjectPascal
unit tcclasses;
|
|
|
|
{$mode ObjFPC}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, fpcunit, testregistry;
|
|
|
|
Type
|
|
|
|
{ TSortObj }
|
|
|
|
TSortObj = Class (TObject)
|
|
Value : String;
|
|
Constructor create(aValue : string);
|
|
end;
|
|
{ TTestClasses }
|
|
|
|
TTestClasses = class(TTestCase)
|
|
private
|
|
FList: TFPList;
|
|
FStrings: TStringList;
|
|
procedure AssertSortedList;
|
|
procedure AssertSortedStrings;
|
|
public
|
|
Procedure Setup; override;
|
|
procedure TearDown; override;
|
|
property Strings : TStringList Read FStrings;
|
|
property List : TFPList Read FList;
|
|
Published
|
|
Procedure TestSort;
|
|
Procedure TestSorted;
|
|
Procedure TestSortedInverse;
|
|
Procedure TestListSort;
|
|
Procedure TestListSorted;
|
|
Procedure TestListSortedInverse;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TSortObj }
|
|
|
|
constructor TSortObj.create(aValue: string);
|
|
begin
|
|
Value:=aValue;
|
|
end;
|
|
|
|
{ TTestClasses }
|
|
|
|
procedure TTestClasses.Setup;
|
|
begin
|
|
Inherited;
|
|
FStrings:=TStringLisT.Create;
|
|
FList:=TFPList.Create;
|
|
end;
|
|
|
|
procedure TTestClasses.TearDown;
|
|
|
|
Var
|
|
I : Integer;
|
|
O : TObject;
|
|
|
|
begin
|
|
FreeAndNil(FStrings);
|
|
For I:=0 to Flist.Count-1 do
|
|
begin
|
|
O:=TObject(Flist[i]);
|
|
FreeAndNil(O);
|
|
end;
|
|
FreeAndNil(FList);
|
|
Inherited;
|
|
end;
|
|
|
|
procedure TTestClasses.AssertSortedStrings;
|
|
|
|
Var
|
|
I : Integer;
|
|
|
|
begin
|
|
For I:=0 to Strings.Count-2 do
|
|
if not (Strings[i]<=Strings[i+1]) then
|
|
Fail(Strings.Text+Format('Not sorted at %d (%s) - %d (%s)',[I,Strings[i],I+1,Strings[i+1]]));
|
|
end;
|
|
|
|
procedure TTestClasses.TestSort;
|
|
begin
|
|
Strings.Add('beta');
|
|
Strings.Add('delta');
|
|
Strings.Add('alfa');
|
|
Strings.Add('gamma');
|
|
Strings.Sort;
|
|
AssertSortedStrings;
|
|
end;
|
|
|
|
procedure TTestClasses.TestSorted;
|
|
begin
|
|
Strings.Add('alfa');
|
|
Strings.Add('beta');
|
|
Strings.Add('gamma');
|
|
Strings.Add('delta');
|
|
Strings.Sort;
|
|
AssertSortedStrings;
|
|
end;
|
|
|
|
procedure TTestClasses.TestSortedInverse;
|
|
begin
|
|
Strings.Add('delta');
|
|
Strings.Add('gamma');
|
|
Strings.Add('beta');
|
|
Strings.Add('alfa');
|
|
Strings.Sort;
|
|
AssertSortedStrings;
|
|
end;
|
|
|
|
procedure TTestClasses.AssertSortedList;
|
|
|
|
Var
|
|
I : Integer;
|
|
|
|
begin
|
|
For I:=0 to FList.Count-2 do
|
|
if not (TSortObj(Flist[i]).Value<=TSortObj(Flist[i+1]).Value) then
|
|
Fail(Strings.Text+Format('Not sorted at %d (%s) - %d (%s)',[I,TSortObj(Flist[i]).Value,I+1,TSortObj(Flist[i+1]).Value]));
|
|
|
|
end;
|
|
|
|
Function ObjSort (A,B : JSValue) : Integer;
|
|
|
|
begin
|
|
Result:=CompareText(TSortObj(A).Value,TSortObj(B).Value);
|
|
end;
|
|
|
|
procedure TTestClasses.TestListSort;
|
|
begin
|
|
FList.Add(TSortObj.Create('beta'));
|
|
FList.Add(TSortObj.Create('delta'));
|
|
FList.Add(TSortObj.Create('alfa'));
|
|
FList.Add(TSortObj.Create('gamma'));
|
|
FList.Sort(@ObjSort);
|
|
AssertSortedList;
|
|
end;
|
|
|
|
procedure TTestClasses.TestListSorted;
|
|
begin
|
|
FList.Add(TSortObj.Create('alfa'));
|
|
FList.Add(TSortObj.Create('beta'));
|
|
FList.Add(TSortObj.Create('gamma'));
|
|
FList.Add(TSortObj.Create('delta'));
|
|
FList.Sort(@ObjSort);
|
|
AssertSortedList;
|
|
end;
|
|
|
|
procedure TTestClasses.TestListSortedInverse;
|
|
begin
|
|
FList.Add(TSortObj.Create('delta'));
|
|
FList.Add(TSortObj.Create('gamma'));
|
|
FList.Add(TSortObj.Create('beta'));
|
|
FList.Add(TSortObj.Create('alfa'));
|
|
FList.Sort(@ObjSort);
|
|
AssertSortedList;
|
|
end;
|
|
|
|
initialization
|
|
RegisterTests([TTestClasses]);
|
|
|
|
end.
|
|
|