~ubuntu-branches/ubuntu/utopic/slic3r/utopic

« back to all changes in this revision

Viewing changes to xs/t/10_line.t

  • Committer: Package Import Robot
  • Author(s): Chow Loong Jin
  • Date: 2014-06-17 01:27:26 UTC
  • Revision ID: package-import@ubuntu.com-20140617012726-2wrs4zdo251nr4vg
Tags: upstream-1.1.4+dfsg
ImportĀ upstreamĀ versionĀ 1.1.4+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/perl
 
2
 
 
3
use strict;
 
4
use warnings;
 
5
 
 
6
use Slic3r::XS;
 
7
use Test::More tests => 34;
 
8
 
 
9
use constant PI         => 4 * atan2(1, 1);
 
10
use constant EPSILON    => 1E-4;
 
11
 
 
12
my $points = [
 
13
    [100, 100],
 
14
    [200, 100],
 
15
];
 
16
 
 
17
my $line = Slic3r::Line->new(@$points);
 
18
is_deeply $line->pp, $points, 'line roundtrip';
 
19
 
 
20
is ref($line->arrayref), 'ARRAY', 'line arrayref is unblessed';
 
21
isa_ok $line->[0], 'Slic3r::Point::Ref', 'line point is blessed';
 
22
 
 
23
{
 
24
    my $clone = $line->clone;
 
25
    $clone->reverse;
 
26
    is_deeply $clone->pp, [ reverse @$points ], 'reverse';
 
27
}
 
28
 
 
29
{
 
30
    my $line2 = Slic3r::Line->new($line->a->clone, $line->b->clone);
 
31
    is_deeply $line2->pp, $points, 'line roundtrip with cloned points';
 
32
}
 
33
 
 
34
{
 
35
    my $clone = $line->clone;
 
36
    $clone->translate(10, -5);
 
37
    is_deeply $clone->pp, [
 
38
        [110, 95],
 
39
        [210, 95],
 
40
    ], 'translate';
 
41
}
 
42
 
 
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';
 
50
    {
 
51
        my $line2 = $line->clone;
 
52
        $line2->reverse;
 
53
        ok $line->parallel_to_line($line2), 'line is parallel to its opposite';
 
54
    }
 
55
    {
 
56
        my $line2 = $line->clone;
 
57
        $line2->rotate(+(EPSILON)/2, [0,0]);
 
58
        ok $line->parallel_to_line($line2), 'line is parallel within epsilon';
 
59
    }
 
60
    {
 
61
        my $line2 = $line->clone;
 
62
        $line2->rotate(-(EPSILON)/2, [0,0]);
 
63
        ok $line->parallel_to_line($line2), 'line is parallel within epsilon';
 
64
    }
 
65
}
 
66
 
 
67
__END__