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

use warnings;
use strict;

use Test::More tests => 10;

use Geo::WKT qw/parse_wkt_polygon wkt_polygon/;

#### Parse

my $p1 = parse_wkt_polygon "POLYGON((2.5 8, 3.5 6.7, 4.5 8))";
isa_ok($p1, 'Geo::Surface', 'parse polygon');
is($p1->toString, <<_OUT);
surface[wgs84]
  ([[2.5,8], [3.5,6.7], [4.5,8]])
_OUT

my $p2 = parse_wkt_polygon "POLYGON((1 2, 3 4, 5 6),(7 8, 9 10, 11 12))";
isa_ok($p2, 'Geo::Surface', 'parse polygon');
is($p2->toString, <<'__OUT');
surface[wgs84]
  ([[1,2], [3,4], [5,6]])
 -([[7,8], [9,10], [11,12]])
__OUT

#### Create

is(wkt_polygon([1,2], [3,4], [5,6]), "POLYGON((1 2,3 4,5 6))");

my $gp1 = Geo::Point->xy(7,8);
my $gp2 = Geo::Point->xy(9,10);
my $gp3 = Geo::Point->xy(11,12);
my $gp4 = Geo::Point->xy(13,14);

#list of Geo::Points for outer

#array of points for outer
is(wkt_polygon([[2,3],[4,5],[6,7]]), "POLYGON((2 3,4 5,6 7))");

#array with Geo::Points for outer
is(wkt_polygon([$gp1, $gp2, $gp3]), "POLYGON((7 8,9 10,11 12))");

my $outer = Geo::Line->new(points => [[16,17],[18,19]]);

is(wkt_polygon($outer), "POLYGON((16 17,18 19))");

my @inner1 = ($gp1, $gp2, $gp3);
my $inner3 = $outer;
is(wkt_polygon($outer, \@inner1, $inner3),
 "POLYGON((16 17,18 19),(7 8,9 10,11 12),(16 17,18 19))");

is(wkt_polygon([$gp1,$gp2],[$gp3,$gp4,$gp1]),
  "POLYGON((7 8,9 10),(11 12,13 14,7 8))");