my
$Even
= Int->create_child_type(
name
=>
'Even'
,
constraint
=>
sub
{ not
$_
% 2 });
my
$PositiveEven
=
$Even
& +PositiveInt;
should_pass(2,
$PositiveEven
);
should_fail(-2,
$PositiveEven
);
should_fail(1,
$PositiveEven
);
ok_subtype( Num ,=> Int, PositiveInt,
$Even
,
$PositiveEven
);
ok_subtype( Int ,=> PositiveInt,
$Even
,
$PositiveEven
);
ok_subtype( PositiveInt ,=>
$PositiveEven
);
ok_subtype(
$Even
,=>
$PositiveEven
);
ok_subtype(Num->create_child_type, Int, PositiveInt,
$Even
,
$PositiveEven
->create_child_type);
ok_subtype(Int->create_child_type, PositiveInt,
$Even
,
$PositiveEven
->create_child_type);
ok_subtype(PositiveInt->create_child_type,
$PositiveEven
->create_child_type);
ok_subtype(
$Even
->create_child_type,
$PositiveEven
->create_child_type);
ok_subtype(
$PositiveEven
,
$PositiveEven
->create_child_type);
ok(
$Even
>
$PositiveEven
,
'Even >'
);
ok(
$PositiveEven
<
$Even
,
'< Even'
);
ok(Int >
$PositiveEven
,
'Int >'
);
ok(
$PositiveEven
< Int,
'< Int'
);
ok(
$PositiveEven
==
$PositiveEven
->create_child_type,
'=='
);
done_testing;