#!/usr/bin/perl
use
lib
'../blib/lib'
,
'../blib/arch'
;
BEGIN {$| = 1;
print
"1..23\n"
;}
END {
print
"not ok 1\n"
unless
$loaded
;}
use
Math::Cephes
qw(:dists :betas :gammas :constants :misc)
;
$loaded
= 1;
print
"ok 1\n"
;
my
$count
= 1;
my
$eps
= 1e-07;
sub
ok {
local
($^W) = 0;
$count
++;
my
(
$package
,
$file
,
$line
) =
caller
;
my
(
$value
,
$true
,
$skip
) =
@_
;
$skip
||=
''
;
$skip
=
"# skip ($skip)"
if
$skip
;
my
$error
=
sprintf
(
"%12.8f"
,
abs
(
$value
-
$true
));
print
(
$error
<
$eps
?
"ok $count $skip ($value)\n"
:
"not ok $count (expected $true: got $value) at $file line $line\n"
);
}
my
$k
= 2;
my
$n
= 10;
my
$p
= 0.5;
my
$y
= 0.6;
ok( bdtr(
$k
,
$n
,
$p
), incbet(
$n
-
$k
,
$k
+1, 1-
$p
));
ok( bdtrc(
$k
,
$n
,
$p
), incbet(
$k
+1,
$n
-
$k
,
$p
));
ok( bdtri(
$k
,
$n
,
$y
), 1-incbi(
$n
-
$k
,
$k
+1,
$y
));
ok( btdtr(
$k
,
$n
,
$y
), incbet(
$k
,
$n
,
$y
));
ok( chdtr(
$k
,
$y
), igam(
$k
/2,
$y
/2));
ok( chdtrc(
$k
,
$y
), igamc(
$k
/2,
$y
/2));
ok( chdtri(
$k
,
$y
), 2
*igami
(
$k
/2,
$y
));
ok( fdtr(
$k
,
$n
,
$y
), incbet(
$k
/2,
$n
/2,
$k
*$y
/(
$n
+
$k
*$y
)));
ok( fdtrc(
$k
,
$n
,
$y
), incbet(
$n
/2,
$k
/2,
$n
/(
$n
+
$k
*$y
)));
my
$z
= incbi(
$n
/2,
$k
/2,
$p
);
ok( fdtri(
$k
,
$n
,
$p
),
$n
*(1-
$z
)/(
$k
*$z
));
ok( gdtr(
$k
,
$n
,
$y
), igam(
$n
,
$k
*$y
));
ok( gdtrc(
$k
,
$n
,
$y
), igamc(
$n
,
$k
*$y
));
my
$w
= nbdtr(
$k
,
$n
,
$p
);
ok(
$w
, incbet(
$n
,
$k
+1,
$p
));
ok( nbdtrc(
$k
,
$n
,
$p
), incbet(
$k
+1,
$n
, 1-
$p
));
ok( nbdtri(
$k
,
$n
,
$w
),
$p
);
$w
= ndtr(
$y
);
ok(
$w
, (1+erf(
$y
/
sqrt
(2)))/2);
ok( ndtri(
$w
),
$y
);
ok( pdtr(
$k
,
$n
), igamc(
$k
+1,
$n
));
ok( pdtrc(
$k
,
$n
), igam(
$k
+1,
$n
));
ok( pdtri(
$k
,
$y
), igami(
$k
+1,
$y
));
$w
= stdtr(
$k
,
$y
);
$z
=
$k
/(
$k
+
$y
*$y
);
ok(
$w
, 1- 0.5
*incbet
(
$k
/2, 1/2,
$z
));
ok( stdtri(
$k
,
$w
),
$y
);