mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 00:49:09 +02:00
+ Initial import
This commit is contained in:
parent
9bc0ec8619
commit
2989b11b9d
23
tests/bench/shootout/src/ackerm.pp
Normal file
23
tests/bench/shootout/src/ackerm.pp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{ Ackermann's Function }
|
||||||
|
program ackermann;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
function Ack(M, N : integer) : integer;
|
||||||
|
begin
|
||||||
|
if M = 0 then Ack := N+1
|
||||||
|
else if N = 0 then Ack := Ack(M-1, 1)
|
||||||
|
else Ack := Ack(M-1, Ack(M, N-1))
|
||||||
|
End;
|
||||||
|
|
||||||
|
var NUM, a : integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
a := Ack(3, NUM);
|
||||||
|
WriteLn( 'Ack(3,' + IntToStr(NUM) + '): ' + IntToStr(a) );
|
||||||
|
end.
|
38
tests/bench/shootout/src/array.pp
Normal file
38
tests/bench/shootout/src/array.pp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{ Array Access }
|
||||||
|
|
||||||
|
Program ary3;
|
||||||
|
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
var
|
||||||
|
n, i, k, last : longint;
|
||||||
|
X, Y : TList;
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
n := 1
|
||||||
|
else
|
||||||
|
n := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if n < 1 then n := 1;
|
||||||
|
|
||||||
|
last := n - 1;
|
||||||
|
X := TList.Create;
|
||||||
|
X.Capacity := n;
|
||||||
|
For i := 0 To last do
|
||||||
|
X.Add( Pointer(i+1) );
|
||||||
|
|
||||||
|
Y := TList.Create;
|
||||||
|
Y.Capacity := n;
|
||||||
|
For i := 0 To last do
|
||||||
|
Y.Add( Pointer(0) );
|
||||||
|
|
||||||
|
|
||||||
|
For k := 0 To 999 do
|
||||||
|
begin
|
||||||
|
For i := last downto 0 do
|
||||||
|
begin
|
||||||
|
Y.Items[i] := Pointer(longint(Y.Items[i]) + longint(X.Items[i]));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Writeln (IntToStr(longint(Y.Items[0])), ' ', IntToStr(longint(Y.Items[last])));
|
||||||
|
end.
|
25
tests/bench/shootout/src/fibo.pp
Normal file
25
tests/bench/shootout/src/fibo.pp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ Fibonacci Numbers }
|
||||||
|
|
||||||
|
program fibo;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
function fib(N : integer) : longint;
|
||||||
|
begin
|
||||||
|
if N < 2 then fib := 1
|
||||||
|
else fib := fib(N-2) + fib(N-1);
|
||||||
|
End;
|
||||||
|
|
||||||
|
var
|
||||||
|
NUM : integer;
|
||||||
|
f : longint;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
f := fib(NUM);
|
||||||
|
WriteLn( IntToStr(f) );
|
||||||
|
end.
|
131
tests/bench/shootout/src/hash.pp
Normal file
131
tests/bench/shootout/src/hash.pp
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
{ Hash (Associative Array) Access }
|
||||||
|
{$mode objfpc}
|
||||||
|
|
||||||
|
Program hash;
|
||||||
|
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
|
||||||
|
type
|
||||||
|
THashEntryPtr = ^THashEntryRec;
|
||||||
|
THashEntryRec = record
|
||||||
|
name : string;
|
||||||
|
number : longint;
|
||||||
|
next : THashEntryPtr;
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
TABLE_SIZE = 100000;
|
||||||
|
|
||||||
|
type THash = class
|
||||||
|
private
|
||||||
|
hashtable : array[0..TABLE_SIZE - 1] of THashEntryRec;
|
||||||
|
function hash(s : string) : longint;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
function store(name : string; number : longint; var error : longint)
|
||||||
|
: boolean;
|
||||||
|
function fetch(name : string; var number : longint) : boolean;
|
||||||
|
function exists(name : string) : boolean;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor THash.Create;
|
||||||
|
var
|
||||||
|
i : longint;
|
||||||
|
begin
|
||||||
|
for i := 0 to TABLE_SIZE - 1 do
|
||||||
|
hashtable[i].next := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function THash.hash(s : string) : longint;
|
||||||
|
var
|
||||||
|
i, j : longint;
|
||||||
|
begin
|
||||||
|
if length(s) = 0 then Result := 0
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
j := ord(s[1]) mod TABLE_SIZE;
|
||||||
|
for i := 2 to length(s) do
|
||||||
|
j := (j shl 8 + ord(s[i])) mod TABLE_SIZE;
|
||||||
|
Result := j;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THash.store(name : string; number : longint; var error : longint) :
|
||||||
|
boolean;
|
||||||
|
var
|
||||||
|
node, prev : THashEntryPtr;
|
||||||
|
begin
|
||||||
|
error := 0;
|
||||||
|
|
||||||
|
prev := @hashtable[hash(name)];
|
||||||
|
node := prev^.next;
|
||||||
|
|
||||||
|
while (node <> nil) and (node^.name <> name) do
|
||||||
|
begin
|
||||||
|
prev := node;
|
||||||
|
node := node^.next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if node <> nil then error := 1
|
||||||
|
else begin
|
||||||
|
new(prev^.next);
|
||||||
|
node := prev^.next;
|
||||||
|
if node = nil then error := -1
|
||||||
|
else begin
|
||||||
|
node^.name := name;
|
||||||
|
node^.number := number;
|
||||||
|
node^.next := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Result := error = 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THash.fetch(name : string; var number : longint) : boolean;
|
||||||
|
var
|
||||||
|
node : THashEntryPtr;
|
||||||
|
begin
|
||||||
|
node := hashtable[hash(name)].next;
|
||||||
|
while (node <> nil) and (node^.name <> name) do
|
||||||
|
node := node^.next;
|
||||||
|
if node <> nil then number := node^.number;
|
||||||
|
Result := node <> nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function THash.exists(name : string) : boolean;
|
||||||
|
var
|
||||||
|
node : THashEntryPtr;
|
||||||
|
begin
|
||||||
|
node := hashtable[hash(name)].next;
|
||||||
|
while (node <> nil) and (node^.name <> name) do
|
||||||
|
node := node^.next;
|
||||||
|
Result := node <> nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
n, i, c, err : longint;
|
||||||
|
X : THash;
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
n := 1
|
||||||
|
else
|
||||||
|
n := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if n < 1 then n := 1;
|
||||||
|
|
||||||
|
X := THash.Create();
|
||||||
|
|
||||||
|
For i := 1 To n do
|
||||||
|
X.store( Format('%x', [i]), i, err );
|
||||||
|
|
||||||
|
c := 0;
|
||||||
|
For i:= n downto 1 do
|
||||||
|
begin
|
||||||
|
if X.exists( IntToStr(i) ) Then Inc(c);
|
||||||
|
end;
|
||||||
|
|
||||||
|
Writeln (IntToStr(c));
|
||||||
|
end.
|
126
tests/bench/shootout/src/heapsort.pp
Normal file
126
tests/bench/shootout/src/heapsort.pp
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
{ Heapsort }
|
||||||
|
|
||||||
|
program heapsort;
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
const
|
||||||
|
IM = 139968;
|
||||||
|
IA = 3877;
|
||||||
|
IC = 29573;
|
||||||
|
|
||||||
|
var
|
||||||
|
ary: TList;
|
||||||
|
r : real;
|
||||||
|
rr : ^real;
|
||||||
|
N, i, LAST : longint;
|
||||||
|
|
||||||
|
function gen_random(n : longint) : real;
|
||||||
|
begin
|
||||||
|
LAST := (LAST * IA + IC) mod IM;
|
||||||
|
gen_random := n * LAST / IM;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure myheapsort(n : longint; var ra : TList);
|
||||||
|
var
|
||||||
|
rr : ^real;
|
||||||
|
rra : real;
|
||||||
|
i, j, l, ir : longint;
|
||||||
|
begin
|
||||||
|
rra := 0;
|
||||||
|
i := 0;
|
||||||
|
j := 0;
|
||||||
|
l := n shr 1 + 1;
|
||||||
|
ir := n;
|
||||||
|
|
||||||
|
while 1 = 1 do
|
||||||
|
begin
|
||||||
|
if l > 1 then begin
|
||||||
|
Dec(l);
|
||||||
|
rra := real(ra.Items[l]^);
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
rra := real(ra.Items[ir]^);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GetMem(rr, SizeOf(real));
|
||||||
|
rr^ := real(ra.Items[1]^);
|
||||||
|
ra.items[ir] := rr;
|
||||||
|
|
||||||
|
|
||||||
|
Dec(ir);
|
||||||
|
if ir = 1 then
|
||||||
|
begin
|
||||||
|
|
||||||
|
|
||||||
|
GetMem(rr, SizeOf(real));
|
||||||
|
rr^ := rra;
|
||||||
|
ra.items[1] := rr;
|
||||||
|
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
i := l;
|
||||||
|
j := l shl 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
while j <= ir do begin
|
||||||
|
if (j < ir) and (real(ra.items[j]^) < real(ra.items[j+1]^)) then
|
||||||
|
Inc(j);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if rra < real(ra.items[j]^) then begin
|
||||||
|
|
||||||
|
|
||||||
|
GetMem(rr, SizeOf(real));
|
||||||
|
rr^ := real(ra.items[j]^);
|
||||||
|
ra.items[i] := rr;
|
||||||
|
|
||||||
|
i := j;
|
||||||
|
Inc(j, i);
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
j := ir + 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
GetMem(rr, SizeOf(real));
|
||||||
|
rr^ := rra;
|
||||||
|
ra.items[i] := rr;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
N := 1
|
||||||
|
else
|
||||||
|
N := StrToInt(ParamStr(1));
|
||||||
|
if N < 1 then N := 1;
|
||||||
|
LAST := 42;
|
||||||
|
ary := TList.Create;
|
||||||
|
ary.Capacity := N;
|
||||||
|
r := 0.0;
|
||||||
|
GetMem( rr, SizeOf(real) );
|
||||||
|
rr^ := r;
|
||||||
|
ary.Add( rr );
|
||||||
|
for i:= 1 to N do begin
|
||||||
|
r := gen_random(1);
|
||||||
|
GetMem( rr, SizeOf(real) );
|
||||||
|
rr^ := r;
|
||||||
|
|
||||||
|
ary.Add( rr );
|
||||||
|
end;
|
||||||
|
for i:= 1 to N do begin
|
||||||
|
r := real(ary.items[i]^);
|
||||||
|
|
||||||
|
end;
|
||||||
|
myheapsort(N, ary);
|
||||||
|
r := real(ary.items[N]^);
|
||||||
|
WriteLn( r:10:10 );
|
||||||
|
ary.Free;
|
||||||
|
end.
|
8
tests/bench/shootout/src/hello.pp
Normal file
8
tests/bench/shootout/src/hello.pp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ Hello World }
|
||||||
|
|
||||||
|
program hello;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
begin
|
||||||
|
WriteLn( 'hello world' );
|
||||||
|
end.
|
104
tests/bench/shootout/src/lists.pp
Normal file
104
tests/bench/shootout/src/lists.pp
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
{ List Operations }
|
||||||
|
|
||||||
|
Program lists;
|
||||||
|
|
||||||
|
uses SysUtils, classes;
|
||||||
|
|
||||||
|
const SIZE : longint = 10000;
|
||||||
|
|
||||||
|
Function test_lists : integer;
|
||||||
|
var
|
||||||
|
i, len1, len2 : longint;
|
||||||
|
Li1, Li2, Li3 : TList;
|
||||||
|
lists_equal : Integer;
|
||||||
|
begin
|
||||||
|
|
||||||
|
Li1 := TList.Create;
|
||||||
|
Li1.Capacity := SIZE;
|
||||||
|
For i := 0 to SIZE Do
|
||||||
|
Li1.Add(Pointer(i));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Li2 := TList.Create;
|
||||||
|
Li2.Capacity := SIZE;
|
||||||
|
For i:= 0 to SIZE Do
|
||||||
|
Li2.Add(Li1.Items[i]);
|
||||||
|
|
||||||
|
{ remove each individual item from left side of Li2 and
|
||||||
|
append to right side of Li3 (preserving order) }
|
||||||
|
Li3 := TList.Create;
|
||||||
|
Li3.Capacity := SIZE;
|
||||||
|
For i := 0 to SIZE Do
|
||||||
|
begin
|
||||||
|
Li3.Add( Li2.First );
|
||||||
|
Li2.Remove( Li2.First );
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{ remove each individual item from right side of Li3 and
|
||||||
|
append to right side of Li2 (reversing list) }
|
||||||
|
For i := 0 To SIZE Do
|
||||||
|
begin
|
||||||
|
Li2.Add( Li3.Last );
|
||||||
|
Li3.Count -= 1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
For i := 0 To (SIZE div 2) Do
|
||||||
|
begin
|
||||||
|
Li1.Exchange( i, SIZE-i );
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
If longint(Li1.first) <> SIZE Then
|
||||||
|
begin
|
||||||
|
|
||||||
|
test_lists := 0;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
len1 := Li1.Count - 1;
|
||||||
|
len2 := Li2.Count - 1;
|
||||||
|
If len1 <> len2 Then
|
||||||
|
begin
|
||||||
|
test_lists := 0;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
lists_equal := 1;
|
||||||
|
For i := 0 To len1 Do
|
||||||
|
begin
|
||||||
|
If longint(Li1.items[i]) <> longint(Li2.items[i]) Then
|
||||||
|
begin
|
||||||
|
lists_equal := 0;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
If lists_equal = 0 Then
|
||||||
|
begin
|
||||||
|
test_lists := 0;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
test_lists := len1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
ITER, i, result: integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
ITER := 1
|
||||||
|
else
|
||||||
|
ITER := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if ITER < 1 then ITER := 1;
|
||||||
|
|
||||||
|
For i := 1 To ITER Do result := test_lists();
|
||||||
|
Writeln (IntToStr(result));
|
||||||
|
|
||||||
|
end.
|
71
tests/bench/shootout/src/matrix.pp
Normal file
71
tests/bench/shootout/src/matrix.pp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{ Matrix Multiplication }
|
||||||
|
|
||||||
|
program matrix;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
const
|
||||||
|
size = 30;
|
||||||
|
|
||||||
|
type tMatrix = array[0..size, 0..size] of longint;
|
||||||
|
|
||||||
|
procedure mkmatrix( rows, cols : integer; var mx : tMatrix);
|
||||||
|
var
|
||||||
|
R, C : integer;
|
||||||
|
count : longint;
|
||||||
|
begin
|
||||||
|
Dec(rows);
|
||||||
|
Dec(cols);
|
||||||
|
count := 1;
|
||||||
|
for R := 0 to rows do
|
||||||
|
begin
|
||||||
|
for C := 0 to cols do
|
||||||
|
begin
|
||||||
|
mx[R, C] := count;
|
||||||
|
Inc(count);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
End;
|
||||||
|
|
||||||
|
procedure mmult(rows, cols : integer; m1, m2 : tMatrix; var mm : tMatrix );
|
||||||
|
var
|
||||||
|
i, j, k : integer;
|
||||||
|
val: longint;
|
||||||
|
begin
|
||||||
|
Dec(rows);
|
||||||
|
Dec(cols);
|
||||||
|
For i := 0 To rows do
|
||||||
|
begin
|
||||||
|
For j := 0 To cols do
|
||||||
|
begin
|
||||||
|
val := 0;
|
||||||
|
For k := 0 To cols do
|
||||||
|
begin
|
||||||
|
Inc(val, m1[i, k] * m2[k, j]);
|
||||||
|
end;
|
||||||
|
mm[i, j] := val;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
End;
|
||||||
|
|
||||||
|
|
||||||
|
var NUM, I : integer;
|
||||||
|
M1, M2, MM : tMatrix;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
|
||||||
|
mkmatrix(size, size, M1);
|
||||||
|
mkmatrix(size, size, M2);
|
||||||
|
|
||||||
|
for I := 0 To NUM do
|
||||||
|
begin
|
||||||
|
mmult(size, size, M1, M2, MM);
|
||||||
|
end;
|
||||||
|
WriteLn( IntToStr(MM[0, 0]) + ' ' + IntToStr(MM[2, 3]) + ' ' +
|
||||||
|
IntToStr(MM[3, 2]) + ' ' + IntToStr(MM[4, 4]));
|
||||||
|
end.
|
94
tests/bench/shootout/src/methcall.pp
Normal file
94
tests/bench/shootout/src/methcall.pp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
{ Method Calls }
|
||||||
|
|
||||||
|
program methcall;
|
||||||
|
|
||||||
|
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
type TToggle = class
|
||||||
|
private
|
||||||
|
value : boolean;
|
||||||
|
|
||||||
|
public
|
||||||
|
property Bool : boolean read value write value;
|
||||||
|
procedure Activate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
type TNthToggle = class
|
||||||
|
constructor Create;
|
||||||
|
private
|
||||||
|
value : boolean;
|
||||||
|
counter : integer;
|
||||||
|
cmax : integer;
|
||||||
|
public
|
||||||
|
property CountMax : integer read cmax write cmax;
|
||||||
|
property Bool : boolean read value write value;
|
||||||
|
procedure Activate;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TNthToggle.Create;
|
||||||
|
begin
|
||||||
|
counter := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TToggle.Activate;
|
||||||
|
begin
|
||||||
|
if value = True Then
|
||||||
|
value := False
|
||||||
|
else
|
||||||
|
value := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TNthToggle.Activate;
|
||||||
|
begin
|
||||||
|
counter := counter + 1;
|
||||||
|
if counter >= cmax Then begin
|
||||||
|
if value = True Then
|
||||||
|
value := False
|
||||||
|
Else
|
||||||
|
value := True;
|
||||||
|
counter := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
NUM, i : longint;
|
||||||
|
val : boolean;
|
||||||
|
oToggle : TToggle;
|
||||||
|
onToggle : TNthToggle;
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
|
||||||
|
val := True;
|
||||||
|
oToggle := TToggle.Create;
|
||||||
|
oToggle.Bool := val;
|
||||||
|
For i := 1 to NUM do
|
||||||
|
begin
|
||||||
|
oToggle.Activate;
|
||||||
|
val := oToggle.Bool;
|
||||||
|
end;
|
||||||
|
If val = True Then
|
||||||
|
WriteLn('true')
|
||||||
|
else
|
||||||
|
WriteLn('false');
|
||||||
|
|
||||||
|
val := True;
|
||||||
|
onToggle := TNthToggle.Create;
|
||||||
|
onToggle.Bool := val;
|
||||||
|
onToggle.CountMax := 3;
|
||||||
|
For i := 1 to NUM do
|
||||||
|
begin
|
||||||
|
onToggle.Activate;
|
||||||
|
val := onToggle.Bool;
|
||||||
|
end;
|
||||||
|
If val = True Then
|
||||||
|
WriteLn('true')
|
||||||
|
else
|
||||||
|
WriteLn('false');
|
||||||
|
end.
|
88
tests/bench/shootout/src/moments.pp
Normal file
88
tests/bench/shootout/src/moments.pp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
{ Statistical Moments }
|
||||||
|
|
||||||
|
Program moments;
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
function Power(Base : Real ; Exponent: Integer): Real;
|
||||||
|
var i : integer;
|
||||||
|
var pow : real;
|
||||||
|
begin
|
||||||
|
pow := Base;
|
||||||
|
For i:= 2 To Exponent do pow := pow * Base;
|
||||||
|
Power := pow;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Compare(A, B : Pointer) : longint;
|
||||||
|
begin
|
||||||
|
if A > B then
|
||||||
|
Compare := 1
|
||||||
|
else if A < B Then
|
||||||
|
Compare := -1
|
||||||
|
else
|
||||||
|
Compare := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
i, N, sum, num, middle : longint;
|
||||||
|
list : TList;
|
||||||
|
median, mean, deviation,
|
||||||
|
average_deviation, standard_deviation,
|
||||||
|
variance, skew, kurtosis : real;
|
||||||
|
begin
|
||||||
|
list := TList.Create;
|
||||||
|
While Not Eof(input) do
|
||||||
|
begin
|
||||||
|
Readln(input, num);
|
||||||
|
list.Add( Pointer(num) );
|
||||||
|
end;
|
||||||
|
N := list.Count;
|
||||||
|
For i := 0 To N-1 do Inc(sum, longint(list.Items[i]));
|
||||||
|
mean := sum / N;
|
||||||
|
average_deviation := 0;
|
||||||
|
standard_deviation := 0;
|
||||||
|
variance := 0;
|
||||||
|
skew := 0;
|
||||||
|
kurtosis := 0;
|
||||||
|
|
||||||
|
For i := 0 To N-1 do
|
||||||
|
begin
|
||||||
|
deviation := longint(list.Items[i]) - mean;
|
||||||
|
average_deviation := average_deviation + Abs(deviation);
|
||||||
|
variance := variance + Power(deviation, 2);
|
||||||
|
skew := skew + Power(deviation, 3);
|
||||||
|
kurtosis := kurtosis + Power(deviation, 4);
|
||||||
|
|
||||||
|
end;
|
||||||
|
average_deviation := average_deviation / N;
|
||||||
|
variance := variance / (N-1);
|
||||||
|
standard_deviation := Sqrt(variance);
|
||||||
|
|
||||||
|
|
||||||
|
If variance <> 0 Then
|
||||||
|
begin
|
||||||
|
skew := skew / (N * variance * standard_deviation);
|
||||||
|
kurtosis := kurtosis / (N * variance * variance ) - 3.0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
list.Sort(@Compare);
|
||||||
|
|
||||||
|
|
||||||
|
middle := N Div 2;
|
||||||
|
|
||||||
|
If (N Mod 2) <> 0 Then
|
||||||
|
median := longint(list.Items[middle])
|
||||||
|
Else
|
||||||
|
median := (longint(list.Items[middle]) +
|
||||||
|
longint(list.Items[middle-1])) / 2;
|
||||||
|
|
||||||
|
|
||||||
|
WriteLn('n: ', N);
|
||||||
|
WriteLn('median: ', median:6:6);
|
||||||
|
WriteLn('mean: ', mean:6:6);
|
||||||
|
WriteLn('average_deviation: ', average_deviation:6:6);
|
||||||
|
WriteLn('standard_deviation: ', standard_deviation:6:6);
|
||||||
|
WriteLn('variance: ', variance:6:6);
|
||||||
|
WriteLn('skew: ', skew:6:6);
|
||||||
|
WriteLn('kurtosis: ', kurtosis:6:6);
|
||||||
|
end.
|
27
tests/bench/shootout/src/nestedloop.pp
Normal file
27
tests/bench/shootout/src/nestedloop.pp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{ Nested Loops }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
program nestedloop;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
var n, a, b, c, d, e, f : integer;
|
||||||
|
var x : longint;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
n := 1
|
||||||
|
else
|
||||||
|
n := StrToInt(ParamStr(1));
|
||||||
|
if n < 1 then n := 1;
|
||||||
|
x := 0;
|
||||||
|
For a := 1 to n Do
|
||||||
|
For b := 1 to n Do
|
||||||
|
For c := 1 to n Do
|
||||||
|
For d := 1 to n Do
|
||||||
|
For e := 1 to n Do
|
||||||
|
For f := 1 to n Do
|
||||||
|
Inc(x);
|
||||||
|
WriteLn( IntToStr(x) );
|
||||||
|
end.
|
33
tests/bench/shootout/src/random.pp
Normal file
33
tests/bench/shootout/src/random.pp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{ Random Number Generator }
|
||||||
|
|
||||||
|
program random;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
const
|
||||||
|
IM = 139968;
|
||||||
|
IA = 3877;
|
||||||
|
IC = 29573;
|
||||||
|
|
||||||
|
var
|
||||||
|
LAST, NUM, i : longint;
|
||||||
|
result : real;
|
||||||
|
|
||||||
|
function gen_random(n : integer) : real;
|
||||||
|
begin
|
||||||
|
LAST := (LAST * IA + IC) mod IM;
|
||||||
|
gen_random := n * LAST / IM;
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
LAST := 42;
|
||||||
|
for i:= 1 to NUM do
|
||||||
|
begin
|
||||||
|
result := gen_random(100);
|
||||||
|
end;
|
||||||
|
WriteLn( result:10:9 );
|
||||||
|
end.
|
22
tests/bench/shootout/src/reversefile.pp
Normal file
22
tests/bench/shootout/src/reversefile.pp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{ Reverse a File }
|
||||||
|
|
||||||
|
Program reversefile;
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
var
|
||||||
|
i, N : longint;
|
||||||
|
list : TList;
|
||||||
|
line : string;
|
||||||
|
pline : pointer;
|
||||||
|
begin
|
||||||
|
list := TList.Create;
|
||||||
|
While Not Eof(input) do
|
||||||
|
begin
|
||||||
|
Readln(input, line);
|
||||||
|
Getmem(pline, Length(line)+1);
|
||||||
|
Move(line, pline^, Length(line)+1);
|
||||||
|
list.Add( pline );
|
||||||
|
end;
|
||||||
|
N := list.Count;
|
||||||
|
For i := N-1 Downto 0 do WriteLn( string(list.items[i]^) );
|
||||||
|
end.
|
41
tests/bench/shootout/src/sieve.pp
Normal file
41
tests/bench/shootout/src/sieve.pp
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
{ Sieve of Erathostenes }
|
||||||
|
|
||||||
|
program sieve;
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
var
|
||||||
|
NUM, i, k, count : integer;
|
||||||
|
flags : array[0..8192] of integer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then
|
||||||
|
NUM := 1
|
||||||
|
else
|
||||||
|
NUM := StrToInt(ParamStr(1));
|
||||||
|
|
||||||
|
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.
|
20
tests/bench/shootout/src/strcat.pp
Normal file
20
tests/bench/shootout/src/strcat.pp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ String Concatenation }
|
||||||
|
|
||||||
|
program strcat;
|
||||||
|
|
||||||
|
uses SysUtils;
|
||||||
|
var
|
||||||
|
NUM, i : longint;
|
||||||
|
str : string;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if ParamCount = 0 then NUM := 1
|
||||||
|
else NUM := StrToInt(ParamStr(1));
|
||||||
|
if NUM < 1 then NUM := 1;
|
||||||
|
|
||||||
|
str := '';
|
||||||
|
For i := 1 To NUM Do
|
||||||
|
str := str + 'hello'#13;
|
||||||
|
WriteLn( Longint(Length(str)) );
|
||||||
|
WriteLn( str );
|
||||||
|
end.
|
14
tests/bench/shootout/src/sumcol.pp
Normal file
14
tests/bench/shootout/src/sumcol.pp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{ Sum a Column of Integers }
|
||||||
|
|
||||||
|
program sumcol;
|
||||||
|
|
||||||
|
var
|
||||||
|
num, tot: longint;
|
||||||
|
begin
|
||||||
|
While Not Eof(input) Do
|
||||||
|
begin
|
||||||
|
ReadLn(input, num);
|
||||||
|
tot := tot + num;
|
||||||
|
end;
|
||||||
|
WriteLn(tot);
|
||||||
|
end.
|
46
tests/bench/shootout/src/wc.pp
Normal file
46
tests/bench/shootout/src/wc.pp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
|
||||||
|
{ Count Lines/Words/Chars }
|
||||||
|
|
||||||
|
program wc;
|
||||||
|
|
||||||
|
|
||||||
|
uses SysUtils;
|
||||||
|
|
||||||
|
var
|
||||||
|
nl, nw, nc: longint;
|
||||||
|
Buf: array[1..4096] of byte;
|
||||||
|
NumRead: Integer;
|
||||||
|
|
||||||
|
A: Integer;
|
||||||
|
Tmp: String;
|
||||||
|
TmpPos : Byte;
|
||||||
|
Ch: String;
|
||||||
|
InWord: Boolean;
|
||||||
|
begin
|
||||||
|
nl := 0;
|
||||||
|
nc := 0;
|
||||||
|
nw := 0;
|
||||||
|
InWord := False;
|
||||||
|
NumRead := FileRead(StdInputHandle, Buf, 4096);
|
||||||
|
While NumRead > 0 Do
|
||||||
|
begin
|
||||||
|
Inc(nc, NumRead);
|
||||||
|
For A := 1 To NumRead Do
|
||||||
|
begin
|
||||||
|
if Buf[A] = 10 Then Inc(nl);
|
||||||
|
if Buf[A] = 13 Then Dec(nc);
|
||||||
|
if (Buf[A] = 32) Or (Buf[A] = 10) Or (Buf[A] = 13) Or (Buf[A] = 9) Then
|
||||||
|
InWord := False
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
If InWord = False Then
|
||||||
|
begin
|
||||||
|
Inc(nw);
|
||||||
|
InWord := True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
NumRead := FileRead(StdInputHandle, Buf, 4096);
|
||||||
|
end;
|
||||||
|
WriteLn(IntToStr(nl) + ' ' + IntToStr(nw) + ' ' + IntToStr(nc));
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user