#!/usr/bin/perl -w
use
5.004;
BEGIN { plan
tests
=> 9 }
MyTestHelpers::nowarnings();
my
$path
= Math::PlanePath::CoprimeColumns->new;
sub
numeq_array {
my
(
$a1
,
$a2
) =
@_
;
if
(!
ref
$a1
|| !
ref
$a2
) {
return
0;
}
my
$i
= 0;
while
(
$i
<
@$a1
&&
$i
<
@$a2
) {
if
(
$a1
->[
$i
] ne
$a2
->[
$i
]) {
return
0;
}
$i
++;
}
return
(
@$a1
==
@$a2
);
}
{
my
$anum
=
'A121998'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
);
my
@got
;
if
(
$bvalues
) {
OUTER:
for
(
my
$x
= 2; ;
$x
++) {
for
(
my
$y
= 1;
$y
<=
$x
;
$y
++) {
if
(!
defined
(
$path
->xy_to_n(
$x
,
$y
))) {
push
@got
,
$y
;
last
OUTER
unless
@got
<
@$bvalues
;
}
}
}
if
(! numeq_array(\
@got
,
$bvalues
)) {
MyTestHelpers::diag (
"bvalues: "
,
join
(
','
,@{
$bvalues
}[0..20]));
MyTestHelpers::diag (
"got: "
,
join
(
','
,
@got
[0..20]));
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
{
my
$anum
=
'A038567'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
,
max_count
=> 10000);
my
@got
;
if
(
$bvalues
) {
my
$sb
= Math::PlanePath::CoprimeColumns->new (
tree_type
=>
'SB'
);
my
$n
= 0;
while
(
@got
<
@$bvalues
) {
my
(
$x
,
$y
) =
$path
->n_to_xy (
$n
++);
push
@got
,
$x
;
}
if
(! numeq_array(\
@got
,
$bvalues
)) {
MyTestHelpers::diag (
"bvalues: "
,
join
(
','
,@{
$bvalues
}[0..20]));
MyTestHelpers::diag (
"got: "
,
join
(
','
,
@got
[0..20]));
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
{
my
$anum
=
'A038566'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
,
max_count
=> 10000);
my
@got
;
if
(
$bvalues
) {
my
$sb
= Math::PlanePath::CoprimeColumns->new (
tree_type
=>
'SB'
);
my
$n
= 0;
while
(
@got
<
@$bvalues
) {
my
(
$x
,
$y
) =
$path
->n_to_xy (
$n
++);
push
@got
,
$y
;
}
if
(! numeq_array(\
@got
,
$bvalues
)) {
MyTestHelpers::diag (
"bvalues: "
,
join
(
','
,@{
$bvalues
}[0..20]));
MyTestHelpers::diag (
"got: "
,
join
(
','
,
@got
[0..20]));
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
{
my
$anum
=
'A054521'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
);
{
my
$good
= 1;
my
$count
= 0;
if
(
$bvalues
) {
my
$x
= 1;
my
$y
= 1;
for
(
my
$i
= 0;
$i
<
@$bvalues
;
$i
++) {
my
$want
=
$bvalues
->[
$i
];
my
$got
= (Math::PlanePath::CoprimeColumns::_coprime(
$x
,
$y
)
? 1 : 0);
if
(
$got
!=
$want
) {
MyTestHelpers::diag (
"wrong _coprime($x,$y)=$got want=$want at i=$i of $filename"
);
$good
= 0;
}
$y
++;
if
(
$y
>
$x
) {
$x
++;
$y
= 1;
}
$count
++;
}
}
ok (
$good
, 1,
"$anum count $count"
);
}
{
my
@got
;
if
(
$bvalues
) {
OUTER:
for
(
my
$x
= 1; ;
$x
++) {
foreach
my
$y
(1 ..
$x
) {
if
(
defined
(
$path
->xy_to_n(
$x
,
$y
))) {
push
@got
, 1;
}
else
{
push
@got
, 0;
}
last
OUTER
if
@got
>=
@$bvalues
;
}
}
if
(! numeq_array(\
@got
,
$bvalues
)) {
MyTestHelpers::diag (
"bvalues: "
,
join
(
','
,@{
$bvalues
}[0..20]));
MyTestHelpers::diag (
"got: "
,
join
(
','
,
@got
[0..20]));
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
}
{
my
$anum
=
'A127368'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
);
{
my
$good
= 1;
my
$count
= 0;
if
(
$bvalues
) {
$bvalues
->[52] = 0;
$bvalues
->[53] = 9;
my
$x
= 1;
my
$y
= 1;
for
(
my
$i
= 0;
$i
<
@$bvalues
;
$i
++) {
my
$want
=
$bvalues
->[
$i
];
my
$got
= (Math::PlanePath::CoprimeColumns::_coprime(
$x
,
$y
)
?
$y
: 0);
if
(
$got
!=
$want
) {
MyTestHelpers::diag (
"wrong _coprime($x,$y)=$got want=$want at i=$i of $filename"
);
$good
= 0;
}
$y
++;
if
(
$y
>
$x
) {
$x
++;
$y
= 1;
}
$count
++;
}
}
ok (
$good
, 1,
"$anum count $count"
);
}
{
my
@got
;
if
(
$bvalues
) {
OUTER:
for
(
my
$x
= 1; ;
$x
++) {
foreach
my
$y
(1 ..
$x
) {
if
(
defined
(
$path
->xy_to_n(
$x
,
$y
))) {
push
@got
,
$y
;
}
else
{
push
@got
, 0;
}
last
OUTER
if
@got
>=
@$bvalues
;
}
}
if
(! numeq_array(\
@got
,
$bvalues
)) {
MyTestHelpers::diag (
"bvalues: "
,
join
(
','
,@{
$bvalues
}[0..20]));
MyTestHelpers::diag (
"got: "
,
join
(
','
,
@got
[0..20]));
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
}
{
my
$anum
=
'A054427'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
);
my
@got
;
if
(
$bvalues
) {
my
$sb
= Math::PlanePath::RationalsTree->new (
tree_type
=>
'SB'
);
my
$n
= 0;
while
(
@got
<
@$bvalues
) {
my
(
$x
,
$y
) =
$path
->n_to_xy (
$n
++);
my
$sn
=
$sb
->xy_to_n(
$x
,
$y
);
push
@got
, delete_second_highest_bit(
$sn
) + 1;
}
}
skip (!
$bvalues
,
numeq_array(\
@got
,
$bvalues
),
1,
"$anum"
);
}
sub
delete_second_highest_bit {
my
(
$n
) =
@_
;
my
$bit
= 1;
my
$ret
= 0;
while
(
$bit
<=
$n
) {
$ret
|= (
$n
&
$bit
);
$bit
<<= 1;
}
$bit
>>= 1;
$ret
&= ~
$bit
;
$bit
>>= 1;
$ret
|=
$bit
;
return
$ret
;
}
{
my
$anum
=
'A002088'
;
my
(
$bvalues
,
$lo
,
$filename
) = MyOEIS::read_values(
$anum
);
my
$good
= 1;
my
$count
= 0;
if
(
$bvalues
) {
for
(
my
$i
= 0;
$i
<
@$bvalues
;
$i
++) {
my
$x
=
$i
+1;
my
$want
=
$bvalues
->[
$i
];
my
$got
=
$path
->xy_to_n(
$x
,1);
if
(
$got
!=
$want
) {
MyTestHelpers::diag (
"wrong totient sum xy_to_n($x,1)=$got want=$want at i=$i of $filename"
);
$good
= 0;
}
$count
++;
}
}
ok (
$good
, 1,
"$anum count $count"
);
}
exit
0;