mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-12 15:09:33 +02:00
711 lines
13 KiB
PHP
711 lines
13 KiB
PHP
uses
|
|
Math;
|
|
|
|
procedure TestFail(ErrCode: LongInt); noreturn;
|
|
begin
|
|
WriteLn('FAIL on test ', ErrCode);
|
|
Halt(ErrCode);
|
|
end;
|
|
|
|
procedure TestSingle;
|
|
|
|
function Min1(a, b: Single): Single; inline;
|
|
begin
|
|
if a < b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max1(a, b: Single): Single; inline;
|
|
begin
|
|
if a > b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min2(a, b: Single): Single; inline;
|
|
begin
|
|
if a <= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max2(a, b: Single): Single; inline;
|
|
begin
|
|
if a >= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min3(a, b: Single): Single; inline;
|
|
begin
|
|
Result := b;
|
|
if a < Result then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max3(a, b: Single): Single; inline;
|
|
begin
|
|
Result := b;
|
|
if a > Result then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Min4(a, b: Single): Single; inline;
|
|
begin
|
|
Result := b;
|
|
if a <= Result then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max4(a, b: Single): Single; inline;
|
|
begin
|
|
Result := b;
|
|
if a >= Result then
|
|
Result := a;
|
|
end;
|
|
|
|
var
|
|
v1,v3,vNaN : Single;
|
|
|
|
begin
|
|
v1:=1;
|
|
v3:=3;
|
|
if Min1(1,3)<>1 then
|
|
TestFail(1);
|
|
if Max1(1,3)<>3 then
|
|
TestFail(2);
|
|
if Min2(1,3)<>1 then
|
|
TestFail(3);
|
|
if Max2(1,3)<>3 then
|
|
TestFail(4);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(5);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(6);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(7);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(8);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(11);
|
|
if Max1(1,v3)<>3 then
|
|
TestFail(12);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(13);
|
|
if Max2(1,v3)<>3 then
|
|
TestFail(14);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(15);
|
|
if Max3(1,v3)<>3 then
|
|
TestFail(16);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(17);
|
|
if Max4(1,v3)<>3 then
|
|
TestFail(18);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(21);
|
|
if Max1(1,v3)<>v3 then
|
|
TestFail(22);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(23);
|
|
if Max2(1,v3)<>v3 then
|
|
TestFail(24);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(25);
|
|
if Max3(1,v3)<>v3 then
|
|
TestFail(26);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(27);
|
|
if Max4(1,v3)<>v3 then
|
|
TestFail(28);
|
|
if Min1(v1,v3)<>v1 then
|
|
TestFail(31);
|
|
if Max1(v1,v3)<>v3 then
|
|
TestFail(32);
|
|
if Min2(v1,v3)<>v1 then
|
|
TestFail(33);
|
|
if Max2(v1,v3)<>v3 then
|
|
TestFail(34);
|
|
if Min3(v1,v3)<>v1 then
|
|
TestFail(35);
|
|
if Max3(v1,v3)<>v3 then
|
|
TestFail(36);
|
|
if Min4(v1,v3)<>v1 then
|
|
TestFail(37);
|
|
if Max4(v1,v3)<>v3 then
|
|
TestFail(38);
|
|
SetExceptionMask([exInvalidOp]);
|
|
vNaN:=NaN;
|
|
if not(IsNaN(Min1(v1,vNaN))) then
|
|
TestFail(41);
|
|
if Min1(NaN,v1)<>v1 then
|
|
TestFail(42);
|
|
if not(IsNaN(Max1(v1,vNaN))) then
|
|
TestFail(43);
|
|
if Max1(vNaN,v3)<>v3 then
|
|
TestFail(44);
|
|
if not(IsNaN(Min2(v1,vNaN))) then
|
|
TestFail(45);
|
|
if Min2(vNaN,v3)<>v3 then
|
|
TestFail(46);
|
|
if not(IsNaN(Max2(v1,vNaN))) then
|
|
TestFail(47);
|
|
if Max2(vNaN,v3)<>v3 then
|
|
TestFail(48);
|
|
if not(IsNaN(Min3(v1,vNaN))) then
|
|
TestFail(49);
|
|
if Min3(NaN,v1)<>v1 then
|
|
TestFail(50);
|
|
if not(IsNaN(Max3(v1,vNaN))) then
|
|
TestFail(51);
|
|
if Max3(vNaN,v3)<>v3 then
|
|
TestFail(52);
|
|
if not(IsNaN(Min4(v1,vNaN))) then
|
|
TestFail(53);
|
|
if Min4(vNaN,v3)<>v3 then
|
|
TestFail(54);
|
|
if not(IsNaN(Max4(v1,vNaN))) then
|
|
TestFail(55);
|
|
if Max4(vNaN,v3)<>v3 then
|
|
TestFail(56);
|
|
SetExceptionMask([]);
|
|
end;
|
|
|
|
procedure TestDouble;
|
|
|
|
function Min1(a, b: Double): Double; inline;
|
|
begin
|
|
if a < b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max1(a, b: Double): Double; inline;
|
|
begin
|
|
if a > b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min2(a, b: Double): Double; inline;
|
|
begin
|
|
if a <= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max2(a, b: Double): Double; inline;
|
|
begin
|
|
if a >= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min3(a, b: Double): Double; inline;
|
|
begin
|
|
Result := b;
|
|
if a < b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max3(a, b: Double): Double; inline;
|
|
begin
|
|
Result := b;
|
|
if a > b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Min4(a, b: Double): Double; inline;
|
|
begin
|
|
Result := b;
|
|
if a <= b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max4(a, b: Double): Double; inline;
|
|
begin
|
|
Result := b;
|
|
if a >= b then
|
|
Result := a;
|
|
end;
|
|
|
|
var
|
|
v1,v3,vNaN : Double;
|
|
|
|
begin
|
|
v1:=1;
|
|
v3:=3;
|
|
if Min1(1,3)<>1 then
|
|
TestFail(101);
|
|
if Max1(1,3)<>3 then
|
|
TestFail(102);
|
|
if Min2(1,3)<>1 then
|
|
TestFail(103);
|
|
if Max2(1,3)<>3 then
|
|
TestFail(104);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(105);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(106);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(107);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(108);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(111);
|
|
if Max1(1,v3)<>3 then
|
|
TestFail(112);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(113);
|
|
if Max2(1,v3)<>3 then
|
|
TestFail(114);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(115);
|
|
if Max3(1,v3)<>3 then
|
|
TestFail(116);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(117);
|
|
if Max4(1,v3)<>3 then
|
|
TestFail(118);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(121);
|
|
if Max1(1,v3)<>v3 then
|
|
TestFail(122);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(123);
|
|
if Max2(1,v3)<>v3 then
|
|
TestFail(124);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(125);
|
|
if Max3(1,v3)<>v3 then
|
|
TestFail(126);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(127);
|
|
if Max4(1,v3)<>v3 then
|
|
TestFail(128);
|
|
if Min1(v1,v3)<>v1 then
|
|
TestFail(131);
|
|
if Max1(v1,v3)<>v3 then
|
|
TestFail(132);
|
|
if Min2(v1,v3)<>v1 then
|
|
TestFail(133);
|
|
if Max2(v1,v3)<>v3 then
|
|
TestFail(134);
|
|
if Min3(v1,v3)<>v1 then
|
|
TestFail(135);
|
|
if Max3(v1,v3)<>v3 then
|
|
TestFail(136);
|
|
if Min4(v1,v3)<>v1 then
|
|
TestFail(137);
|
|
if Max4(v1,v3)<>v3 then
|
|
TestFail(138);
|
|
SetExceptionMask([exInvalidOp]);
|
|
vNaN:=NaN;
|
|
if not(IsNaN(Min1(v1,vNaN))) then
|
|
TestFail(141);
|
|
if Min1(NaN,v1)<>v1 then
|
|
TestFail(142);
|
|
if not(IsNaN(Max1(v1,vNaN))) then
|
|
TestFail(143);
|
|
if Max1(vNaN,v3)<>v3 then
|
|
TestFail(144);
|
|
if not(IsNaN(Min2(v1,vNaN))) then
|
|
TestFail(145);
|
|
if Min2(vNaN,v3)<>v3 then
|
|
TestFail(146);
|
|
if not(IsNaN(Max2(v1,vNaN))) then
|
|
TestFail(147);
|
|
if Max2(vNaN,v3)<>v3 then
|
|
TestFail(148);
|
|
if not(IsNaN(Min3(v1,vNaN))) then
|
|
TestFail(149);
|
|
if Min3(NaN,v1)<>v1 then
|
|
TestFail(150);
|
|
if not(IsNaN(Max3(v1,vNaN))) then
|
|
TestFail(151);
|
|
if Max3(vNaN,v3)<>v3 then
|
|
TestFail(152);
|
|
if not(IsNaN(Min4(v1,vNaN))) then
|
|
TestFail(153);
|
|
if Min4(vNaN,v3)<>v3 then
|
|
TestFail(154);
|
|
if not(IsNaN(Max4(v1,vNaN))) then
|
|
TestFail(155);
|
|
if Max4(vNaN,v3)<>v3 then
|
|
TestFail(156);
|
|
SetExceptionMask([]);
|
|
end;
|
|
|
|
|
|
procedure TestDWord;
|
|
|
|
function Min1(a, b: DWord): DWord; inline;
|
|
begin
|
|
if a < b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max1(a, b: DWord): DWord; inline;
|
|
begin
|
|
if a > b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min2(a, b: DWord): DWord; inline;
|
|
begin
|
|
if a <= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max2(a, b: DWord): DWord; inline;
|
|
begin
|
|
if a >= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min3(a, b: DWord): DWord; inline;
|
|
begin
|
|
Result := b;
|
|
if a < b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max3(a, b: DWord): DWord; inline;
|
|
begin
|
|
Result := b;
|
|
if a > b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Min4(a, b: DWord): DWord; inline;
|
|
begin
|
|
Result := b;
|
|
if a <= b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max4(a, b: Double): Double; inline;
|
|
begin
|
|
Result := b;
|
|
if a >= b then
|
|
Result := a;
|
|
end;
|
|
|
|
var
|
|
v1,v3 : DWord;
|
|
|
|
begin
|
|
v1:=1;
|
|
v3:=3;
|
|
if Min1(1,3)<>1 then
|
|
TestFail(201);
|
|
if Max1(1,3)<>3 then
|
|
TestFail(202);
|
|
if Min2(1,3)<>1 then
|
|
TestFail(203);
|
|
if Max2(1,3)<>3 then
|
|
TestFail(204);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(205);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(206);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(207);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(208);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(211);
|
|
if Max1(1,v3)<>3 then
|
|
TestFail(212);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(213);
|
|
if Max2(1,v3)<>3 then
|
|
TestFail(214);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(215);
|
|
if Max3(1,v3)<>3 then
|
|
TestFail(216);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(217);
|
|
if Max4(1,v3)<>3 then
|
|
TestFail(218);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(221);
|
|
if Max1(1,v3)<>v3 then
|
|
TestFail(222);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(223);
|
|
if Max2(1,v3)<>v3 then
|
|
TestFail(224);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(225);
|
|
if Max3(1,v3)<>v3 then
|
|
TestFail(226);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(227);
|
|
if Max4(1,v3)<>v3 then
|
|
TestFail(228);
|
|
if Min1(v1,v3)<>v1 then
|
|
TestFail(231);
|
|
if Max1(v1,v3)<>v3 then
|
|
TestFail(232);
|
|
if Min2(v1,v3)<>v1 then
|
|
TestFail(233);
|
|
if Max2(v1,v3)<>v3 then
|
|
TestFail(234);
|
|
if Min3(v1,v3)<>v1 then
|
|
TestFail(235);
|
|
if Max3(v1,v3)<>v3 then
|
|
TestFail(236);
|
|
if Min4(v1,v3)<>v1 then
|
|
TestFail(237);
|
|
if Max4(v1,v3)<>v3 then
|
|
TestFail(238);
|
|
end;
|
|
|
|
procedure TestLongint;
|
|
|
|
function Min1(a, b: Longint): Longint; inline;
|
|
begin
|
|
if a < b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max1(a, b: Longint): Longint; inline;
|
|
begin
|
|
if a > b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
function Min2(a, b: Longint): Longint; inline;
|
|
begin
|
|
if a <= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Max2(a, b: Longint): Longint; inline;
|
|
begin
|
|
if a >= b then
|
|
Result := a
|
|
else
|
|
Result := b;
|
|
end;
|
|
|
|
|
|
function Min3(a, b: Longint): Longint; inline;
|
|
begin
|
|
Result := b;
|
|
if a < b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max3(a, b: Longint): Longint; inline;
|
|
begin
|
|
Result := b;
|
|
if a > b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Min4(a, b: Longint): Longint; inline;
|
|
begin
|
|
Result := b;
|
|
if a <= b then
|
|
Result := a;
|
|
end;
|
|
|
|
|
|
function Max4(a, b: Longint): Longint; inline;
|
|
begin
|
|
Result := b;
|
|
if a >= b then
|
|
Result := a;
|
|
end;
|
|
|
|
var
|
|
v1,v3 : Longint;
|
|
|
|
begin
|
|
v1:=1;
|
|
v3:=3;
|
|
if Min1(1,3)<>1 then
|
|
TestFail(301);
|
|
if Max1(1,3)<>3 then
|
|
TestFail(302);
|
|
if Min2(1,3)<>1 then
|
|
TestFail(303);
|
|
if Max2(1,3)<>3 then
|
|
TestFail(304);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(305);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(306);
|
|
if Min3(1,3)<>1 then
|
|
TestFail(307);
|
|
if Max3(1,3)<>3 then
|
|
TestFail(308);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(311);
|
|
if Max1(1,v3)<>3 then
|
|
TestFail(312);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(313);
|
|
if Max2(1,v3)<>3 then
|
|
TestFail(314);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(315);
|
|
if Max3(1,v3)<>3 then
|
|
TestFail(316);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(317);
|
|
if Max4(1,v3)<>3 then
|
|
TestFail(318);
|
|
if Min1(1,v3)<>1 then
|
|
TestFail(321);
|
|
if Max1(1,v3)<>v3 then
|
|
TestFail(322);
|
|
if Min2(1,v3)<>1 then
|
|
TestFail(323);
|
|
if Max2(1,v3)<>v3 then
|
|
TestFail(324);
|
|
if Min3(1,v3)<>1 then
|
|
TestFail(325);
|
|
if Max3(1,v3)<>v3 then
|
|
TestFail(326);
|
|
if Min4(1,v3)<>1 then
|
|
TestFail(327);
|
|
if Max4(1,v3)<>v3 then
|
|
TestFail(328);
|
|
if Min1(v1,v3)<>v1 then
|
|
TestFail(331);
|
|
if Max1(v1,v3)<>v3 then
|
|
TestFail(332);
|
|
if Min2(v1,v3)<>v1 then
|
|
TestFail(333);
|
|
if Max2(v1,v3)<>v3 then
|
|
TestFail(334);
|
|
if Min3(v1,v3)<>v1 then
|
|
TestFail(335);
|
|
if Max3(v1,v3)<>v3 then
|
|
TestFail(336);
|
|
if Min4(v1,v3)<>v1 then
|
|
TestFail(337);
|
|
if Max4(v1,v3)<>v3 then
|
|
TestFail(338);
|
|
end;
|
|
|
|
var
|
|
v1,v3 : Longint;
|
|
|
|
function Min1: Longint; inline;
|
|
begin
|
|
if v1 < v3 then
|
|
Result := v1
|
|
else
|
|
Result := v3;
|
|
end;
|
|
|
|
|
|
function Max1: Longint; inline;
|
|
begin
|
|
if v1 > v3 then
|
|
Result := v1
|
|
else
|
|
Result := v3;
|
|
end;
|
|
|
|
var
|
|
c1 : Longint = 1;
|
|
c3 : Longint = 3;
|
|
|
|
function Min11: Longint; inline;
|
|
begin
|
|
if c1 < c3 then
|
|
Result := c1
|
|
else
|
|
Result := c3;
|
|
end;
|
|
|
|
|
|
function Max11: Longint; inline;
|
|
begin
|
|
if c1 > c3 then
|
|
Result := c1
|
|
else
|
|
Result := c3;
|
|
end;
|
|
|
|
|
|
procedure TestLongintGlobal;
|
|
|
|
begin
|
|
v1:=1;
|
|
v3:=3;
|
|
if Min1<>1 then
|
|
TestFail(1301);
|
|
if Max1<>3 then
|
|
TestFail(1302);
|
|
|
|
if Min11<>1 then
|
|
TestFail(1311);
|
|
if Max11<>3 then
|
|
TestFail(1312);
|
|
end;
|
|
|
|
|
|
begin
|
|
TestSingle;
|
|
TestDouble;
|
|
TestDWord;
|
|
TestLongint;
|
|
TestLongintGlobal;
|
|
WriteLn('ok');
|
|
end.
|