The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- mode: perl; coding: utf-8; tab-width: 4 -*-

use strict;
# use Test::More qw(no_plan);
use Test::More tests => 24;

BEGIN {
	use_ok('Cv', -more);
}

sub xy {
	sprintf("(%d, %d)", map { ref $_ ? @$_ : $_ } @_);
}

sub round_array {
	for (@_) {
		$_ = int($_ + 0.5) for @$_;
	}
	@_;
}

sub Sort {
	my @pts = sort {
		$a->[1] <=> $b->[1] || $a->[0] <=> $b->[0]
	} round_array(@_);
	@pts[0, 1, 3, 2];
}

if (1) {
	my @xy = Sort( [ 1, 1 ], [ 0, 1 ], [ 1, 0 ], [ 0, 0 ] );
	ok(xy($xy[0]), xy([ 0, 0 ]));
	ok(xy($xy[1]), xy([ 1, 0 ]));
	ok(xy($xy[2]), xy([ 1, 1 ]));
	ok(xy($xy[3]), xy([ 0, 1 ]));
}

if (2) {
	# my @p0 = Cv::cvBoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ]);
	Cv::cvBoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ], my $p0);
	my @p = Sort(@$p0);
	ok(xy($p[0]) eq xy(0, 0));
	ok(xy($p[1]) eq xy(2, 0));
	ok(xy($p[2]) eq xy(2, 2));
	ok(xy($p[3]) eq xy(0, 2));
}

if (3) {
	my @p0 = Cv->BoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ]);
	my @p = Sort(@p0);
	ok(xy($p[0]) eq xy(0, 0));
	ok(xy($p[1]) eq xy(2, 0));
	ok(xy($p[2]) eq xy(2, 2));
	ok(xy($p[3]) eq xy(0, 2));
}

if (4) {
	Cv->BoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ], \my @p0);
	my @p = Sort(@p0);
	ok(xy($p[0]) eq xy(0, 0));
	ok(xy($p[1]) eq xy(2, 0));
	ok(xy($p[2]) eq xy(2, 2));
	ok(xy($p[3]) eq xy(0, 2));
}

if (5) {
	Cv->BoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ], my $p0);
	my @p = Sort(@$p0);
	ok(xy($p[0]) eq xy(0, 0));
	ok(xy($p[1]) eq xy(2, 0));
	ok(xy($p[2]) eq xy(2, 2));
	ok(xy($p[3]) eq xy(0, 2));
}

if (6) {
	my $p = Cv->BoxPoints([ [ 1, 1 ], [ 2, 2 ], 90.0 ]);
	is(ref $p, 'ARRAY');
	# ok(!ref $p->[0]);			# Cv 0.16
	ok(ref $p->[0]);			# Cv 0.16
}

if (9) {
	eval { Cv->boxPoints(); };
	ok($@);
}