7
use Test::More tests => 34;
9
use constant PI => 4 * atan2(1, 1);
10
use constant EPSILON => 1E-4;
17
my $line = Slic3r::Line->new(@$points);
18
is_deeply $line->pp, $points, 'line roundtrip';
20
is ref($line->arrayref), 'ARRAY', 'line arrayref is unblessed';
21
isa_ok $line->[0], 'Slic3r::Point::Ref', 'line point is blessed';
24
my $clone = $line->clone;
26
is_deeply $clone->pp, [ reverse @$points ], 'reverse';
30
my $line2 = Slic3r::Line->new($line->a->clone, $line->b->clone);
31
is_deeply $line2->pp, $points, 'line roundtrip with cloned points';
35
my $clone = $line->clone;
36
$clone->translate(10, -5);
37
is_deeply $clone->pp, [
43
foreach my $base_angle (0, PI/4, PI/2, PI) {
44
my $line = Slic3r::Line->new([0,0], [100,0]);
45
$line->rotate($base_angle, [0,0]);
46
ok $line->parallel_to_line($line->clone), 'line is parallel to self';
47
ok $line->parallel_to($line->direction), 'line is parallel to its direction';
48
ok $line->parallel_to($line->direction + PI), 'line is parallel to its direction + PI';
49
ok $line->parallel_to($line->direction - PI), 'line is parallel to its direction - PI';
51
my $line2 = $line->clone;
53
ok $line->parallel_to_line($line2), 'line is parallel to its opposite';
56
my $line2 = $line->clone;
57
$line2->rotate(+(EPSILON)/2, [0,0]);
58
ok $line->parallel_to_line($line2), 'line is parallel within epsilon';
61
my $line2 = $line->clone;
62
$line2->rotate(-(EPSILON)/2, [0,0]);
63
ok $line->parallel_to_line($line2), 'line is parallel within epsilon';