genvartests.pp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. const
  2. types: array[1..19] of string[20] =
  3. ('formal','comp','int64','currency','longint','cardinal','word','smallint',
  4. 'byte','shortint',
  5. 'shortstring','ansistring','single','double','extended','char','boolean',
  6. 'widestring','widechar');
  7. compidx=2;
  8. int64idx=3;
  9. doubleidx=14;
  10. extendedidx=15;
  11. curridx=4;
  12. function tostr(i: longint): string;
  13. begin
  14. str(i,tostr);
  15. end;
  16. {$i+}
  17. var
  18. i,j,k: byte;
  19. t: text;
  20. begin
  21. k := 1;
  22. for i := low(types) to high(types)-1 do
  23. for j := succ(i) to high(types) do
  24. begin
  25. assign(t,'tvarol'+tostr(k)+'.pp');
  26. rewrite(t);
  27. writeln(t,'{$ifdef fpc}');
  28. writeln(t,'{$mode delphi}');
  29. writeln(t,'{$endif fpc}');
  30. writeln(t);
  31. writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
  32. writeln(t,'type ');
  33. if not(j in [doubleidx,extendedidx]) then
  34. writeln(t,' comp = double;')
  35. else
  36. writeln(t,' comp = currency;');
  37. writeln(t,'{$endif FPC_COMP_IS_INT64}');
  38. {
  39. if (i=compidx) and
  40. ((j=int64idx) or
  41. (j=doubleidx)) then
  42. writeln(t,'{$ifndef FPC_COMP_IS_INT64}');
  43. }
  44. if (i in [curridx,compidx,doubleidx]) and
  45. (j=extendedidx) then
  46. writeln(t,'{$ifdef FPC_HAS_TYPE_EXTENDED}');
  47. if (i <> low(types)) then
  48. writeln(t,'procedure test(a: ',types[i],'); overload;')
  49. else
  50. writeln(t,'procedure test(var a); overload;');
  51. writeln(t,' begin');
  52. {
  53. if (i=compidx) then
  54. begin
  55. writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
  56. writeln(t,' writeln(''COMPFAILQ'');');
  57. writeln(t,'{$endif FPC_COMP_IS_INT64}')
  58. end;
  59. }
  60. writeln(t,' writeln(''',types[i],' called instead of ',types[j],''');');
  61. writeln(t,' writeln(''XXX'')');
  62. writeln(t,' end;');
  63. writeln(t);
  64. writeln(t,'procedure test(a: ',types[j],'); overload;');
  65. writeln(t,' begin');
  66. {
  67. if (i=compidx) then
  68. begin
  69. writeln(t,'{$ifdef FPC_COMP_IS_INT64}');
  70. writeln(t,' writeln(''COMPFAILV'');');
  71. writeln(t,'{$endif FPC_COMP_IS_INT64}')
  72. end;
  73. }
  74. writeln(t,' writeln(''',types[j],' called instead of ',types[i],''');');
  75. writeln(t,' writeln(''YYY'')');
  76. writeln(t,' end;');
  77. writeln(t);
  78. writeln(t,'var');
  79. writeln(t,' v: variant;');
  80. if (i <> low(types)) then
  81. writeln(t,' x: ',types[i],';')
  82. else
  83. writeln(t,' x: longint;');
  84. writeln(t,' y: ',types[j],';');
  85. writeln(t);
  86. writeln(t,'begin');
  87. writeln(t,' try');
  88. writeln(t,' v := x;');
  89. writeln(t,' test(v);');
  90. writeln(t,' except');
  91. writeln(t,' on E : TObject do');
  92. writeln(t,' writeln(''QQQ'');');
  93. writeln(t,' end;');
  94. writeln(t);
  95. writeln(t,' try');
  96. writeln(t,' v := y;');
  97. writeln(t,' test(v);');
  98. writeln(t,' except');
  99. writeln(t,' on E : TObject do');
  100. writeln(t,' writeln(''VVV'');');
  101. writeln(t,' end;');
  102. if ({(i=compidx) and
  103. ((j=int64idx) or
  104. (j=doubleidx)) or
  105. }
  106. ((i in [curridx,compidx,doubleidx]) and
  107. (j=extendedidx))) then
  108. begin
  109. writeln(t,'{$else}');
  110. writeln(t,'begin');
  111. if (i=doubleidx) and
  112. (j=curridx) then
  113. { compilation has to fail }
  114. writeln(t,' abc');
  115. // writeln(t,' halt(COMPFAIL);');
  116. writeln(t,'{$endif}');
  117. end;
  118. writeln(t,'end.');
  119. close(t);
  120. inc(k);
  121. end;
  122. end.