— |
sub same_type
{
my ( $a , $b , $msg ) = @_ ;
$msg ||= "$a == $b" ;
@_ = ( $a ->inline_check( '$x' ), $b ->inline_check( '$x' ), $msg );
goto \ &Test::More::is ;
}
same_type(
InstanceOf[],
Object,
);
same_type(
InstanceOf[ "Foo" ],
class_type( Foo => { class => "Foo" }),
);
same_type(
InstanceOf[ "Foo" , "Bar" ],
union [
class_type( Foo => { class => "Foo" }),
class_type( Bar => { class => "Bar" }),
],
);
same_type(
ConsumerOf[],
Object,
);
same_type(
ConsumerOf[ "Foo" ],
role_type( Foo => { role => "Foo" }),
);
same_type(
ConsumerOf[ "Foo" , "Bar" ],
intersection [
role_type( Foo => { role => "Foo" }),
role_type( Bar => { role => "Bar" }),
],
);
same_type(
HasMethods[],
Object,
);
same_type(
HasMethods[ "foo" ],
duck_type( CanFoo => [ qw/foo/ ]),
);
same_type(
HasMethods[ "foo" , "bar" ],
duck_type( CanFooBar => [ qw/foo bar/ ]),
);
same_type(
Enum[],
Str,
);
same_type(
Enum[ "foo" ],
enum( Foo => [ qw/foo/ ]),
);
same_type(
Enum[ "foo" , "bar" ],
enum( Foo => [ qw/foo bar/ ]),
);
done_testing;
|