mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 15:29:16 +02:00
42 lines
868 B
ObjectPascal
42 lines
868 B
ObjectPascal
|
|
{$mode objfpc}
|
|
|
|
program TestGetSetProp;
|
|
{$APPTYPE CONSOLE}{$PACKSET 1}
|
|
|
|
uses TypInfo;
|
|
|
|
{$M+}
|
|
type
|
|
TEnum = (ckNormal, ckBusiness, ckVip, ckCorporate);
|
|
TSet = set of TEnum;
|
|
TClient = class
|
|
private
|
|
_Num: byte; // Works if Integer
|
|
_St: TSet;
|
|
published
|
|
property Num: byte read _Num write _Num; // Works if Integer
|
|
property St: TSet read _St write _St;
|
|
end;
|
|
|
|
var
|
|
C : TClient;
|
|
V : TSet;
|
|
begin
|
|
C := TClient.Create;
|
|
C.Num := 2;
|
|
C.St := [ckVip, ckNormal]; // the numeric representation is 5 (on little endian systems)
|
|
V := C.St;
|
|
writeln(sizeof(V), ' ', byte(V)); // It's OK
|
|
writeln(sizeof(C.St), ' ', byte(C.St)); // It's OK
|
|
{$ifdef FPC_LITTLE_ENDIAN}
|
|
if GetOrdProp(C, 'St')<>5 then
|
|
{$else}
|
|
if GetOrdProp(C, 'St')<>160 then
|
|
{$endif}
|
|
halt(1);
|
|
if GetSetProp(C, 'St')<>'ckNormal,ckVip' then
|
|
halt(2);
|
|
writeln('ok');
|
|
end.
|