170 lines
3.9 KiB
ObjectPascal
170 lines
3.9 KiB
ObjectPascal
unit u_dynarrays2;
|
|
type TClass<T> = class
|
|
a : array[,] of T;
|
|
constructor(a,b : integer);
|
|
begin
|
|
self.a := new T[a,b];
|
|
end;
|
|
|
|
procedure SetElem(i,j : integer; it : T);
|
|
begin
|
|
a[i,j] := it;
|
|
end;
|
|
function GetElem(i,j : integer):T ;
|
|
begin
|
|
Result := a[i,j];
|
|
end;
|
|
end;
|
|
|
|
type TRec = record
|
|
a : integer;
|
|
b : set of char;
|
|
end;
|
|
|
|
type TRec2 = record
|
|
arr : array[,] of real;
|
|
arr2 : array[1..3] of integer;
|
|
end;
|
|
|
|
type TSet = set of integer;
|
|
TArr = array[,,] of string;
|
|
|
|
procedure Test3(var a : integer);
|
|
begin
|
|
a := 11;
|
|
end;
|
|
|
|
procedure Test4(var arr : TArr);
|
|
begin
|
|
arr := new string[2,2,2];
|
|
arr[0,1,0] := 'ttt';
|
|
end;
|
|
|
|
procedure Test;
|
|
var arr3 : array[,] of array of integer := (((1,2),(1,2)),((1,1),(1,1)));
|
|
arr : array[,] of integer:=((1,2),(2,3));
|
|
arr2 : array[,,] of TRec;
|
|
arr4 : array[,] of object;
|
|
arr5 : array[,] of string;
|
|
arr6 : array[,,] of TSet;
|
|
rec : TRec2 := (arr:((1.2,2.5),(3.2,2.3));arr2:(2,4,6));
|
|
|
|
begin
|
|
assert(rec.arr[1,1] = 2.3);
|
|
assert(arr3[0,0][1]=2);
|
|
assert(arr[0,0]=1);
|
|
assert(arr[1,1]=3);
|
|
arr := new integer[2,2]((1,3),(2,4));
|
|
assert(arr[1,0]=2);
|
|
assert(arr[1,1]=4);
|
|
arr[0,1] := 6;
|
|
assert(arr[0,1]=6);
|
|
arr2 := new TRec[2,2,1];
|
|
arr2[0,1,0].a := 13;
|
|
assert(arr2[0,1,0].a=13);
|
|
arr4 := new object[3,3];
|
|
arr4[1,1] := 7;
|
|
assert(integer(arr4[1,1])=7);
|
|
arr5 := new string[6,6];
|
|
assert(arr5[1,2]='');
|
|
arr6 := new TSet[3,2,2];
|
|
arr6[0,1,1] := [2,3];
|
|
assert(arr6[0,1,1]=[2,3]);
|
|
end;
|
|
|
|
procedure Test2;
|
|
var arr3 : array[,] of array of integer := (((1,2),(1,2)),((1,1),(1,1)));
|
|
arr : array[,] of integer:=((1,2),(2,3));
|
|
arr2 : array[,,] of TRec;
|
|
arr4 : array[,] of object;
|
|
arr5 : array[,] of string;
|
|
arr6 : array[,,] of TSet;
|
|
rec : TRec2 := (arr:((1.2,2.5),(3.2,2.3));arr2:(2,4,6));
|
|
|
|
procedure Nested;
|
|
begin
|
|
assert(rec.arr[1,1] = 2.3);
|
|
assert(arr3[0,0][1]=2);
|
|
arr := new integer[2,3]((2,3,4),(5,3,7));
|
|
assert(arr[1,2]=7);
|
|
end;
|
|
|
|
begin
|
|
assert(rec.arr[1,1] = 2.3);
|
|
assert(arr3[0,0][1]=2);
|
|
assert(arr[0,0]=1);
|
|
assert(arr[1,1]=3);
|
|
arr := new integer[2,2]((1,3),(2,4));
|
|
assert(arr[1,0]=2);
|
|
assert(arr[1,1]=4);
|
|
arr[0,1] := 6;
|
|
assert(arr[0,1]=6);
|
|
arr2 := new TRec[2,2,1];
|
|
arr2[0,1,0].a := 13;
|
|
assert(arr2[0,1,0].a=13);
|
|
arr4 := new object[3,3];
|
|
arr4[1,1] := 7;
|
|
assert(integer(arr4[1,1])=7);
|
|
arr5 := new string[6,6];
|
|
assert(arr5[1,2]='');
|
|
arr6 := new TSet[3,2,2];
|
|
arr6[0,1,1] := [2,3];
|
|
assert(arr6[0,1,1]=[2,3]);
|
|
Nested;
|
|
end;
|
|
|
|
var arr3 : array[,] of array of integer := (((1,2),(1,2)),((1,1),(1,1)));
|
|
arr : array[,] of integer:=((1,2),(2,3));
|
|
_arr : array[,] of integer;
|
|
arr2 : array[,,] of TRec;
|
|
arr4 : array[,] of object;
|
|
arr5 : array[,] of string;
|
|
arr6 : array[,,] of TSet;
|
|
r : TRec;
|
|
arr7 : array[,] of object := ((2,r),(r,3));
|
|
arr8 : array[1..2] of array[,] of real := (((1,2),(2,3)),((2.2,2.3),(2,3.3)));
|
|
arr9 : array of array[,] of real := (((1,2),(2,3)),((2.2,2.3),(2,3.3)));
|
|
rec : TRec2 := (arr:((1.2,2.5),(3.2,2.3));arr2:(2,4,6));
|
|
cls : TClass<char>;
|
|
p : ^integer;
|
|
|
|
begin
|
|
assert(Length(arr7,0)=2);
|
|
assert(Length(arr7,1)=2);
|
|
assert(rec.arr[1,1] = 2.3);
|
|
assert(arr3[0,0][1]=2);
|
|
assert(arr[0,0]=1);
|
|
assert(arr[1,1]=3);
|
|
p := @arr[1,1];
|
|
assert(p^=arr[1,1]);
|
|
arr := new integer[2,2]((1,3),(2,4));
|
|
assert(arr[1,0]=2);
|
|
assert(arr[1,1]=4);
|
|
arr[0,1] := 6;
|
|
assert(arr[0,1]=6);
|
|
arr2 := new TRec[2,2,1];
|
|
arr2[0,1,0].a := 13;
|
|
assert(arr2[0,1,0].a=13);
|
|
arr4 := new object[3,3];
|
|
arr4[1,1] := 7;
|
|
assert(integer(arr4[1,1])=7);
|
|
arr5 := new string[6,6];
|
|
assert(arr5[1,2]='');
|
|
arr6 := new TSet[3,2,2];
|
|
arr6[0,1,1] := [2,3];
|
|
assert(arr6[0,1,1]=[2,3]);
|
|
assert(TRec(arr7[0,1])=r);
|
|
assert(integer(arr7[0,0])=2);
|
|
assert(arr8[1][1,0]=2);
|
|
assert(arr9[1][1,0]=2);
|
|
Test;
|
|
Test2;
|
|
Test3(arr[1,1]);
|
|
assert(arr[1,1]=11);
|
|
var arr10: TArr;
|
|
Test4(arr10);
|
|
assert(arr10[0,1,0]='ttt');
|
|
cls := new TClass<char>(3,4);
|
|
cls.SetElem(2,2,'m');
|
|
assert(cls.GetElem(2,2)='m');
|
|
end. |