1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
=pod
=encoding utf-8
=head1 PURPOSE
Checks that all this Type[Param] syntactic sugar works. In particular, the
following three type constraints are expected to be equivalent to each other:
use Types::Standard qw( ArrayRef Int Num Str );
use Type::Utils qw( union intersection );
my $type1 = ArrayRef[Int]
| ArrayRef[Num & ~Int]
| ArrayRef[Str & ~Num];
my $type2 = union [
ArrayRef[Int],
ArrayRef[Num & ~Int],
ArrayRef[Str & ~Num],
];
my $type3 = union([
ArrayRef->parameterize(Int),
ArrayRef->parameterize(
intersection([
Num,
Int->complementary_type,
]),
),
ArrayRef->parameterize(
intersection([
Str,
Num->complementary_type,
]),
),
]);
=head1 AUTHOR
Toby Inkster E<lt>tobyink@cpan.orgE<gt>.
=head1 COPYRIGHT AND LICENCE
This software is copyright (c) 2013-2014, 2017-2023 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
use strict;
use warnings;
use lib qw( . ./t ../inc ./inc );
use Test::More;
use Types::Standard qw( ArrayRef Int Num Str );
use Type::Utils qw( union intersection );
my $type1 = ArrayRef[Int] | ArrayRef[Num & ~Int] | ArrayRef[Str & ~Num];
my $type2 = union [
ArrayRef[Int],
ArrayRef[Num & ~Int],
ArrayRef[Str & ~Num],
];
my $type3 = union([
ArrayRef->parameterize(Int),
ArrayRef->parameterize(
intersection([
Num,
Int->complementary_type,
]),
),
ArrayRef->parameterize(
intersection([
Str,
Num->complementary_type,
]),
),
]);
ok($type1==$type2, '$type1==$type2');
ok($type1==$type3, '$type1==$type3');
ok($type2==$type3, '$type2==$type3');
done_testing;
|