mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 22:27:57 +02:00
195 lines
3.1 KiB
ObjectPascal
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. |