fpc/tests/test/tthlp4.pp
2020-09-30 19:20:14 +00:00

64 lines
1.5 KiB
ObjectPascal

{ %OPT=-Oonofastmath }
{ this tests that the correct helper is used for constants }
program tthlp4;
{$mode objfpc}
{$apptype console}
uses
uthlp;
procedure TestResult(aActual, aExpected, aError: LongInt);
begin
if aActual <> aExpected then begin
Writeln('Expected: ', aExpected, ' got: ', aActual, ' error: ', aError);
Halt(aError);
end;
end;
var
ml: MyLongInt;
begin
Writeln('Ordinal constants');
TestResult(2.Test, -1, 1);
TestResult(-2.Test, -1, 2);
TestResult(200.Test, 1, 3);
TestResult(-200.Test, -2, 4);
TestResult(40000.Test, 2, 5);
TestResult(-20000.Test, -2, 6);
TestResult(-40000.Test, -4, 7);
TestResult(70000.Test, -4, 8);
TestResult(3000000000.Test, 4, 9);
TestResult($1ffffffff.Test, -8, 10);
TestResult($1fffffffffffffff.Test, -8, 11);
Writeln('Float constants');
TestResult(1.25.Test, 4, 12);
{$if sizeof(Extended) = sizeof(Double)}
TestResult(1.25e10.Test, 8, 14);
{$else}
TestResult(1.25e10.Test, 10, 14);
{$endif}
Writeln('Boolean constants');
TestResult(True.Test, 1, 15);
TestResult(False.Test, 1, 16);
Writeln('String constants');
TestResult('ShortString'.Test, 1, 17);
TestResult('UnicodeString'#1234.Test, 4, 18);
Writeln('Misc constants');
TestResult(Nil.Test, 1, 19);
TestResult(teOne.Test, 1, 20);
TestResult('a'.Test, - 1, 21);
TestResult(#1234.Test, - 2, 22);
{$push}
{$T-}
// => Pointer
TestResult((@ml).Test, 1, 23);
{$T+}
// => Pointer as well
TestResult((@ml).Test, 1, 24);
{$pop}
Writeln('OK');
end.