mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 03:29:19 +02:00
* share types to reduce unnecessary duplication
git-svn-id: trunk@37067 -
This commit is contained in:
parent
4dc6d1f8f6
commit
b1439c066a
@ -138,6 +138,15 @@ type
|
|||||||
TArrayOfNonManagedRec = array[0..0] of TNonManagedRec;
|
TArrayOfNonManagedRec = array[0..0] of TNonManagedRec;
|
||||||
TArrayOfByte = array[0..0] of byte;
|
TArrayOfByte = array[0..0] of byte;
|
||||||
|
|
||||||
|
TArrayOfLongintDyn = array of LongInt;
|
||||||
|
TArrayOfLongintStatic = array[0..3] of LongInt;
|
||||||
|
|
||||||
|
TTestRecord = record
|
||||||
|
Value1: LongInt;
|
||||||
|
Value2: String;
|
||||||
|
end;
|
||||||
|
PTestRecord = ^TTestRecord;
|
||||||
|
|
||||||
{$ifdef fpc}
|
{$ifdef fpc}
|
||||||
{$PUSH}
|
{$PUSH}
|
||||||
{$INTERFACES CORBA}
|
{$INTERFACES CORBA}
|
||||||
@ -294,16 +303,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestCase1.TestMakeArrayDynamic;
|
procedure TTestCase1.TestMakeArrayDynamic;
|
||||||
type
|
|
||||||
TArrDyn = array of LongInt;
|
|
||||||
var
|
var
|
||||||
arr: TArrDyn;
|
arr: TArrayOfLongintDyn;
|
||||||
value: TValue;
|
value: TValue;
|
||||||
begin
|
begin
|
||||||
SetLength(arr, 2);
|
SetLength(arr, 2);
|
||||||
arr[0] := 42;
|
arr[0] := 42;
|
||||||
arr[1] := 21;
|
arr[1] := 21;
|
||||||
TValue.Make(@arr, TypeInfo(TArrDyn), value);
|
TValue.Make(@arr, TypeInfo(TArrayOfLongintDyn), value);
|
||||||
CheckEquals(value.IsArray, True);
|
CheckEquals(value.IsArray, True);
|
||||||
CheckEquals(value.IsObject, False);
|
CheckEquals(value.IsObject, False);
|
||||||
CheckEquals(value.IsOrdinal, False);
|
CheckEquals(value.IsOrdinal, False);
|
||||||
@ -861,25 +868,14 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestCase1.TestReferenceRawData;
|
procedure TTestCase1.TestReferenceRawData;
|
||||||
type
|
|
||||||
TTest = record
|
|
||||||
a: LongInt;
|
|
||||||
b: String;
|
|
||||||
end;
|
|
||||||
PTest = ^TTest;
|
|
||||||
|
|
||||||
TArrDyn = array of LongInt;
|
|
||||||
|
|
||||||
TArrStat = array[0..2] of LongInt;
|
|
||||||
|
|
||||||
var
|
var
|
||||||
value: TValue;
|
value: TValue;
|
||||||
str: String;
|
str: String;
|
||||||
intf: IInterface;
|
intf: IInterface;
|
||||||
i: LongInt;
|
i: LongInt;
|
||||||
test: TTest;
|
test: TTestRecord;
|
||||||
arrdyn: TArrDyn;
|
arrdyn: TArrayOfLongintDyn;
|
||||||
arrstat: TArrStat;
|
arrstat: TArrayOfLongintStatic;
|
||||||
begin
|
begin
|
||||||
str := 'Hello World';
|
str := 'Hello World';
|
||||||
UniqueString(str);
|
UniqueString(str);
|
||||||
@ -895,39 +891,30 @@ begin
|
|||||||
Check(value.GetReferenceToRawData <> @i, 'Reference to longint is equal');
|
Check(value.GetReferenceToRawData <> @i, 'Reference to longint is equal');
|
||||||
Check(PLongInt(value.GetReferenceToRawData)^ = PLongInt(@i)^, 'Reference to longint data differs');
|
Check(PLongInt(value.GetReferenceToRawData)^ = PLongInt(@i)^, 'Reference to longint data differs');
|
||||||
|
|
||||||
test.a := 42;
|
test.value1 := 42;
|
||||||
test.b := 'Hello World';
|
test.value2 := 'Hello World';
|
||||||
TValue.Make(@test, TypeInfo(TTest), value);
|
TValue.Make(@test, TypeInfo(TTestRecord), value);
|
||||||
Check(value.GetReferenceToRawData <> @test, 'Reference to record is equal');
|
Check(value.GetReferenceToRawData <> @test, 'Reference to record is equal');
|
||||||
Check(PTest(value.GetReferenceToRawData)^.a = PTest(@test)^.a, 'Reference to record data a differs');
|
Check(PTestRecord(value.GetReferenceToRawData)^.value1 = PTestRecord(@test)^.value1, 'Reference to record data value1 differs');
|
||||||
Check(PTest(value.GetReferenceToRawData)^.b = PTest(@test)^.b, 'Reference to record data b differs');
|
Check(PTestRecord(value.GetReferenceToRawData)^.value2 = PTestRecord(@test)^.value2, 'Reference to record data value2 differs');
|
||||||
|
|
||||||
SetLength(arrdyn, 3);
|
SetLength(arrdyn, 3);
|
||||||
arrdyn[0] := 42;
|
arrdyn[0] := 42;
|
||||||
arrdyn[1] := 23;
|
arrdyn[1] := 23;
|
||||||
arrdyn[2] := 49;
|
arrdyn[2] := 49;
|
||||||
TValue.Make(@arrdyn, TypeInfo(TArrDyn), value);
|
TValue.Make(@arrdyn, TypeInfo(TArrayOfLongintDyn), value);
|
||||||
Check(PPointer(value.GetReferenceToRawData)^ = Pointer(arrdyn), 'Reference to dynamic array data differs');
|
Check(PPointer(value.GetReferenceToRawData)^ = Pointer(arrdyn), 'Reference to dynamic array data differs');
|
||||||
|
|
||||||
arrstat[0] := 42;
|
arrstat[0] := 42;
|
||||||
arrstat[1] := 23;
|
arrstat[1] := 23;
|
||||||
arrstat[2] := 49;
|
arrstat[2] := 49;
|
||||||
TValue.Make(@arrstat, TypeInfo(TArrStat), value);
|
arrstat[3] := 59;
|
||||||
|
TValue.Make(@arrstat, TypeInfo(TArrayOfLongintStatic), value);
|
||||||
Check(value.GetReferenceToRawData <> @arrstat, 'Reference to static array is equal');
|
Check(value.GetReferenceToRawData <> @arrstat, 'Reference to static array is equal');
|
||||||
Check(PLongInt(value.GetReferenceToRawData)^ = PLongInt(@arrstat)^, 'Reference to static array data differs');
|
Check(PLongInt(value.GetReferenceToRawData)^ = PLongInt(@arrstat)^, 'Reference to static array data differs');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestCase1.TestDataSize;
|
procedure TTestCase1.TestDataSize;
|
||||||
type
|
|
||||||
TEnum = (eOne, eTwo, eThree);
|
|
||||||
TSet = set of TEnum;
|
|
||||||
TTestRecord = record
|
|
||||||
Value1: LongInt;
|
|
||||||
Value2: Pointer;
|
|
||||||
end;
|
|
||||||
TObjProc = procedure of object;
|
|
||||||
TArrDyn = array of LongInt;
|
|
||||||
TArrStatic = array[0..3] of LongInt;
|
|
||||||
var
|
var
|
||||||
u8: UInt8;
|
u8: UInt8;
|
||||||
u16: UInt16;
|
u16: UInt16;
|
||||||
@ -951,8 +938,8 @@ var
|
|||||||
o: TObject;
|
o: TObject;
|
||||||
c: TClass;
|
c: TClass;
|
||||||
i: IInterface;
|
i: IInterface;
|
||||||
ad: TArrDyn;
|
ad: TArrayOfLongintDyn;
|
||||||
_as: TArrStatic;
|
_as: TArrayOfLongintStatic;
|
||||||
b8: Boolean;
|
b8: Boolean;
|
||||||
{$ifdef fpc}
|
{$ifdef fpc}
|
||||||
b16: Boolean16;
|
b16: Boolean16;
|
||||||
@ -965,12 +952,12 @@ var
|
|||||||
{$ifdef fpc}
|
{$ifdef fpc}
|
||||||
bl64: QWordBool;
|
bl64: QWordBool;
|
||||||
{$endif}
|
{$endif}
|
||||||
e: TEnum;
|
e: TTestEnum;
|
||||||
s: TSet;
|
s: TTestSet;
|
||||||
t: TTestRecord;
|
t: TTestRecord;
|
||||||
p: Pointer;
|
p: Pointer;
|
||||||
proc: TProcedure;
|
proc: TTestProc;
|
||||||
method: TObjProc;
|
method: TTestMethod;
|
||||||
|
|
||||||
value: TValue;
|
value: TValue;
|
||||||
begin
|
begin
|
||||||
@ -1043,35 +1030,25 @@ begin
|
|||||||
TValue.Make(@t, TypeInfo(TTestRecord), value);
|
TValue.Make(@t, TypeInfo(TTestRecord), value);
|
||||||
CheckEquals(SizeOf(TTestRecord), value.DataSize, 'Size of TTestRecord differs');
|
CheckEquals(SizeOf(TTestRecord), value.DataSize, 'Size of TTestRecord differs');
|
||||||
proc := Nil;
|
proc := Nil;
|
||||||
TValue.Make(@proc, TypeInfo(TProcedure), value);
|
TValue.Make(@proc, TypeInfo(TTestProc), value);
|
||||||
CheckEquals(SizeOf(TProcedure), value.DataSize, 'Size of TProcedure differs');
|
CheckEquals(SizeOf(TTestProc), value.DataSize, 'Size of TTestProc differs');
|
||||||
{method := Nil;
|
{method := Nil;
|
||||||
TValue.Make(@method, TypeInfo(TObjProc), value);
|
TValue.Make(@method, TypeInfo(TTestMethod), value);
|
||||||
CheckEquals(SizeOf(TObjProc), value.DataSize, 'Size of TMethod differs');}
|
CheckEquals(SizeOf(TTestMethod), value.DataSize, 'Size of TTestMethod differs');}
|
||||||
TValue.Make(@_as, TypeInfo(TArrStatic), value);
|
TValue.Make(@_as, TypeInfo(TArrayOfLongintStatic), value);
|
||||||
CheckEquals(SizeOf(TArrStatic), value.DataSize, 'Size of TArrStatic differs');
|
CheckEquals(SizeOf(TArrayOfLongintStatic), value.DataSize, 'Size of TArrayOfLongintStatic differs');
|
||||||
TValue.Make(@ad, TypeInfo(TArrDyn), value);
|
TValue.Make(@ad, TypeInfo(TArrayOfLongintDyn), value);
|
||||||
CheckEquals(SizeOf(TArrDyn), value.DataSize, 'Size of TArrDyn differs');
|
CheckEquals(SizeOf(TArrayOfLongintDyn), value.DataSize, 'Size of TArrayOfLongintDyn differs');
|
||||||
{TValue.Make(@e, TypeInfo(TEnum), value);
|
{TValue.Make(@e, TypeInfo(TTestEnum), value);
|
||||||
CheckEquals(SizeOf(TEnum), value.DataSize, 'Size of TEnum differs');
|
CheckEquals(SizeOf(TTestEnum), value.DataSize, 'Size of TTestEnum differs');
|
||||||
TValue.Make(@s, TypeInfo(TSet), value);
|
TValue.Make(@s, TypeInfo(TTestSet), value);
|
||||||
CheckEquals(SizeOf(TSet), value.DataSize, 'Size of TSet differs');}
|
CheckEquals(SizeOf(TTestSet), value.DataSize, 'Size of TTestSet differs');}
|
||||||
p := Nil;
|
p := Nil;
|
||||||
TValue.Make(@p, TypeInfo(Pointer), value);
|
TValue.Make(@p, TypeInfo(Pointer), value);
|
||||||
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of Pointer differs');
|
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of Pointer differs');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestCase1.TestDataSizeEmpty;
|
procedure TTestCase1.TestDataSizeEmpty;
|
||||||
type
|
|
||||||
TEnum = (eOne, eTwo, eThree);
|
|
||||||
TSet = set of TEnum;
|
|
||||||
TTestRecord = record
|
|
||||||
Value1: LongInt;
|
|
||||||
Value2: Pointer;
|
|
||||||
end;
|
|
||||||
TObjProc = procedure of object;
|
|
||||||
TArrDyn = array of LongInt;
|
|
||||||
TArrStatic = array[0..3] of LongInt;
|
|
||||||
var
|
var
|
||||||
value: TValue;
|
value: TValue;
|
||||||
begin
|
begin
|
||||||
@ -1139,18 +1116,18 @@ begin
|
|||||||
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of IInterface differs');
|
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of IInterface differs');
|
||||||
TValue.Make(Nil, TypeInfo(TTestRecord), value);
|
TValue.Make(Nil, TypeInfo(TTestRecord), value);
|
||||||
CheckEquals(SizeOf(TTestRecord), value.DataSize, 'Size of TTestRecord differs');
|
CheckEquals(SizeOf(TTestRecord), value.DataSize, 'Size of TTestRecord differs');
|
||||||
TValue.Make(Nil, TypeInfo(TProcedure), value);
|
TValue.Make(Nil, TypeInfo(TTestProc), value);
|
||||||
CheckEquals(SizeOf(TProcedure), value.DataSize, 'Size of TProcedure differs');
|
CheckEquals(SizeOf(TTestProc), value.DataSize, 'Size of TTestProc differs');
|
||||||
{TValue.Make(Nil, TypeInfo(TObjProc), value);
|
{TValue.Make(Nil, TypeInfo(TTestMethod), value);
|
||||||
CheckEquals(SizeOf(TObjProc), value.DataSize, 'Size of TMethod differs');}
|
CheckEquals(SizeOf(TTestMethod), value.DataSize, 'Size of TTestMethod differs');}
|
||||||
TValue.Make(Nil, TypeInfo(TArrStatic), value);
|
TValue.Make(Nil, TypeInfo(TArrayOfLongintStatic), value);
|
||||||
CheckEquals(SizeOf(TArrStatic), value.DataSize, 'Size of TArrStatic differs');
|
CheckEquals(SizeOf(TArrayOfLongintStatic), value.DataSize, 'Size of TArrayOfLongintStatic differs');
|
||||||
TValue.Make(Nil, TypeInfo(TArrDyn), value);
|
TValue.Make(Nil, TypeInfo(TArrayOfLongintDyn), value);
|
||||||
CheckEquals(SizeOf(TArrDyn), value.DataSize, 'Size of TArrDyn differs');
|
CheckEquals(SizeOf(TArrayOfLongintDyn), value.DataSize, 'Size of TArrayOfLongintDyn differs');
|
||||||
{TValue.Make(Nil, TypeInfo(TEnum), value);
|
{TValue.Make(Nil, TypeInfo(TTestEnum), value);
|
||||||
CheckEquals(SizeOf(TEnum), value.DataSize, 'Size of TEnum differs');
|
CheckEquals(SizeOf(TTestEnum), value.DataSize, 'Size of TTestEnum differs');
|
||||||
TValue.Make(Nil, TypeInfo(TSet), value);
|
TValue.Make(Nil, TypeInfo(TTestSet), value);
|
||||||
CheckEquals(SizeOf(TSet), value.DataSize, 'Size of TSet differs');}
|
CheckEquals(SizeOf(TTestSet), value.DataSize, 'Size of TTestSet differs');}
|
||||||
TValue.Make(Nil, TypeInfo(Pointer), value);
|
TValue.Make(Nil, TypeInfo(Pointer), value);
|
||||||
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of Pointer differs');
|
CheckEquals(SizeOf(Pointer), value.DataSize, 'Size of Pointer differs');
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user