use
lib
qw( ./lib ./t/lib ../inc ./inc )
;
my
$new_type
= BigInteger->plus_coercions(
HashRef,
"999"
,
Undef,
sub
{ 666 },
);
my
$arr
= [];
my
$hash
= {};
ok(
$new_type
->coercion->has_coercion_for_type(HashRef),
'has_coercian_for_type - obvious'
,
);
ok(
$new_type
->coercion->has_coercion_for_type(HashRef[Num]),
'has_coercian_for_type - subtle'
,
);
ok(
not(
$new_type
->coercion->has_coercion_for_type(Ref[
"CODE"
])),
'has_coercian_for_type - negative'
,
);
is(
$new_type
->coerce(
$hash
), 999,
'plus_coercions - added coercion'
);
is(
$new_type
->coerce(
undef
), 666,
'plus_coercions - added coercion'
);
is(
$new_type
->coerce(-1), 11,
'plus_coercions - retained coercion'
);
is(
$new_type
->coerce(
$arr
), 100,
'plus_coercions - retained coercion'
);
my
$newer_type
=
$new_type
->minus_coercions(ArrayRef, Undef);
is(
$newer_type
->coerce(
$hash
), 999,
'minus_coercions - retained coercion'
);
is(
$newer_type
->coerce(
undef
),
undef
,
'minus_coercions - removed coercion'
);
is(
$newer_type
->coerce(-1), 11,
'minus_coercions - retained coercion'
);
is(
$newer_type
->coerce(
$arr
),
$arr
,
'minus_coercions - removed coercion'
);
my
$no_coerce
=
$new_type
->no_coercions;
dies_ok {
$no_coerce
->coerce(
$hash
) }
'no_coercions - removed coercion'
;
dies_ok {
$no_coerce
->coerce(
undef
) }
'no_coercions - removed coercion'
;
dies_ok {
$no_coerce
->coerce(-1) }
'no_coercions - removed coercion'
;
dies_ok {
$no_coerce
->coerce(
$arr
) }
'no_coercions - removed coercion'
;
done_testing;