mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 04:19:27 +02:00
341 lines
5.4 KiB
ObjectPascal
341 lines
5.4 KiB
ObjectPascal
{ Program to test Code generator secondadd() }
|
|
{ with longint values }
|
|
{ FUNCTIONAL PRE-REQUISITES: }
|
|
{ - assignments function correctly. }
|
|
{ - if statements function correctly. }
|
|
{ - subroutine calls function correctly. }
|
|
|
|
{$R-}
|
|
{$Q-}
|
|
|
|
procedure fail;
|
|
begin
|
|
WriteLn('Failed!');
|
|
halt(1);
|
|
end;
|
|
|
|
|
|
procedure LongintTestAdd;
|
|
var
|
|
i: longint;
|
|
j: longint;
|
|
result : boolean;
|
|
begin
|
|
Write('Longint + Longint test...');
|
|
result := true;
|
|
i:=0;
|
|
j:=0;
|
|
i := i + -10000;
|
|
if i <> -10000 then
|
|
result := false;
|
|
j := 32767;
|
|
i := i + j;
|
|
if i <> 22767 then
|
|
result := false;
|
|
i := i + j + 50000;
|
|
if i <> 105534 then
|
|
result := false;
|
|
i:=0;
|
|
j:=10000;
|
|
i:= i + j + j + i + j;
|
|
if i <> 30000 then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
|
|
procedure LongintTestSub;
|
|
var
|
|
i, j, k : longint;
|
|
result : boolean;
|
|
begin
|
|
Write('Longint - Longint test...');
|
|
result := true;
|
|
i:=100000;
|
|
j:=54;
|
|
k:=56;
|
|
i:= i - 100;
|
|
if i <> 99900 then
|
|
result := false;
|
|
i := i - j - k - 100;
|
|
if i <> 99690 then
|
|
result := false;
|
|
i:=100;
|
|
j:=1000;
|
|
k:=100;
|
|
i:= j - i - k;
|
|
if i <> 800 then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
|
|
procedure LongintTestMul;
|
|
var
|
|
i : longint;
|
|
j : longint;
|
|
k: longint;
|
|
result: boolean;
|
|
begin
|
|
Write('Longint * Longint test...');
|
|
result := true;
|
|
i:=0;
|
|
j:=0;
|
|
i:=i * 32;
|
|
if i <> 0 then
|
|
result := false;
|
|
i:=10;
|
|
i:=i * -16;
|
|
if i <> -160 then
|
|
result := false;
|
|
j:=10000;
|
|
i:=-10000;
|
|
i:=i * j;
|
|
if i <> -100000000 then
|
|
result := false;
|
|
i:=1;
|
|
j:=10;
|
|
k:=16;
|
|
i := i * j * k;
|
|
if i <> 160 then
|
|
result := false;
|
|
i := 1;
|
|
j := 10;
|
|
k := 16;
|
|
i := i * 10 * j * i * j * 16 * k;
|
|
if i <> 256000 then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
procedure LongintTestXor;
|
|
var
|
|
i, j : Longint;
|
|
result : boolean;
|
|
begin
|
|
Write('Longint XOR Longint test...');
|
|
result := true;
|
|
i := 0;
|
|
j := 0;
|
|
i := i xor $1000001;
|
|
if i <> $1000001 then
|
|
result := false;
|
|
i:=0;
|
|
j:=$10000001;
|
|
i:=i xor j;
|
|
if i <> $10000001 then
|
|
result := false;
|
|
|
|
i := 0;
|
|
j := $55555555;
|
|
i := i xor j xor $AAAAAAAA;
|
|
if i <> longint($FFFFFFFF) then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
|
|
procedure LongintTestOr;
|
|
var
|
|
i,j : Longint;
|
|
result : boolean;
|
|
Begin
|
|
Write('Longint OR Longint test...');
|
|
result := true;
|
|
i := 0;
|
|
j := 0;
|
|
i := i or $1000001;
|
|
if i <> $1000001 then
|
|
result := false;
|
|
i:=0;
|
|
j:=$10000001;
|
|
i:=i or j;
|
|
if i <> $10000001 then
|
|
result := false;
|
|
|
|
i := 0;
|
|
j := $55555555;
|
|
i := i or j or longint($AAAAAAAA);
|
|
if i <> longint($FFFFFFFF) then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
|
|
|
|
procedure LongintTestAnd;
|
|
var
|
|
i,j : Longint;
|
|
result : boolean;
|
|
Begin
|
|
Write('Longint AND Longint test...');
|
|
result := true;
|
|
i := $1000001;
|
|
j := 0;
|
|
i := i and $1000001;
|
|
if i <> $1000001 then
|
|
result := false;
|
|
i:=0;
|
|
j:=$10000001;
|
|
i:=i and j;
|
|
if i <> 0 then
|
|
result := false;
|
|
|
|
i := longint($FFFFFFFF);
|
|
j := $55555555;
|
|
i := i and j;
|
|
if i <> $55555555 then
|
|
result := false;
|
|
i := longint($FFFFFFFF);
|
|
i := i and longint($AAAAAAAA);
|
|
if i <> longint($AAAAAAAA) then
|
|
result := false;
|
|
|
|
i := 0;
|
|
j := $55555555;
|
|
i := i and j and longint($AAAAAAAA);
|
|
if i <> 0 then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
procedure LongintTestEqual;
|
|
var
|
|
i,j : Longint;
|
|
result : boolean;
|
|
Begin
|
|
Write('Longint = Longint test...');
|
|
result := true;
|
|
i := $1000001;
|
|
j := 0;
|
|
if i = 0 then
|
|
result := false;
|
|
if i = j then
|
|
result := false;
|
|
if j = i then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
|
|
procedure LongintTestNotEqual;
|
|
var
|
|
i,j : Longint;
|
|
result : boolean;
|
|
Begin
|
|
Write('Longint <> Longint test...');
|
|
result := true;
|
|
i := $1000001;
|
|
j := $1000001;
|
|
if i <> $1000001 then
|
|
result := false;
|
|
if i <> j then
|
|
result := false;
|
|
if j <> i then
|
|
result := false;
|
|
if not result then
|
|
Fail
|
|
else
|
|
WriteLn('Success.');
|
|
end;
|
|
|
|
procedure LongintTestLE;
|
|
var
|
|
i, j: Longint;
|
|
result : boolean;
|
|
begin
|
|
Write('Longint <= Longint test...');
|
|
result := true;
|
|
i := -1;
|
|
j := -2;
|
|
if i <= j then
|
|
result := false;
|
|
i := -2;
|
|
j := $FFFF;
|
|
if i >= j then
|
|
result := false;
|
|
i := longint($FFFFFFFF);
|
|
if i <= longint($FFFFFFFE) then
|
|
result := false;
|
|
j := longint($FFFFFFFF);
|
|
if i <= j then
|
|
begin
|
|
if result then
|
|
WriteLn('Success.')
|
|
else
|
|
Fail;
|
|
end
|
|
else
|
|
Fail;
|
|
end;
|
|
|
|
|
|
procedure LongintTestGE;
|
|
var
|
|
i, j: Longint;
|
|
result : boolean;
|
|
begin
|
|
Write('Longint >= Longint test...');
|
|
result := true;
|
|
i := longint($FFFFFFFE);
|
|
j := longint($FFFFFFFF);
|
|
if i >= j then
|
|
result := false;
|
|
i := longint($FFFFFFFE);
|
|
j := longint($FFFFFFFF);
|
|
if i > j then
|
|
result := false;
|
|
i := longint($FFFFFFFE);
|
|
if i > longint($FFFFFFFE) then
|
|
result := false;
|
|
i := longint($FFFFFFFF);
|
|
j := longint($FFFFFFFF);
|
|
if i >= j then
|
|
begin
|
|
if result then
|
|
WriteLn('Success.')
|
|
else
|
|
Fail;
|
|
end
|
|
else
|
|
Fail;
|
|
end;
|
|
|
|
|
|
|
|
Begin
|
|
{ These should be tested first, since if they do not }
|
|
{ work, they will false all other results. }
|
|
LongintTestEqual;
|
|
LongintTestNotEqual;
|
|
LongintTestAdd;
|
|
LongintTestMul;
|
|
LongintTestOr;
|
|
LongintTestAnd;
|
|
LongintTestXor;
|
|
LongintTestLe;
|
|
LongintTestGe;
|
|
LongintTestSub;
|
|
end.
|