* generic inheritance tests

git-svn-id: trunk@8416 -
This commit is contained in:
peter 2007-09-09 13:12:26 +00:00
parent 7770e4981f
commit edc0bd3efb
3 changed files with 162 additions and 0 deletions

2
.gitattributes vendored
View File

@ -6881,6 +6881,8 @@ tests/test/tgeneric11.pp svneol=native#text/plain
tests/test/tgeneric12.pp svneol=native#text/plain
tests/test/tgeneric13.pp svneol=native#text/plain
tests/test/tgeneric14.pp svneol=native#text/plain
tests/test/tgeneric15.pp svneol=native#text/plain
tests/test/tgeneric16.pp svneol=native#text/plain
tests/test/tgeneric2.pp svneol=native#text/plain
tests/test/tgeneric3.pp svneol=native#text/plain
tests/test/tgeneric4.pp svneol=native#text/plain

78
tests/test/tgeneric15.pp Normal file
View File

@ -0,0 +1,78 @@
program Project1;
{$mode objfpc}{$H+}
type
{ TStack }
generic TStack<T> = class(TObject)
public
procedure Clear; virtual;
destructor Destroy; override;
end;
{ TIntegerStack }
TIntegerStack = class(specialize TStack<Integer>)
public
procedure Clear; override;
end;
{ TIntegerStack2 }
TIntegerStack2 = class(specialize TStack<Integer>)
public
procedure Clear; override;
end;
var
Idx : Longint;
{ TIntegerStack }
procedure TIntegerStack.Clear;
begin
Writeln('new clear');
Idx:=Idx or 1;
end;
{ TIntegerStack2 }
procedure TIntegerStack2.Clear;
begin
Writeln('new clear2');
Idx:=Idx or 2;
end;
{ TStack }
procedure TStack.Clear;
begin
Writeln('old clear');
end;
destructor TStack.Destroy;
begin
Writeln('old destroy');
Clear;
end;
var
s: TIntegerStack;
s2: TIntegerStack2;
begin
Idx:=0;
s := TIntegerStack.Create;
Writeln(s.ClassName);
s.Free;
s2 := TIntegerStack2.Create;
Writeln(s2.ClassName);
s2.Free;
if Idx<>3 then
halt(1);
end.

82
tests/test/tgeneric16.pp Normal file
View File

@ -0,0 +1,82 @@
program Project1;
{$mode objfpc}{$H+}
type
{ TStack }
generic TStack<T> = class(TObject)
public
procedure Clear; virtual;
destructor Destroy; override;
end;
{ TIntegerStack }
TAdvStack = class(specialize TStack<T>)
public
procedure Clear; override;
end;
{ TIntegerStack }
TIntegerStack = specialize TAdvStack<Integer>;
{ TIntegerStack2 }
TIntegerStack2 = class(specialize TAdvStack<Integer>);
public
procedure Clear; override;
end;
var
Idx : Longint;
{ TAdvStack }
procedure TAdvStack.Clear;
begin
Writeln('new clear');
Idx:=Idx or 1;
end;
{ TIntegerStack2 }
procedure TIntegerStack2.Clear;
begin
Writeln('new clear2');
Idx:=Idx or 2;
end;
{ TStack }
procedure TStack.Clear;
begin
Writeln('old clear');
end;
destructor TStack.Destroy;
begin
Writeln('old destroy');
Clear;
end;
var
s : TIntegerStack;
s2 : TIntegerStack2;
begin
Idx:=0;
s := TIntegerStack.Create;
Writeln(s.ClassName);
s.Free;
s2 := TIntegerStack2.Create;
Writeln(s2.ClassName);
s2.Free;
if Idx<>3 then
halt(1);
end.