#!/usr/bin/perl -w
use
5.004;
MyTestHelpers::nowarnings();
my
$test_count
= (
tests
=> 643)[1];
plan
tests
=>
$test_count
;
{
my
$n
= Math::BigInt->new(123);
if
(!
$n
->can(
'bsqrt'
)) {
MyTestHelpers::diag (
'skip due to Math::BigInt no bsqrt()'
);
foreach
(1 ..
$test_count
) {
skip (
'skip due to Math::BigInt no bsqrt()'
, 1, 1);
}
exit
0;
}
}
{
my
$want_version
= 75;
ok (
$Math::NumSeq::SqrtEngel::VERSION
,
$want_version
,
'VERSION variable'
);
ok (Math::NumSeq::SqrtEngel->VERSION,
$want_version
,
'VERSION class method'
);
ok (
eval
{ Math::NumSeq::SqrtEngel->VERSION(
$want_version
); 1 },
1,
"VERSION class check $want_version"
);
my
$check_version
=
$want_version
+ 1000;
ok (!
eval
{ Math::NumSeq::SqrtEngel->VERSION(
$check_version
); 1 },
1,
"VERSION class check $check_version"
);
}
{
my
$seq
= Math::NumSeq::SqrtEngel->new;
ok (
$seq
->i_start, 1,
'i_start()'
);
ok (
$seq
->characteristic(
'digits'
),
undef
,
'characteristic(digits)'
);
ok (!
$seq
->characteristic(
'smaller'
), 1,
'characteristic(smaller)'
);
ok (!
$seq
->characteristic(
'count'
), 1,
'characteristic(count)'
);
ok (
$seq
->characteristic(
'integer'
), 1,
'characteristic(integer)'
);
ok (!
$seq
->characteristic(
'increasing'
), 1,
'characteristic(increasing)'
);
ok (
$seq
->characteristic(
'non_decreasing'
), 1,
'characteristic(non_decreasing)'
);
ok (
$seq
->characteristic(
'increasing_from_i'
),
undef
,
'characteristic(increasing_from_i)'
);
ok (
$seq
->characteristic(
'non_decreasing_from_i'
),
$seq
->i_start,
'characteristic(non_decreasing_from_i)'
);
my
@pnames
=
map
{
$_
->{
'name'
}}
$seq
->parameter_info_list;
ok (
join
(
','
,
@pnames
),
'sqrt'
);
}
{
foreach
my
$sqrt
(2 .. 20) {
my
$seq
= Math::NumSeq::SqrtEngel->new (
sqrt
=>
$sqrt
);
my
$num
= Math::NumSeq::_to_bigint(0);
my
$den
= Math::NumSeq::_to_bigint(1);
my
$want_i
= 1;
my
$prev_value
= 0;
foreach
(1 .. 10) {
my
(
$i
,
$value
) =
$seq
->
next
or
do
{
ok (
$den
== 1);
ok (
$num
*$num
==
$sqrt
);
last
;
};
ok (
$i
,
$want_i
);
$want_i
++;
ok (
$value
>=
$prev_value
);
if
(
$value
> 1) {
my
$above_num
=
$num
* (
$value
-1) + 1;
my
$above_den
=
$den
* (
$value
-1);
ok (
$above_num
*
$above_num
>=
$above_den
*
$above_den
*
$sqrt
,
1,
'value-1 would be > sqrt'
);
}
$num
=
$num
*
$value
+ 1;
$den
=
$den
*
$value
;
ok (
$num
*
$num
<=
$den
*
$den
*
$sqrt
,
1,
"total < sqrt($sqrt) at num=$num den=$den"
);
}
}
}
exit
0;