use strict;
use warnings;
use Test::More;
use MooseX::Types::Parameterizable qw(Parameterizable);
use MooseX::Types::Moose qw( Int ArrayRef );
use MooseX::Types -declare=>[qw( EvenInt ArrayOfEvenIntsWithLength )];
ok subtype( EvenInt,
as Int,
where {
my $val = shift @_;
return $val % 2 ? 0:1;
}),
'Created a subtype of Int';
ok subtype(
ArrayOfEvenIntsWithLength,
as Parameterizable[
ArrayRef[EvenInt],
Int,
],
where {
my ($value, $int) = @_;
my $length = scalar(@$value);
$length < ($int+1) ? 1:0;
},
), 'Created parameterized parameterized!';
ok ! ArrayOfEvenIntsWithLength([5])->check([2,4,6,8,10,12,14]),
'correctly failed too long array';
ok ! ArrayOfEvenIntsWithLength([5])->check([2,4,6,8,11]),
'correctly failed with odd number in array';
ok ArrayOfEvenIntsWithLength([5])->check([2,4,6]),
'correctly passed array';
done_testing;