Type-Tiny-XS
view release on metacpan or search on metacpan
lib/Type/Tiny/XS.pm view on Meta::CPAN
Any ArrayRef Bool ClassName CodeRef Defined
FileHandle GlobRef HashRef Int Num Object
Ref RegexpRef ScalarRef Str Undef Value
PositiveInt PositiveOrZeroInt NonEmptyStr
ArrayLike HashLike CodeLike StringLike
Map Tuple Enum AnyOf AllOf
/
);
$names{Item} = $names{Any};
if ( $] lt '5.010000' ) {
require MRO::Compat;
*Type::Tiny::XS::Util::get_linear_isa = \&mro::get_linear_isa;
my $overloaded = sub {
require overload;
overload::Overloaded( ref $_[0] or $_[0] )
and overload::Method( ( ref $_[0] or $_[0] ), $_[1] );
};
no warnings qw( uninitialized redefine once );
lib/Type/Tiny/XS.pm view on Meta::CPAN
\&{ $names{$type} };
} if exists $names{$type};
my $made;
if ( $type =~ /^ArrayRef\[(.+)\]$/ ) {
my $child = get_coderef_for( $1 ) or return;
$made = _parameterize_ArrayRef_for( $child );
}
elsif ( $] ge '5.010000' and $type =~ /^ArrayLike\[(.+)\]$/ ) {
my $child = get_coderef_for( $1 ) or return;
$made = _parameterize_ArrayLike_for( $child );
}
elsif ( $type =~ /^HashRef\[(.+)\]$/ ) {
my $child = get_coderef_for( $1 ) or return;
$made = _parameterize_HashRef_for( $child );
}
elsif ( $] ge '5.010000' and $type =~ /^HashLike\[(.+)\]$/ ) {
my $child = get_coderef_for( $1 ) or return;
$made = _parameterize_HashLike_for( $child );
}
elsif ( $type =~ /^Map\[(.+),(.+)\]$/ ) {
my @children;
if ( eval { require Type::Parser } ) {
@children = map scalar( get_coderef_for( $_ ) ), _parse_parameters( $type );
}
else {
t/50arraylike.t view on Meta::CPAN
ok Type::Tiny::XS::ArrayLike([1..3]), '[1..3]';
ok Type::Tiny::XS::ArrayLike($obj), '$obj';
ok !Type::Tiny::XS::ArrayLike($obj2), 'NOT $obj2';
ok !Type::Tiny::XS::ArrayLike({}), 'NOT {}';
ok !Type::Tiny::XS::ArrayLike(1), 'NOT 1';
my $arrayof = Type::Tiny::XS::get_coderef_for('ArrayRef[ArrayLike]');
ok $arrayof->( [ [], [1..3], $obj ] ), '$arrayof : 1';
ok !$arrayof->( [ [], [1..3], $obj, $obj2 ]), '$arrayof : 2';
if ( $] ge 5.010000 ) {
my $arraylikeof = Type::Tiny::XS::get_coderef_for('ArrayLike[Num]');
ok( $arraylikeof->( [ 1..4 ] ) );
ok( ! $arraylikeof->( [ 1..4, 'foo' ] ) );
ok( $arraylikeof->( $obj ) );
ok( ! $arraylikeof->( bless {}, 'Local::Overload3' ) );
ok( ! $arraylikeof->( $obj2 ) );
}
done_testing;
t/51hashlike.t view on Meta::CPAN
ok !Type::Tiny::XS::HashLike($obj), 'NOT $obj';
ok Type::Tiny::XS::HashLike($obj2), '$obj2';
ok Type::Tiny::XS::HashLike({}), '{}';
ok Type::Tiny::XS::HashLike({ bar => 666 }), '{ bar => 666 }';
ok !Type::Tiny::XS::HashLike(1), 'NOT 1';
my $arrayof = Type::Tiny::XS::get_coderef_for('ArrayRef[HashLike]');
ok $arrayof->( [ {}, {bar=>666}, $obj2 ] ), '$arrayof : 1';
ok !$arrayof->( [ {}, {bar=>666}, $obj ]), '$arrayof : 2';
if ( $] ge 5.010000 ) {
my $hashlikeof = Type::Tiny::XS::get_coderef_for('HashLike[Num]');
ok( $hashlikeof->( { 1..4 } ) );
ok( ! $hashlikeof->( { 1..4, xyz => 'foo' } ) );
ok( ! $hashlikeof->( $obj ) );
ok( $hashlikeof->( $obj2 ) );
ok( ! $hashlikeof->( bless [], 'Local::Overload3' ) );
ok( ! $hashlikeof->( [] ) );
ok( $hashlikeof->( {} ) );
}
( run in 2.321 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )