Новые примеры - тесты StrToInt

This commit is contained in:
Mikhalkovich Stanislav 2026-04-29 15:40:41 +03:00
parent 83ec52d6e8
commit b9f6e31958
2 changed files with 176 additions and 0 deletions

View file

@ -0,0 +1,96 @@
 // Исправлены ошибки в StrToInt
procedure TestOK(s: string; expected: integer);
begin
var x := StrToInt(s);
if x <> expected then
raise new Exception($'FAIL OK: "{s}" → {x}, expected {expected}');
end;
procedure TestFormat(s: string);
begin
try
var x := StrToInt(s);
raise new Exception($'FAIL Format: "{s}" → {x}, expected FormatException');
except
on e: System.FormatException do ;
on e: Exception do
raise new Exception($'FAIL Format: "{s}" → wrong exception type: {e.GetType}');
end;
end;
procedure TestOverflow(s: string);
begin
try
var x := StrToInt(s);
raise new Exception($'FAIL Overflow: "{s}" → {x}, expected OverflowException');
except
on e: System.OverflowException do ;
on e: Exception do
raise new Exception($'FAIL Overflow: "{s}" → wrong exception type: {e.GetType}');
end;
end;
begin
// --- helpers ---
// --- basic ---
TestOK('0', 0);
TestOK('5', 5);
TestOK('123', 123);
TestOK('000123', 123);
// --- signs ---
TestOK('+123', 123);
TestOK('-123', -123);
TestOK('+0', 0);
TestOK('-0', 0);
// --- whitespace ---
TestOK(' 123', 123);
TestOK('123 ', 123);
TestOK(' 123 ', 123);
TestOK(' -42 ', -42);
// --- boundaries ---
TestOK('2147483647', 2147483647);
TestOK('-2147483648', -2147483648);
// --- near boundaries ---
TestOK('2147483646', 2147483646);
TestOK('-2147483647', -2147483647);
// --- overflow ---
TestOverflow('2147483648');
TestOverflow('2147483649');
TestOverflow('-2147483649');
TestOverflow('-9999999999');
TestOverflow('9999999999');
// --- format errors ---
TestFormat('');
TestFormat(' ');
TestFormat('+');
TestFormat('-');
TestFormat('abc');
TestFormat('12a');
TestFormat('a12');
TestFormat('++1');
TestFormat('--1');
TestFormat('+-1');
// --- trailing garbage ---
TestFormat('123abc');
TestFormat('123 abc');
// --- internal spaces ---
TestFormat('1 23');
TestFormat('- 123');
// --- edge tricky ---
TestOK('0000000000', 0);
TestOK('0000000001', 1);
TestFormat(' + 1');
Println('All tests passed');
end.

View file

@ -0,0 +1,80 @@
// Сравнение StrToInt с Int32.Parse
begin
var tests := [
// --- OK ---
'0', '5', '123', '000123',
'+123', '-123', '+0', '-0',
' 123', '123 ', ' 123 ', ' -42 ',
'2147483647', '-2147483648',
'2147483646', '-2147483647',
'0000000000', '0000000001',
// --- Overflow ---
'2147483648', '2147483649',
'-2147483649', '-9999999999', '9999999999',
// --- Format ---
'', ' ', '+', '-',
'abc', '12a', 'a12',
'++1', '--1', '+-1',
'123abc', '123 abc',
'1 23', '- 123', ' + 1'
];
foreach var s in tests do
begin
var ok1 := true;
var ok2 := true;
var r1 := 0;
var r2 := 0;
var e1: Exception := nil;
var e2: Exception := nil;
// --- StrToInt ---
try
r1 := StrToInt(s);
except
on e: Exception do
begin
ok1 := false;
e1 := e;
end;
end;
// --- Int32.Parse ---
try
r2 := System.Int32.Parse(s);
except
on e: Exception do
begin
ok2 := false;
e2 := e;
end;
end;
// --- сравнение ---
if ok1 and ok2 then
begin
if r1 <> r2 then
raise new Exception($'FAIL value: "{s}" → {r1} vs {r2}');
end
else if (not ok1) and (not ok2) then
begin
if e1.GetType <> e2.GetType then
raise new Exception($'FAIL exception: "{s}" → {e1.GetType} vs {e2.GetType}');
end
else
begin
if ok1 then
raise new Exception($'FAIL mismatch: "{s}" → StrToInt={r1}, Parse throws {e2.GetType}')
else
raise new Exception($'FAIL mismatch: "{s}" → StrToInt throws {e1.GetType}, Parse={r2}');
end;
end;
Println('All tests matched Int32.Parse');
end.