mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 20:39:13 +02:00
+ added binarytrees benchmark
git-svn-id: trunk@4864 -
This commit is contained in:
parent
0c5124c295
commit
1117a58f9f
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -5103,6 +5103,7 @@ tests/bench/drystone.pas svneol=native#text/plain
|
|||||||
tests/bench/pi.c -text
|
tests/bench/pi.c -text
|
||||||
tests/bench/pi.pp svneol=native#text/plain
|
tests/bench/pi.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/README.txt svneol=native#text/plain
|
tests/bench/shootout/README.txt svneol=native#text/plain
|
||||||
|
tests/bench/shootout/io/binarytrees-output.txt svneol=native#text/plain
|
||||||
tests/bench/shootout/io/moments.in -text
|
tests/bench/shootout/io/moments.in -text
|
||||||
tests/bench/shootout/io/moments.out -text
|
tests/bench/shootout/io/moments.out -text
|
||||||
tests/bench/shootout/io/recursive-output.txt svneol=native#text/plain
|
tests/bench/shootout/io/recursive-output.txt svneol=native#text/plain
|
||||||
@ -5148,6 +5149,7 @@ tests/bench/shootout/obsolete/strcat.pp svneol=native#text/plain
|
|||||||
tests/bench/shootout/obsolete/takfp.pp svneol=native#text/plain
|
tests/bench/shootout/obsolete/takfp.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/obsolete/wc.pp svneol=native#text/plain
|
tests/bench/shootout/obsolete/wc.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/src/bench.c -text
|
tests/bench/shootout/src/bench.c -text
|
||||||
|
tests/bench/shootout/src/binarytrees.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/src/hello.pp svneol=native#text/plain
|
tests/bench/shootout/src/hello.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/src/nsieve.pp svneol=native#text/plain
|
tests/bench/shootout/src/nsieve.pp svneol=native#text/plain
|
||||||
tests/bench/shootout/src/recursive.pp svneol=native#text/plain
|
tests/bench/shootout/src/recursive.pp svneol=native#text/plain
|
||||||
|
6
tests/bench/shootout/io/binarytrees-output.txt
Normal file
6
tests/bench/shootout/io/binarytrees-output.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
stretch tree of depth 11 check: -1
|
||||||
|
2048 trees of depth 4 check: -2048
|
||||||
|
512 trees of depth 6 check: -512
|
||||||
|
128 trees of depth 8 check: -128
|
||||||
|
32 trees of depth 10 check: -32
|
||||||
|
long lived tree of depth 10 check: -1
|
91
tests/bench/shootout/src/binarytrees.pp
Normal file
91
tests/bench/shootout/src/binarytrees.pp
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
{ The Great Computer Language Shootout
|
||||||
|
http://shootout.alioth.debian.org
|
||||||
|
|
||||||
|
contributed by Ales Katona
|
||||||
|
}
|
||||||
|
|
||||||
|
program BinaryTrees;
|
||||||
|
|
||||||
|
{$mode objfpc}
|
||||||
|
|
||||||
|
type
|
||||||
|
PNode = ^TNode;
|
||||||
|
TNode = record
|
||||||
|
l, r: PNode;
|
||||||
|
i: Longint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CreateNode(l2, r2: PNode; const i2: Longint): PNode;
|
||||||
|
begin
|
||||||
|
Result := GetMem(SizeOf(TNode));
|
||||||
|
Result^.l:=l2;
|
||||||
|
Result^.r:=r2;
|
||||||
|
Result^.i:=i2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure DestroyNode(ANode: PNode);
|
||||||
|
begin
|
||||||
|
if ANode^.l <> nil then begin
|
||||||
|
DestroyNode(ANode^.l);
|
||||||
|
DestroyNode(ANode^.r);
|
||||||
|
end;
|
||||||
|
FreeMem(ANode, SizeOf(TNode));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CheckNode(ANode: PNode): Longint;
|
||||||
|
begin
|
||||||
|
if ANode^.l = nil then
|
||||||
|
Result:=ANode^.i
|
||||||
|
else
|
||||||
|
Result:=CheckNode(ANode^.l) + ANode^.i - CheckNode(ANode^.r);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Make(i, d: Longint): PNode;
|
||||||
|
begin
|
||||||
|
if d = 0 then Result:=CreateNode(nil, nil, i)
|
||||||
|
else Result:=CreateNode(Make(2 * i - 1, d - 1), Make(2 * i, d - 1), i);
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
mind = 4;
|
||||||
|
|
||||||
|
var
|
||||||
|
maxd : Longint = 10;
|
||||||
|
strd,
|
||||||
|
iter,
|
||||||
|
c, d, i : Longint;
|
||||||
|
tree, llt : PNode;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 1 then
|
||||||
|
Val(ParamStr(1), maxd);
|
||||||
|
|
||||||
|
if maxd < mind+2 then
|
||||||
|
maxd := mind + 2;
|
||||||
|
|
||||||
|
strd:=maxd + 1;
|
||||||
|
tree:=Make(0, strd);
|
||||||
|
Writeln('stretch tree of depth ', strd, #9' check: ', CheckNode(tree));
|
||||||
|
DestroyNode(tree);
|
||||||
|
|
||||||
|
llt:=Make(0, maxd);
|
||||||
|
|
||||||
|
d:=mind;
|
||||||
|
while d <= maxd do begin
|
||||||
|
iter:=1 shl (maxd - d + mind);
|
||||||
|
c:=0;
|
||||||
|
for i:=1 to Iter do begin
|
||||||
|
tree:=Make(i, d);
|
||||||
|
c:=c + CheckNode(tree);
|
||||||
|
DestroyNode(tree);
|
||||||
|
tree:=Make(-i, d);
|
||||||
|
c:=c + CheckNode(tree);
|
||||||
|
DestroyNode(tree);
|
||||||
|
end;
|
||||||
|
Writeln(2 * Iter, #9' trees of depth ', d, #9' check: ', c);
|
||||||
|
Inc(d, 2);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Writeln('long lived tree of depth ', maxd, #9' check: ', CheckNode(llt));
|
||||||
|
DestroyNode(llt);
|
||||||
|
end.
|
@ -1,41 +1,41 @@
|
|||||||
{ Sieve of Erathostenes }
|
{ The Computer Language Shootout
|
||||||
|
http://shootout.alioth.debian.org
|
||||||
|
|
||||||
program sieve;
|
contributed by Joost van der Sluis
|
||||||
uses SysUtils;
|
}
|
||||||
|
|
||||||
var
|
program nsieve;
|
||||||
NUM, i, k, count : integer;
|
|
||||||
flags : array[0..8192] of integer;
|
{$mode objfpc}
|
||||||
|
|
||||||
|
var n : integer;
|
||||||
|
|
||||||
|
procedure primes(n : integer); inline;
|
||||||
|
var flags : array of boolean;
|
||||||
|
size,i,j,count : integer;
|
||||||
|
begin
|
||||||
|
size := 10000 shl n;
|
||||||
|
SetLength(flags, size+1);
|
||||||
|
for i := 2 to size do flags[i] := true;
|
||||||
|
//fillchar(flags[0],length(flags),ord(true));
|
||||||
|
count := 0;
|
||||||
|
for i := 2 to size do
|
||||||
|
if flags[i] then
|
||||||
|
begin
|
||||||
|
count := count + 1;
|
||||||
|
j := i + i;
|
||||||
|
while j <= size do begin
|
||||||
|
// flags[j] := false;
|
||||||
|
if flags[j] then flags[j] := false;
|
||||||
|
j := j + i;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
writeln('Primes up to', size:9, count:9);
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
if ParamCount = 0 then
|
val(ParamStr(1), n);
|
||||||
NUM := 1
|
primes(n);
|
||||||
else
|
primes(n-1);
|
||||||
NUM := StrToInt(ParamStr(1));
|
primes(n-2);
|
||||||
|
end.
|
||||||
if NUM < 1 then NUM := 1;
|
|
||||||
|
|
||||||
while NUM > 0 do
|
|
||||||
begin
|
|
||||||
Dec(NUM);
|
|
||||||
count := 0;
|
|
||||||
for i := 0 to 8192 do
|
|
||||||
begin
|
|
||||||
flags[i] := i;
|
|
||||||
end;
|
|
||||||
for i := 2 to 8192 do
|
|
||||||
begin
|
|
||||||
if flags[i] <> -1 then
|
|
||||||
begin
|
|
||||||
k := i+i;
|
|
||||||
while k <= 8192 do
|
|
||||||
begin
|
|
||||||
flags[k] := -1;
|
|
||||||
Inc(k, i);
|
|
||||||
end;
|
|
||||||
Inc(count);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
WriteLn('Count: ' + IntToStr(Count));
|
|
||||||
end.
|
|
Loading…
Reference in New Issue
Block a user