* share types to reduce unnecessary duplication

git-svn-id: trunk@37067 -
This commit is contained in:
svenbarth 2017-08-27 11:59:34 +00:00
parent 4dc6d1f8f6
commit b1439c066a

View File

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