$Test::Benchmark::VERBOSE
= 1;
{
sub
test {
my
$p_bool
= par
p_bool
=>
-Enum
=> [
0
=>
'1'
] =>
shift
;
my
$p_123
= par
p_123
=>
-Enum
=> {
1
=> 1,
2
=> 1,
3
=> 1} =>
shift
;
my
$p_free
= par
p_free
=>
sub
{
$_
> 5 } =>
shift
,
sub
{
"$_ is not larger than 5"
};
p_end \
@_
;
return
$p_bool
+
$p_123
+
$p_free
;
}
}
{
my
$_check
= compile Enum[0,1], Enum[1..3], Integer[
minExclusive
=> 5];
sub
test {
my
(
$p_bool
,
$p_123
,
$p_free
) =
$_check
->(
@_
);
return
$p_bool
+
$p_123
+
$p_free
;
}
}
subtest
"Scalar::Validation works ok"
=>
sub
{
is( UseSV::test(1,2,7), 10 );
like(
exception { UseSV::test(2,2,2) },
qr/^Error/
,
);
};
subtest
"Type::Params works ok"
=>
sub
{
is( UseTP::test(1,2,7), 10 );
like(
exception { UseTP::test(2,2,2) },
qr/did not pass type constraint/
,
);
};
is_fastest(
'TP'
, -1, {
SV
=>
q[ UseSV::test(1,2,7) ]
,
TP
=>
q[ UseTP::test(1,2,7) ]
,
},
'Type::Params is fastest at passing validations'
);
is_fastest(
'TP'
, -1, {
SV
=>
q[ eval { UseSV::test(1,2,3) } ]
,
TP
=>
q[ eval { UseTP::test(1,2,3) } ]
,
},
'Type::Params is fastest at failing validations'
);
done_testing;