瀏覽代碼

+ test for self-referencing specialized generic type

git-svn-id: trunk@5333 -
micha 18 年之前
父節點
當前提交
00c824d352
共有 2 個文件被更改,包括 47 次插入0 次删除
  1. 1 0
      .gitattributes
  2. 46 0
      tests/test/tgeneric11.pp

+ 1 - 0
.gitattributes

@@ -6449,6 +6449,7 @@ tests/test/tfpu5.pp svneol=native#text/plain
 tests/test/tfpuover.pp svneol=native#text/plain
 tests/test/tgeneric1.pp svneol=native#text/plain
 tests/test/tgeneric10.pp svneol=native#text/plain
+tests/test/tgeneric11.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

+ 46 - 0
tests/test/tgeneric11.pp

@@ -0,0 +1,46 @@
+{$mode objfpc}
+
+type
+   generic TList<_T>=class(TObject)
+   type protected
+     TSelf = specialize TList<_T>;
+   var public 
+     data : _T;
+     procedure Add(item: _T);
+     procedure Assign(Source: TSelf);
+   end;
+
+procedure TList.Add(item: _T);
+begin
+  data:=item;
+end;
+
+procedure TList.Assign(Source: TSelf);
+begin
+  data:=Source.data;
+end;
+
+type
+  TMyIntList = specialize TList<integer>;
+  TMyStringList = specialize TList<string>;
+
+var
+  ilist1, ilist2 : TMyIntList;
+  slist1, slist2 : TMyStringList;
+begin
+  ilist1 := TMyIntList.Create;
+  ilist1.add(10);
+  ilist2 := TMyIntList.Create;
+  ilist2.add(20);
+  ilist2.assign(ilist1);
+  if ilist2.data <> 10 then
+    halt(1);
+  slist1 := TMyStringList.Create;
+  slist1.add('test');
+  slist2 := TMyStringList.Create;
+  slist2.add('hello');
+  slist2.assign(slist1);
+  if slist2.data <> 'test' then
+    halt(1);
+end.
+