fpc/tests/utils/variants/genvartests.pp
Jonas Maebe f56c2bcefc * fixed some tests involving extended/double/currency after previous
optimization

git-svn-id: trunk@9039 -
2007-11-01 13:53:55 +00:00

161 lines
4.9 KiB
ObjectPascal

const
types: array[1..19] of string[20] =
('formal','comp','int64','currency','longint','cardinal','word','smallint',
'byte','shortint',
'shortstring','ansistring','single','double','extended','char','boolean',
'widestring','widechar');
compidx=2;
int64idx=3;
doubleidx=14;
extendedidx=15;
curridx=4;
function tostr(i: longint): string;
begin
str(i,tostr);
end;
{$i+}
var
k: longint;
i,j: byte;
t: text;
begin
k := 1;
for i := low(types) to high(types)-1 do
for j := succ(i) to high(types) do
begin
assign(t,'tvarol'+tostr(k)+'.pp');
rewrite(t);
writeln(t,'{$ifndef bigfile}');
writeln(t,'{$ifdef fpc}');
writeln(t,'{$mode delphi}');
writeln(t,'{$else fpc}');
writeln(t,'{$define FPC_HAS_TYPE_EXTENDED}');
writeln(t,'{$endif fpc}');
writeln(t,'{$endif bigfile}');
writeln(t);
types[compidx]:='comp'+tostr(k);
writeln(t,'type ');
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
if not(j in [doubleidx,extendedidx]) then
writeln(t,' ',types[compidx],' = double;')
else
writeln(t,' ',types[compidx],' = currency;');
writeln(t,'{$else FPC_COMP_IS_INT64}');
writeln(t,' ',types[compidx],' = comp;');
writeln(t,'{$endif FPC_COMP_IS_INT64}');
if (i in [curridx,compidx,doubleidx]) and
(j=extendedidx) then
writeln(t,'{$ifdef FPC_HAS_TYPE_EXTENDED}');
if (i <> low(types)) then
writeln(t,'procedure test',tostr(k),'(a: ',types[i],'); overload;')
else
writeln(t,'procedure test',tostr(k),'(var a); overload;');
writeln(t,' begin');
{
if (i=compidx) then
begin
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
writeln(t,' writeln(''COMPFAILQ'');');
writeln(t,'{$endif FPC_COMP_IS_INT64}')
end;
}
writeln(t,' writeln(''',types[i],' called instead of ',types[j],''');');
writeln(t,' writeln(''XXX'')');
writeln(t,' end;');
writeln(t);
writeln(t,'procedure test',tostr(k),'(a: ',types[j],'); overload;');
writeln(t,' begin');
{
if (i=compidx) then
begin
writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
writeln(t,' writeln(''COMPFAILV'');');
writeln(t,'{$endif FPC_COMP_IS_INT64}')
end;
}
writeln(t,' writeln(''',types[j],' called instead of ',types[i],''');');
writeln(t,' writeln(''YYY'')');
writeln(t,' end;');
writeln(t);
{ global to avoid problems with invalid floats }
{ due to uninitialised variables, and to avoid }
{ having to generate type-specific init code }
writeln(t,'var');
if (i <> low(types)) then
writeln(t,' x',tostr(k),': ',types[i],';')
else
writeln(t,' x',tostr(k),': longint;');
writeln(t);
writeln(t,' y',tostr(k),': ',types[j],';');
writeln(t,'procedure dotest',tostr(k),';');
writeln(t,'var');
writeln(t,' v: variant;');
writeln(t);
writeln(t,'begin');
writeln(t,' try');
writeln(t,' v := x',tostr(k),';');
writeln(t,' test',tostr(k),'(v);');
writeln(t,' except');
writeln(t,' on E : TObject do');
writeln(t,' writeln(''QQQ'');');
writeln(t,' end;');
writeln(t);
writeln(t,' try');
writeln(t,' v := y',tostr(k),';');
writeln(t,' test',tostr(k),'(v);');
writeln(t,' except');
writeln(t,' on E : TObject do');
writeln(t,' writeln(''VVV'');');
writeln(t,' end;');
writeln(t,'end;');
writeln(t);
writeln(t,'{$ifndef bigfile} begin');
writeln(t,' dotest',tostr(k),';');
writeln(t,'end. {$endif not bigfile}');
if (((i in [curridx,compidx,doubleidx]) and
(j=extendedidx))) then
begin
writeln(t,'{$else FPC_HAS_TYPE_EXTENDED}');
writeln(t,'begin');
if (i=doubleidx) and
(j=curridx) then
{ compilation has to fail }
writeln(t,' abc');
writeln(t,'end.');
writeln(t,'{$endif FPC_HAS_TYPE_EXTENDED}');
end;
(*
if ({(i=compidx) and
((j=int64idx) or
(j=doubleidx)) or
}
((i in [curridx,compidx,doubleidx]) and
(j=extendedidx))) then
begin
writeln(t,'{$else}');
writeln(t,'begin');
if (i=doubleidx) and
(j=curridx) then
{ compilation has to fail }
writeln(t,' abc');
// writeln(t,' halt(COMPFAIL);');
writeln(t,'{$endif}');
end;
writeln(t,'end.');
*)
close(t);
inc(k);
end;
end.