uses
SysUtils;
procedure TestValSignedTooHigh;
var
I8: Int8;
I16: Int16;
I32: Int32;
I64: Int64;
Err: Integer;
begin
{$R+}
writeln('TestValSignedTooHigh: RangeCheck=ON');
try
Val('128',I8,Err);
if Err<>0 then writeln('128: Err=',Err) else writeln('128 -> ',I8,' [???]')
except
on E: ERangeError do writeln('128: RangeCheckError !!');
end;
try
Val('32768',I16,Err);
if Err<>0 then writeln('32768: Err=',Err) else writeln('32768 -> ',I16,' [???]')
except
on E: ERangeError do writeln('32768: RangeCheckError !!');
end;
try
Val('2147483648',I32,Err);
if Err<>0 then writeln('2147483648: Err=',Err) else writeln('2147483648 -> ',I32,' [???]')
except
on E: ERangeError do writeln('2147483648: RangeCheckError !!');
end;
try
Val('9223372036854775808',I64,Err);
if Err<>0 then writeln('128: Err=',Err) else writeln('9223372036854775808 -> ',I64,' [???]')
except
on E: ERangeError do writeln('9223372036854775808: RangeCheckError !!');
end;
{$R-}
writeln('TestValSignedTooHigh: RangeCheck=OFF');
try
Val('128',I8,Err);
if Err<>0 then writeln('128: Err=',Err) else writeln('128 -> ',I8,' [???]')
except
on E: ERangeError do writeln('128: RangeCheckError !!');
end;
try
Val('32768',I16,Err);
if Err<>0 then writeln('32768: Err=',Err) else writeln('32768 -> ',I16,' [???]')
except
on E: ERangeError do writeln('32768: RangeCheckError !!');
end;
try
Val('2147483648',I32,Err);
if Err<>0 then writeln('2147483648: Err=',Err) else writeln('2147483648 -> ',I32,' [???]')
except
on E: ERangeError do writeln('2147483648: RangeCheckError !!');
end;
try
Val('9223372036854775808',I64,Err);
if Err<>0 then writeln('128: Err=',Err) else writeln('9223372036854775808 -> ',I64,' [???]')
except
on E: ERangeError do writeln('9223372036854775808: RangeCheckError !!');
end;
end;
procedure TestValSignedTooLow;
var
I8: Int8;
I16: Int16;
I32: Int32;
I64: Int64;
Err: Integer;
begin
{$R+}
writeln('TestValSignedTooLow: RangeCheck=ON');
try
Val('-129',I8,Err);
if Err<>0 then writeln('-129: Err=',Err) else writeln('129 -> ',I8,' [???]')
except
on E: ERangeError do writeln('-129: RangeCheckError !!');
end;
try
Val('-32769',I16,Err);
if Err<>0 then writeln('-32769: Err=',Err) else writeln('-32769 -> ',I16,' [???]')
except
on E: ERangeError do writeln('-32768: RangeCheckError !!');
end;
try
Val('-2147483649',I32,Err);
if Err<>0 then writeln('-2147483649: Err=',Err) else writeln('-2147483649 -> ',I32,' [???]')
except
on E: ERangeError do writeln('-2147483649: RangeCheckError !!');
end;
try
Val('-9223372036854775809',I64,Err);
if Err<>0 then writeln('-9223372036854775809: Err=',Err) else writeln('-9223372036854775809 -> ',I64,' [???]')
except
on E: ERangeError do writeln('-9223372036854775809: RangeCheckError !!');
end;
{$R-}
writeln('TestValSignedTooLow: RangeCheck=OFF');
try
Val('-129',I8,Err);
if Err<>0 then writeln('-129: Err=',Err) else writeln('129 -> ',I8,' [???]')
except
on E: ERangeError do writeln('-129: RangeCheckError !!');
end;
try
Val('-32769',I16,Err);
if Err<>0 then writeln('-32769: Err=',Err) else writeln('-32769 -> ',I16,' [???]')
except
on E: ERangeError do writeln('-32768: RangeCheckError !!');
end;
try
Val('-2147483649',I32,Err);
if Err<>0 then writeln('-2147483649: Err=',Err) else writeln('-2147483649 -> ',I32,' [???]')
except
on E: ERangeError do writeln('-2147483649: RangeCheckError !!');
end;
try
Val('-9223372036854775809',I64,Err);
if Err<>0 then writeln('-9223372036854775809: Err=',Err) else writeln('-9223372036854775809 -> ',I64,' [???]')
except
on E: ERangeError do writeln('-9223372036854775809: RangeCheckError !!');
end;
end;
begin
{$ifdef cpu32}
writeln('32-bit CPU');
{$endif}
{$ifdef cpu64}
writeln('64-bit CPU');
{$endif}
TestValSignedTooHigh;
writeln;
TestValSignedTooLow;
writeln;
end.