fpc/tests/webtbs/tw12214.pp
2008-09-25 19:15:54 +00:00

39 lines
1.1 KiB
ObjectPascal

{$mode objfpc}
program test_raise;
uses Math;
var
X, Y: double;
I: Integer;
SomeFloat, SomeOtherFloat: Double;
begin
X := -10.0;
SomeFloat := 1.0; { any value }
SomeOtherFloat := 1.0; { any value }
for I := 0 to 20 do
begin
{ This line does *any* valid float operation, just to show that
floating-point exception (that should be raised, catched and silenced
by try..except below) somehow arrived here. }
SomeFloat := I * SomeOtherFloat;
try
{ Any invalid fp operation. Tested on Sqrt(-10.0), Ln(-10.0).
I use variable X to trick FPC into calculating this at run-time,
otherwise "Error: Illegal constant passed to internal math function". }
Y := Sqrt(X);
ClearExceptions(false);
except
Writeln('silenced exception');
{ Here I silence eventual exception raised by ClearExceptions.
(Yes, I could just do ClearExceptions(false) do achieve the same,
but imagine that this is embedded in some complicated code
where I really want to raise exception to jump outside
in case of problems.) }
end;
end;
end.