Răsfoiți Sursa

* generic inheritance tests

git-svn-id: trunk@8416 -
peter 18 ani în urmă
părinte
comite
edc0bd3efb
3 a modificat fișierele cu 162 adăugiri și 0 ștergeri
  1. 2 0
      .gitattributes
  2. 78 0
      tests/test/tgeneric15.pp
  3. 82 0
      tests/test/tgeneric16.pp

+ 2 - 0
.gitattributes

@@ -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 - 0
tests/test/tgeneric15.pp

@@ -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 - 0
tests/test/tgeneric16.pp

@@ -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.