fpc/tests/test/tbopr.pp
2007-03-16 16:01:26 +00:00

195 lines
3.1 KiB
ObjectPascal

{$mode macpas}
{$r-}
{$q-}
procedure testlongintrot;
const
haltoffset = 0;
var
l : longint;
begin
l := 1;
l := brotl(l,1);
if (l <> 2) then
halt(1+haltoffset);
l := brotr(l,1);
if (l <> 1) then
halt(2+haltoffset);
l := longint($80000001);
l := brotl(l,2);
if (l <> 6) then
halt(3+haltoffset);
l := brotr(l,3);
if (l <> longint($c0000000)) then
halt(4+haltoffset);
l := brotr(l,2);
// "longint($c0000000) shr 2" is evaluated using 64 bit :/
if (l <> (longint(cardinal($c0000000) shr 2))) then
halt(5+haltoffset);
end;
procedure testcardinalrot;
const
haltoffset = 5;
var
l : cardinal;
begin
l := 1;
l := brotl(l,1);
if (l <> 2) then
halt(1+haltoffset);
l := brotr(l,1);
if (l <> 1) then
halt(2+haltoffset);
l := $80000001;
l := brotl(l,2);
if (l <> 6) then
halt(3+haltoffset);
l := brotr(l,3);
if (l <> $c0000000) then
halt(4+haltoffset);
l := brotr(l,2);
if (l <> (cardinal($c0000000) shr 2)) then
halt(5+haltoffset);
end;
procedure testint64rot;
const
haltoffset = 10;
var
l : int64;
begin
l := 1;
l := brotl(l,1);
if (l <> 2) then
halt(1+haltoffset);
l := brotr(l,1);
if (l <> 1) then
halt(2+haltoffset);
l := $80000001;
l := brotl(l,2);
if (l <> $200000004) then
halt(3+haltoffset);
l := brotr(l,3);
if (l <> int64($8000000040000000)) then
halt(4+haltoffset);
l := brotr(l,2);
if (l <> (int64($8000000040000000) shr 2)) then
halt(5+haltoffset);
end;
procedure testqwordrot;
const
haltoffset = 15;
var
l : qword;
begin
l := 1;
l := brotl(l,1);
if (l <> 2) then
halt(1+haltoffset);
l := brotr(l,1);
if (l <> 1) then
halt(2+haltoffset);
l := $80000001;
l := brotl(l,2);
if (l <> $200000004) then
halt(3+haltoffset);
l := brotr(l,3);
if (l <> qword($8000000040000000)) then
halt(4+haltoffset);
l := brotr(l,2);
if (l <> (qword($8000000040000000) shr 2)) then
halt(5+haltoffset);
end;
procedure testlongintnot;
const
haltoffset = 20;
var
l, j : longint;
begin
l := low(longint);
for j := 1 to (maxlongint div 13579) do
begin
if not(l) <> bnot(l) then
halt(haltoffset+1);
inc(l,13579*2);
end;
end;
procedure testcardinalnot;
const
haltoffset = 21;
var
l, j : cardinal;
begin
l := 0;
for j := 1 to (maxlongint div 13579) do
begin
if not(l) <> bnot(l) then
halt(haltoffset+1);
inc(l,13579*2);
end;
end;
procedure testint64not;
const
haltoffset = 22;
var
l, j : int64;
begin
l := low(int64);
j := 1;
repeat
if not(l) <> bnot(l) then
halt(haltoffset+1);
inc(l,int64(13579)*high(longint)*2);
inc(j);
until (j = (high(int64) div (int64(13579) * high(longint))));
end;
procedure testqwordnot;
const
haltoffset = 22;
var
l, j : qword;
begin
l := 0;
j := 1;
repeat
if not(l) <> bnot(l) then
halt(haltoffset+1);
inc(l,int64(13579)*high(longint)*2);
inc(j);
until (j = (high(int64) div (int64(13579) * high(longint))));
end;
begin
testlongintrot;
testcardinalrot;
testint64rot;
testqwordrot;
testlongintnot;
testcardinalnot;
testint64not;
testqwordnot;
end.