The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 19;

use lib '../lib';
use Math::Polygon::Calc;

my @p = ([0,0], [1,1], [-2,1], [-2,-2], [-1,-1], [0,-2], [1,-1], [0,0]);

ok( polygon_contains_point([-1,0], @p), '(-1,0)');
ok( polygon_contains_point([0,-1], @p), '(0,-1)');

ok(!polygon_contains_point([10,10], @p), '(10,10)');
ok(!polygon_contains_point([1,0], @p), '(1,0)');
ok(!polygon_contains_point([-1,-1.5], @p), '(-1,-1.5)');

# On the edge
ok( polygon_contains_point([0,0], @p), '(0,0)');
ok( polygon_contains_point([-1,-1], @p), '(-1,-1)');


@p = ([1,1],[1,3],[4,3],[4,1],[1,1]);

ok( polygon_contains_point([3,1], @p), '2nd (3,1)');  # on vertical edge

ok( polygon_contains_point([1,1], @p), '2nd (1,1)');
ok( polygon_contains_point([1,3], @p), '2nd (1,3)');
ok( polygon_contains_point([4,3], @p), '2nd (4,3)');
ok( polygon_contains_point([4,1], @p), '2nd (4,1)');

# rt.cpan.org#118030  On edge
@p = ([400, 0], [500, 0], [600, 100], [600, 900], [500, 1000],
      [400, 1000], [400, 0]);
ok( polygon_contains_point([400, 400], @p), 'on edge 1');
ok( polygon_contains_point([550,  50], @p), 'on edge 2');
ok( polygon_contains_point([551,  51], @p), 'on edge 2b');
ok( polygon_contains_point([552,  52], @p), 'on edge 2c');
ok( polygon_contains_point([550, 950], @p), 'on edge 3');
ok( polygon_contains_point([600, 300], @p), 'on edge 4');
ok( polygon_contains_point([450,1000], @p), 'on edge 5');