mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 21:07:58 +02:00
151 lines
3.1 KiB
ObjectPascal
151 lines
3.1 KiB
ObjectPascal
{ Source provided for Free Pascal Bug Report 3973 }
|
|
{ Submitted by "alphax" on 2005-05-16 }
|
|
{ e-mail: graphcoloring@yahoo.com.cn }
|
|
program fpc_test_3;
|
|
|
|
{$R-}
|
|
{$Q-}
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE objfpc}
|
|
{$ENDIF}
|
|
|
|
uses
|
|
SysUtils, Variants;
|
|
|
|
var
|
|
FailureCount: Integer;
|
|
|
|
procedure TestOpenArray;
|
|
|
|
procedure p(const a: array of const);
|
|
|
|
procedure Check(
|
|
const TypeName: string;
|
|
const aVarRec: TVarRec;
|
|
const aExpectedVType: Byte
|
|
);
|
|
begin
|
|
Write('VType of ', TypeName, ' element is: ', aVarRec.VType, '--------');
|
|
if aVarRec.VType = aExpectedVType then
|
|
WriteLn('Ok')
|
|
else
|
|
begin
|
|
Inc(FailureCount);
|
|
WriteLn('Failure');
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
Check('Currency', a[0], vtCurrency);
|
|
Check('Interface(nil)', a[1], vtInterface);
|
|
Check('Interface', a[2], vtInterface);
|
|
{ TObject is a class as well! }
|
|
Check('Class Object(nil)', a[3], vtObject);
|
|
Check('Class', a[4], vtClass);
|
|
{$IFDEF FPC}
|
|
Check('QWord', a[5], vtQWord);
|
|
{$ENDIF}
|
|
|
|
{ I WISH FPC Introduce a vtDateTime for the TDatetime parameter }
|
|
end;
|
|
|
|
var
|
|
C: Currency;
|
|
DT: TDateTime;
|
|
IntfNil, Intf: IInterface;
|
|
Obj: TObject;
|
|
|
|
{$IFDEF FPC}
|
|
Quad: QWord;
|
|
{$ENDIF}
|
|
begin
|
|
C := 0;
|
|
IntfNil := nil;
|
|
Intf := TInterfacedObject.Create();
|
|
Obj := nil;
|
|
{$IFDEF FPC}
|
|
Quad := 0;
|
|
p([C, IntfNil, Intf, Obj, TObject, Quad]);
|
|
{$ELSE}
|
|
p([C, IntfNil, Intf, Obj, TObject]);
|
|
{$ENDIF}
|
|
end;
|
|
|
|
|
|
procedure TestVarType;
|
|
|
|
procedure Check(
|
|
const aTypeName: string;
|
|
const V: Variant;
|
|
const aExpectedVarType: TVarType);
|
|
var
|
|
VT: TVarType;
|
|
begin
|
|
VT := VarType(V);
|
|
Write('VarType of ', aTypeName, ' variant is: ', VT, '--------');
|
|
if VT = aExpectedVarType then
|
|
Writeln('Ok')
|
|
else
|
|
begin
|
|
WriteLn('Failure');
|
|
Inc(FailureCount);
|
|
end;
|
|
end;
|
|
|
|
var
|
|
C: Currency;
|
|
DT: TDateTime;
|
|
Intf: IInterface;
|
|
{$IFDEF FPC}
|
|
Quad: QWord;
|
|
{$ENDIF}
|
|
begin
|
|
C := 0;
|
|
DT := 0;
|
|
Intf := TInterfacedObject.Create();
|
|
{$IFDEF FPC}
|
|
Quad := 0;
|
|
{$ENDIF}
|
|
Check('Currency', C, varCurrency);
|
|
Check('Datetime', DT, varDate);
|
|
Check('Interface', Intf, varUnknown);
|
|
{$IFDEF FPC}
|
|
Check('QWord', Quad, varQWord);
|
|
{$ENDIF}
|
|
end;
|
|
|
|
procedure TestFormat;
|
|
var
|
|
uLong: Longword;
|
|
Longlong: Int64;
|
|
{$IFDEF FPC}
|
|
Quad: QWord;
|
|
{$ENDIF}
|
|
begin
|
|
uLong := High(uLong);
|
|
Writeln(Format('high of longword is: %u', [uLong]), ' ', IntToHex(ulong, 8));
|
|
Longlong := High(Longlong);
|
|
Writeln(Format('high of int64 is: %d', [Longlong]), ' ', IntToHex(Longlong, 16));
|
|
{$IFDEF FPC}
|
|
Quad := High(Quad);
|
|
Writeln(Format('high of quadword is: %u', [Quad]), ' ', IntToHex(int64(Quad), 16));
|
|
{$ENDIF}
|
|
end;
|
|
|
|
begin
|
|
TestOpenArray();
|
|
TestVarType();
|
|
TestFormat();
|
|
WriteLn;
|
|
if FailureCount = 0 then
|
|
WriteLn('All passed')
|
|
else
|
|
begin
|
|
WriteLn(FailureCount, 'Failures');
|
|
halt(1);
|
|
end;
|
|
end.
|