#!/usr/bin/perl -w
use
5.004;
plan
tests
=> 37;
BEGIN { MyTestHelpers::nowarnings(); }
{
my
$want_version
= 129;
ok (
$Math::PlanePath::StaircaseAlternating::VERSION
,
$want_version
,
'VERSION variable'
);
ok (Math::PlanePath::StaircaseAlternating->VERSION,
$want_version
,
'VERSION class method'
);
ok (
eval
{ Math::PlanePath::StaircaseAlternating->VERSION(
$want_version
); 1 },
1,
"VERSION class check $want_version"
);
my
$check_version
=
$want_version
+ 1000;
ok (!
eval
{ Math::PlanePath::StaircaseAlternating->VERSION(
$check_version
); 1 },
1,
"VERSION class check $check_version"
);
my
$path
= Math::PlanePath::StaircaseAlternating->new;
ok (
$path
->VERSION,
$want_version
,
'VERSION object method'
);
ok (
eval
{
$path
->VERSION(
$want_version
); 1 },
1,
"VERSION object check $want_version"
);
ok (!
eval
{
$path
->VERSION(
$check_version
); 1 },
1,
"VERSION object check $check_version"
);
}
{
my
$path
= Math::PlanePath::StaircaseAlternating->new;
ok (
$path
->n_start, 1,
'n_start()'
);
ok (
$path
->x_negative, 0,
'x_negative() instance method'
);
ok (
$path
->y_negative, 0,
'y_negative() instance method'
);
}
{
my
@pnames
=
map
{
$_
->{
'name'
}}
Math::PlanePath::StaircaseAlternating->parameter_info_list;
ok (
join
(
','
,
@pnames
),
'end_type,n_start'
);
}
foreach
my
$end_type
(
'jump'
,
'square'
) {
my
$path
= Math::PlanePath::StaircaseAlternating->new(
end_type
=>
$end_type
);
my
$bad
= 0;
foreach
my
$x1
(0 .. 24) {
foreach
my
$xblock
(0, 1, 2, 10) {
my
$x2
=
$x1
+
$xblock
;
foreach
my
$y1
(0 .. 24) {
foreach
my
$yblock
(0, 1, 2, 10) {
my
$y2
=
$y1
+
$yblock
;
my
@n_list
=
grep
{
defined
} (
$path
->xy_to_n(
$x1
,
$y1
),
$path
->xy_to_n(
$x2
,
$y2
),
(
$xblock
>= 1
? (
$path
->xy_to_n(
$x1
+1,
$y1
),
$path
->xy_to_n(
$x2
-1,
$y2
))
: ()),
(
$xblock
>= 2
? (
$path
->xy_to_n(
$x1
+2,
$y1
),
$path
->xy_to_n(
$x2
-2,
$y2
))
: ()),
(
$yblock
>= 1
? (
$path
->xy_to_n(
$x1
,
$y1
+1),
$path
->xy_to_n(
$x2
,
$y2
-1))
: ()),
(
$yblock
>= 2
? (
$path
->xy_to_n(
$x1
,
$y1
+2),
$path
->xy_to_n(
$x2
,
$y2
-2))
: ()));
my
$want_nlo
= Math::PlanePath::_min (
@n_list
);
my
$want_nhi
= Math::PlanePath::_max (
@n_list
);
if
(!
@n_list
) {
$want_nlo
= 1;
$want_nhi
= 0;
}
my
(
$got_nlo
,
$got_nhi
) =
$path
->rect_to_n_range (
$x1
,
$y1
,
$x2
,
$y2
);
unless
((
defined
$got_nlo
==
defined
$want_nlo
)
&& (
$got_nlo
||0) == (
$want_nlo
||0)) {
if
(!
defined
$got_nlo
) {
$got_nlo
=
'undef'
; }
if
(!
defined
$want_nlo
) {
$want_nlo
=
'undef'
; }
MyTestHelpers::diag (
"$end_type $x1,$y1 to $x2,$y2 want_nlo=$want_nlo got_nlo=$got_nlo"
);
$bad
++;
}
unless
((
defined
$got_nhi
==
defined
$want_nhi
)
&& (
$got_nhi
||0) == (
$want_nhi
||0)) {
if
(!
defined
$got_nhi
) {
$got_nhi
=
'undef'
; }
if
(!
defined
$want_nhi
) {
$want_nhi
=
'undef'
; }
MyTestHelpers::diag (
"$end_type $x1,$y1 to $x2,$y2 want_nhi=$want_nhi got_nhi=$got_nhi"
);
$bad
++;
}
}
}
}
}
ok (
$bad
, 0);
}
{
my
@data
= ([ 1, 0,0 ],
[ 2, 0,1 ],
[ 3, 1,1 ],
[ 4, 1,0 ],
[ 5, 2,0 ],
[ 6, 3,0 ],
);
my
$path
= Math::PlanePath::StaircaseAlternating->new (
end_type
=>
'square'
);
foreach
my
$elem
(
@data
) {
my
(
$n
,
$want_x
,
$want_y
) =
@$elem
;
my
(
$got_x
,
$got_y
) =
$path
->n_to_xy (
$n
);
ok (
$got_x
,
$want_x
,
"x at n=$n"
);
ok (
$got_y
,
$want_y
,
"y at n=$n"
);
}
foreach
my
$elem
(
@data
) {
my
(
$want_n
,
$x
,
$y
) =
@$elem
;
next
unless
$want_n
==
int
(
$want_n
);
my
$got_n
=
$path
->xy_to_n (
$x
,
$y
);
ok (
$got_n
,
$want_n
,
"n at x=$x,y=$y"
);
}
}
{
my
@data
= ([ 0,2 ],
[ 4,0 ],
[ 0,6 ],
[ 8,0 ],
[ 0,10 ],
[ 12,0 ],
);
my
$path
= Math::PlanePath::StaircaseAlternating->new(
end_type
=>
'square'
);
foreach
my
$elem
(
@data
) {
my
(
$x
,
$y
) =
@$elem
;
my
$got_n
=
$path
->xy_to_n (
$x
,
$y
);
ok (!
defined
$got_n
, 1,
"square omitted $x,$y"
);
}
}
exit
0;