File Coverage

blib/lib/Test/TypeTiny.pm
Criterion Covered Total %
statement 1722 1722 100.0
branch 36 38 94.7
condition 22 30 73.3
subroutine 574 574 100.0
pod 4 4 100.0
total 2358 2368 99.5


line stmt bran cond sub pod time code
1             package Test::TypeTiny;
2              
3 365     365   2912233 use strict;
  365         1464  
  365         23402  
4 365     365   2596 use warnings;
  365         940  
  365         26921  
5              
6 365     365   5127 use Test::More qw();
  365         82970  
  365         21308  
7 365     365   2487 use Scalar::Util qw(blessed);
  365         948  
  365         28026  
8 361     361   79212 use Types::TypeTiny ();
  361         1096  
  361         22448  
9 361     361   113019 use Type::Tiny ();
  361         1146  
  361         34079  
10              
11             require Exporter::Tiny;
12             our @ISA = 'Exporter::Tiny';
13              
14             BEGIN {
15 359 100   359   85093 *EXTENDED_TESTING = $ENV{EXTENDED_TESTING} ? sub() { !!1 } : sub() { !!0 };
16             }
17              
18             our $AUTHORITY = 'cpan:TOBYINK';
19             our $VERSION = '2.003_000';
20             our @EXPORT = qw( should_pass should_fail ok_subtype );
21             our @EXPORT_OK = qw( EXTENDED_TESTING matchfor );
22              
23             $VERSION =~ tr/_//d;
24              
25             my $overloads_installed = 0;
26              
27             sub matchfor {
28 221     220 1 6415 my @matchers = @_;
29 221         17884 bless \@matchers, do {
30             package #
31             Test::TypeTiny::Internal::MATCHFOR;
32 220 100       1709 Test::TypeTiny::Internal::MATCHFOR->Type::Tiny::_install_overloads(
33             q[==] => 'match',
34             q[eq] => 'match',
35             q[""] => 'to_string',
36             ) unless $overloads_installed++;
37            
38             sub to_string {
39 203     202   19659 $_[0][0];
40             }
41            
42             sub match {
43 218     218   1948 my ( $self, $e ) = @_;
44 218 100 33     943 my $does =
45             Scalar::Util::blessed( $e )
46             ? ( $e->can( 'DOES' ) || $e->can( 'isa' ) )
47             : undef;
48 218         17400 for my $s ( @$self ) {
49 225 100 100     2206 return 1 if ref( $s ) && $e =~ $s;
50 223 100 100     2161 return 1 if !ref( $s ) && $does && $e->$does( $s );
      100        
51             }
52 201         19586 return;
53             } #/ sub match
54 220         748 __PACKAGE__;
55             };
56             } #/ sub matchfor
57              
58             sub _mk_message {
59 2061     2061   12772 require Type::Tiny;
60 2061         5454 my ( $template, $value ) = @_;
61 2061         22431 sprintf( $template, Type::Tiny::_dd( $value ) );
62             }
63              
64             sub ok_subtype {
65 234     234 1 21877 my ( $type, @s ) = @_;
66 234         867 @_ = (
67             not( scalar grep !$_->is_subtype_of( $type ), @s ),
68             sprintf( "%s subtype: %s", $type, join q[, ], @s ),
69             );
70 234         18821 goto \&Test::More::ok;
71             }
72              
73 4172 50 33 4172 1 1205373 eval( EXTENDED_TESTING ? <<'SLOW' : <<'FAST');
  4172 100 100 1814 1 30481  
  4172 100 66 310   32943  
  4172 100 33 310   12075  
  4160 100 100 303   16571  
  4160 100 66 302   35954  
  4158 100   298   19895  
  4158 50   298   11352  
  4158 100   294   25548  
  4158 100   294   9989  
  4158 100   290   7068  
  4158 100   289   27602  
  4018 100   288   12187  
  4018 100   287   14654  
  4018     284   34366  
  4150     284   25315  
  4150     279   1828194  
  4150     279   2522446  
  4150     278   1569698  
  4150     276   1532467  
  4150     272   1529268  
  7849     272   1620088  
  4150     172   1491858  
  4150     172   3772677  
  1801     170   504368  
  1801     169   5023  
  1801     88   29179  
  1801     88   9513  
  1789     88   8351  
  1789     88   26358  
  1789     88   9615  
  1789     88   5482  
  1789     86   20732  
  1788     86   5223  
  1788     64   3359  
  1788     64   21852  
  1662     63   5957  
  1662     63   6467  
  1662     60   25181  
  1787     60   12027  
  1787     60   745303  
  1787     60   1058160  
  1787     58   659521  
  1787     58   630569  
  1787     58   642686  
  3142     58   642945  
  1787     57   593095  
  1787     57   1566801  
  295     56   2690  
  295     56   993  
  295     56   28541  
  295     56   2433  
  295     53   911  
  295     51   29013  
  295     49   2609  
  295     49   881  
  295     46   26710  
  293     46   2623  
  293     46   861  
  293     46   29462  
  286     44   2470  
  286     43   974  
  286     42   25188  
  286     41   2284  
  286     40   856  
  286     40   28964  
  284     40   2496  
  284     40   862  
  284     40   25316  
  284     40   2299  
  284     6   1009  
  284     6   28477  
  278     6   2418  
  278     6   1218  
  278     6   25842  
  277     6   2237  
  277     6   858  
  277     6   27335  
  195     6   1653  
  195     6   625  
  195     6   16632  
  195     6   1532  
  195     6   1023  
  195     6   19065  
  192     6   1536  
  192     6   576  
  192     6   17427  
  192     6   1491  
  192     6   563  
  192     6   19473  
  189     6   1619  
  189     6   597  
  189     6   16051  
  189     6   1506  
  189     6   570  
  189     6   19351  
  186     5   1597  
  186     5   634  
  186     5   16281  
  186     5   1426  
  186     5   597  
  186     5   18355  
  163     4   1370  
  163     4   541  
  163     4   15528  
  163     4   1283  
  163     4   942  
  163     4   17209  
  63     4   539  
  63     4   218  
  63     4   5111  
  63     4   478  
  63     4   173  
  63     4   6697  
  60     4   539  
  60     4   417  
  60     4   5925  
  60     4   540  
  60     4   212  
  60     4   6399  
  60     4   543  
  60     4   184  
  60     4   5655  
  60     4   452  
  60     4   216  
  60     4   6591  
  58     4   453  
  58     4   201  
  58     4   5354  
  58     4   459  
  58     4   192  
  58     4   6760  
  58     3   511  
  58     3   209  
  58     3   5194  
  58     3   480  
  58     2   186  
  58     2   6123  
  57     2   458  
  57     2   185  
  57     2   5333  
  57     2   462  
  57     2   2225  
  57     2   6666  
  56     2   472  
  56     2   185  
  56     2   4541  
  56     2   424  
  56     2   155  
  56     2   6862  
  56     2   776  
  56     2   336  
  56     2   5427  
  56     2   437  
  56     1   159  
  56     1   5532  
  53     1   402  
  53     1   185  
  53     1   4906  
  51     1   398  
  51     1   150  
  51     1   5743  
  49     1   426  
  49     1   143  
  49     1   4470  
  49     1   391  
  49     1   143  
  49     1   5408  
  46     1   424  
  46     1   134  
  46     1   4329  
  46     1   341  
  46     1   167  
  46     1   4556  
  46     1   365  
  46     1   135  
  46     1   4913  
  46     1   352  
  46     1   132  
  46     1   5001  
  44     1   653  
  44     1   322  
  44     1   4267  
  43     1   320  
  43     1   114  
  43     1   4838  
  42     1   348  
  42     1   166  
  42     1   4736  
  41     1   334  
  41     1   158  
  41     1   4327  
  40     1   365  
  40     1   116  
  40     1   3393  
  40     1   314  
  40     1   139  
  40     1   4794  
  40     1   485  
  40     1   151  
  40     1   4027  
  40     1   303  
  40     1   108  
  40     1   4560  
  40     1   344  
  40     1   158  
  40     1   3694  
  40     1   300  
  40     1   125  
  40     1   3825  
  6     1   46  
  6     1   17  
  6     1   579  
  6     1   54  
  6     1   20  
  6     1   671  
  6     1   50  
  6     1   21  
  6     1   744  
  6     1   47  
  6     1   29  
  6     1   804  
  6     1   48  
  6     1   36  
  6     1   586  
  6     1   39  
  6     1   19  
  6     1   554  
  6     1   52  
  6     1   29  
  6     1   564  
  6     1   406  
  6     1   21  
  6     1   655  
  6     1   51  
  6     1   18  
  6     1   591  
  6     1   61  
  6     1   20  
  6     1   669  
  6     1   51  
  6     1   16  
  6     1   633  
  6     1   46  
  6     1   13  
  6     1   535  
  6     1   46  
  6     1   18  
  6     1   506  
  6     1   42  
  6     1   41  
  6     1   717  
  6     1   44  
  6     1   24  
  6     1   700  
  6     1   48  
  6     1   21  
  6     1   797  
  6     1   58  
  6     1   17  
  6     1   574  
  6     1   42  
  6     1   18  
  6     1   507  
  6     1   49  
  6     1   17  
  6     1   557  
  6     1   39  
  6     1   24  
  6     1   715  
  6     1   56  
  6     1   16  
  6     1   571  
  6     1   47  
  6     1   21  
  6     1   782  
  6     1   44  
  6     1   26  
  6     1   680  
  6     1   60  
  6     1   17  
  6     1   475  
  6     1   43  
  6     1   14  
  6     1   680  
  6     1   50  
  6     1   14  
  6     1   722  
  5     1   42  
  5     1   15  
  5     1   381  
  5     1   35  
  5     1   11  
  5     1   521  
  5     1   40  
  5     1   13  
  5     1   711  
  5     1   40  
  5     1   13  
  5     1   568  
  5     1   51  
  5     1   16  
  5     1   462  
  5     1   37  
  5     1   17  
  5     1   576  
  4     1   28  
  4     1   11  
  4     1   492  
  4     1   42  
  4     1   13  
  4     1   599  
  4     1   34  
  4     1   16  
  4     1   443  
  4     1   27  
  4     1   10  
  4     1   324  
  4     1   45  
  4     1   12  
  4     1   691  
  4     1   35  
  4     1   13  
  4     1   736  
  4     1   37  
  4     1   16  
  4     1   292  
  4     1   31  
  4     1   10  
  4     1   452  
  4     1   36  
  4     1   11  
  4     1   699  
  4     1   28  
  4     1   13  
  4     1   466  
  4     1   32  
  4     1   12  
  4     1   395  
  4     1   30  
  4     1   13  
  4     1   529  
  4     1   40  
  4     1   13  
  4     1   482  
  4     1   41  
  4     1   15  
  4     1   604  
  4     1   32  
  4     1   10  
  4     1   420  
  4     1   40  
  4     1   12  
  4     1   367  
  4     1   31  
  4     1   12  
  4     1   588  
  4     1   32  
  4     1   16  
  4     1   672  
  4     1   40  
  4     1   12  
  4     1   358  
  4     1   34  
  4     1   11  
  4     1   515  
  4     1   36  
  4     1   10  
  4     1   819  
  4     1   33  
  4     1   10  
  4     1   499  
  4     1   38  
  4     1   11  
  4     1   402  
  4     1   37  
  4     1   10  
  4     1   563  
  4     1   34  
  4     1   10  
  4     1   533  
  4     1   35  
  4     1   14  
  4     1   583  
  4     1   40  
  4     1   27  
  4     1   666  
  4     1   32  
  4     1   17  
  4     1   496  
  4     1   30  
  4     1   12  
  4     1   622  
  4     1   30  
  4     1   20  
  4     1   709  
  3     1   22  
  3     1   6  
  3     1   258  
  3     1   29  
  3     1   6  
  3     1   396  
  3     1   33  
  3     1   10  
  3     1   435  
  3     1   24  
  3     1   11  
  3     1   282  
  2     1   16  
  2     1   4  
  2     1   274  
  2     1   17  
  2     1   10  
  2     1   425  
  2     1   16  
  2     1   6  
  2     1   208  
  2     1   15  
  2     1   6  
  2     1   301  
  2     1   17  
  2     1   9  
  2     1   291  
  2     1   17  
  2     1   5  
  2     1   196  
  2     1   18  
  2     1   6  
  2     1   194  
  2     1   14  
  2     1   11  
  2     1   286  
  2     1   21  
  2     1   6  
  2     1   207  
  2     1   24  
  2     1   7  
  2     1   233  
  2     1   30  
  2     1   5  
  2     1   340  
  2     1   20  
  2     1   5  
  2     1   273  
  2     1   16  
  2     1   4  
  2     1   282  
  2     1   13  
  2     1   10  
  2     1   270  
  2     1   16  
  2     1   4  
  2     1   256  
  2     1   15  
  2     1   5  
  2     1   279  
  2     1   14  
  2     1   4  
  2     1   274  
  2     1   26  
  2     1   14  
  2     1   256  
  1     1   7  
  1     1   2  
  1     1   98  
  1     1   7  
  1     1   3  
  1     1   75  
  1     1   7  
  1     1   2  
  1     1   55  
  1     1   6  
  1     1   3  
  1     1   85  
  1     1   7  
  1     1   3  
  1     1   51  
  1     1   11  
  1     1   2  
  1     1   59  
  1     1   7  
  1     1   2  
  1     1   86  
  1     1   7  
  1     1   3  
  1     1   69  
  1     1   7  
  1     1   2  
  1     1   54  
  1     1   12  
  1     1   13  
  1     1   88  
  1     1   13  
  1     1   4  
  1     1   55  
  1     1   6  
  1     1   3  
  1     1   64  
  1     1   7  
  1     1   3  
  1     1   70  
  1     1   6  
  1     1   13  
  1     1   83  
  1     1   7  
  1     1   2  
  1     1   58  
  1     1   7  
  1     1   5  
  1     1   94  
  1     1   7  
  1     1   3  
  1     1   65  
  1     1   7  
  1     1   4  
  1     1   61  
  1     1   8  
  1     1   4  
  1     1   77  
  1     1   6  
  1     1   2  
  1     1   52  
  1     1   6  
  1     1   2  
  1     1   57  
  1     1   17  
  1     1   3  
  1     1   91  
  1     1   11  
  1     1   10  
  1     1   56  
  1     1   6  
  1     1   7  
  1     1   43  
  1     1   7  
  1     1   11  
  1     1   92  
  1     1   8  
  1     1   4  
  1     1   88  
  1     1   10  
  1     1   2  
  1     1   58  
  1     1   15  
  1     1   7  
  1     1   90  
  1     1   8  
  1     1   2  
  1     1   66  
  1     1   7  
  1     1   2  
  1     1   65  
  1     1   7  
  1     1   3  
  1     1   91  
  1     1   12  
  1     1   9  
  1     1   55  
  1     1   15  
  1     1   2  
  1     1   60  
  1     1   21  
  1         3  
  1         83  
  1         8  
  1         5  
  1         85  
  1         10  
  1         12  
  1         55  
  1         7  
  1         2  
  1         89  
  1         17  
  1         6  
  1         55  
  1         7  
  1         9  
  1         59  
  1         10  
  1         2  
  1         89  
  1         6  
  1         11  
  1         66  
  1         7  
  1         3  
  1         60  
  1         6  
  1         19  
  1         98  
  1         7  
  1         2  
  1         55  
  1         6  
  1         6  
  1         73  
  1         7  
  1         3  
  1         110  
  1         6  
  1         3  
  1         70  
  1         7  
  1         7  
  1         87  
  1         7  
  1         4  
  1         84  
  1         7  
  1         13  
  1         69  
  1         7  
  1         4  
  1         62  
  1         8  
  1         3  
  1         88  
  1         7  
  1         11  
  1         55  
  1         6  
  1         2  
  1         60  
  1         7  
  1         2  
  1         95  
  1         11  
  1         2  
  1         73  
  1         9  
  1         4  
  1         66  
  1         8  
  1         2  
  1         82  
  1         8  
  1         3  
  1         59  
  1         7  
  1         4  
  1         71  
  1         6  
  1         2  
  1         86  
  1         12  
  1         3  
  1         81  
  1         16  
  1         3  
  1         70  
  1         7  
  1         2  
  1         83  
  1         8  
  1         3  
  1         114  
  1         10  
  1         4  
  1         58  
  1         11  
  1         3  
  1         105  
  1         7  
  1         6  
  1         67  
  1         14  
  1         6  
  1         78  
  1         7  
  1         2  
  1         88  
  1         8  
  1         4  
  1         56  
  1         8  
  1         1  
  1         69  
  1         7  
  1         2  
  1         108  
  1         9  
  1         5  
  1         86  
  1         13  
  1         2  
  1         53  
  1         8  
  1         3  
  1         96  
  1         12  
  1         2  
  1         55  
  1         6  
  1         4  
  1         55  
  1         10  
  1         4  
  1         92  
  1         5  
  1         3  
  1         95  
  1         8  
  1         2  
  1         63  
  1         6  
  1         3  
  1         83  
  1         8  
  1         2  
  1         55  
  1         6  
  1         3  
  1         64  
  1         6  
  1         3  
  1         87  
  1         18  
  1         14  
  1         105  
  1         8  
  1         2  
  1         60  
  1         7  
  1         2  
  1         99  
  1         8  
  1         3  
  1         52  
  1         7  
  1         2  
  1         62  
  1         10  
  1         4  
  1         83  
  1         12  
  1         3  
  1         80  
  1         9  
  1         6  
  1         54  
  1         17  
  1         3  
  1         86  
  1         7  
  1         2  
  1         57  
  1         6  
  1         2  
  1         72  
  1         10  
  1         2  
  1         85  
  1         7  
  1         3  
  1         53  
  1         13  
  1         7  
  1         57  
  1         14  
  1         3  
  1         90  
  1         8  
  1         8  
  1         57  
  1         10  
  1         3  
  1         57  
  1         9  
  1         8  
  1         81  
  1         13  
  1         2  
  1         57  
  1         8  
  1         6  
  1         63  
  1         7  
  1         13  
  1         85  
  1         7  
  1         2  
  1         66  
  1         7  
  1         8  
  1         55  
  1         12  
  1         3  
  1         89  
  1         12  
  1         2  
  1         58  
  1         6  
  1         5  
  1         56  
  1         6  
  1         3  
  1         81  
  1         7  
  1         3  
  1         81  
  1         14  
  1         3  
  1         55  
  1         8  
  1         3  
  1         93  
  1         6  
  1         3  
  1         53  
  1         9  
  1         3  
  1         56  
  1         7  
  1         3  
  1         102  
  1         7  
  1         2  
  1         66  
  1         8  
  1         2  
  1         45  
  1         7  
  1         3  
  1         93  
  1         14  
  1         3  
  1         54  
  1         6  
  1         2  
  1         64  
  1         15  
  1         4  
  1         88  
  1         10  
  1         3  
  1         56  
  1         6  
  1         5  
  1         60  
  1         8  
  1         2  
  1         109  
  1         9  
  1         2  
  1         66  
  1         7  
  1         3  
  1         65  
  1         8  
  1         2  
  1         87  
  1         15  
  1         9  
  1         57  
  1         6  
  1         2  
  1         77  
  1         7  
  1         4  
  1         80  
  1         7  
  1         4  
  1         79  
  1         9  
  1         5  
  1         74  
  1         12  
  1         6  
  1         101  
  1         8  
  1         5  
  1         54  
  1         16  
  1         17  
  1         56  
  1         12  
  1         10  
  1         95  
  1         8  
  1         3  
  1         56  
  1         6  
  1         6  
  1         67  
  1         7  
  1         3  
  1         84  
  1         6  
  1         4  
  1         66  
  1         7  
  1         2  
  1         61  
  1         7  
  1         2  
  1         88  
  1         7  
  1         3  
  1         71  
  1         7  
  1         3  
  1         57  
  1         9  
  1         2  
  1         86  
  1         21  
  1         4  
  1         80  
  1         7  
  1         10  
  1         54  
  1         10  
  1         3  
  1         90  
  1         10  
  1         2  
  1         218  
  1         9  
  1         2  
  1         46  
  1         7  
  1         12  
  1         80  
  1         7  
  1         4  
  1         66  
  1         7  
  1         2  
  1         62  
  1         7  
  1         3  
  1         84  
  1         7  
  1         3  
  1         66  
  1         11  
  1         7  
  1         41  
  1         6  
  1         4  
  1         87  
  1         18  
  1         3  
  1         58  
  1         6  
  1         3  
  1         55  
  1         7  
  1         2  
  1         107  
  1         7  
  1         11  
  1         69  
  1         8  
  1         2  
  1         67  
  1         9  
  1         3  
  1         84  
  1         7  
  1         3  
  1         53  
  1         6  
  1         2  
  1         59  
  1         7  
  1         2  
  1         87  
  1         7  
  1         12  
  1         55  
  1         6  
  1         7  
  1         72  
  1         7  
  1         4  
  1         86  
  1         7  
  1         12  
  1         53  
  1         8  
  1         5  
  1         42  
  1         7  
  1         14  
  1         82  
  1         8  
  1         2  
  1         63  
  1         7  
  1         2  
  1         52  
  1         12  
  1         9  
  1         79  
  1         7  
  1         2  
  1         53  
  1         10  
  1         2  
  1         56  
  1         7  
  1         13  
  1         101  
  1         9  
  1         3  
  1         66  
  1         10  
  1         8  
  1         62  
  1         7  
  1         2  
  1         83  
  1         7  
  1         12  
  1         75  
  1         7  
  1         7  
  1         53  
  1         7  
  1         2  
  1         80  
  1         8  
  1         2  
  1         54  
  1         6  
  1         2  
  1         55  
  1         7  
  1         2  
  1         79  
  1         7  
  1         2  
  1         62  
  1         7  
  1         2  
  1         54  
  1         7  
  1         3  
  1         92  
  1         7  
  1         3  
  1         53  
  1         6  
  1         2  
  1         54  
  1         12  
  1         5  
  1         81  
  1         10  
  1         2  
  1         73  
  1         13  
  1         8  
  1         59  
  1         7  
  1         2  
  1         84  
  1         7  
  1         6  
  1         67  
  1         8  
  1         2  
  1         54  
  1         7  
  1         6  
  1         100  
  1         7  
  1         2  
  1         64  
  1         10  
  1         2  
  1         59  
  1         10  
  1         3  
  1         96  
  1         7  
  1         2  
  1         56  
  1         12  
  1         37  
  1         61  
  1         8  
  1         3  
  1         84  
  1         7  
  1         3  
  1         68  
  1         8  
  1         4  
  1         52  
  1         7  
  1         5  
  1         87  
  1         7  
  1         4  
  1         104  
  1         8  
  1         3  
  1         58  
  1         11  
  1         2  
  1         80  
  1         6  
  1         2  
  1         64  
  1         7  
  1         2  
  1         57  
  1         7  
  1         3  
  1         93  
  1         8  
  1         7  
  1         56  
  1         6  
  1         5  
  1         61  
  1         12  
  1         4  
  1         98  
  1         6  
  1         3  
  1         72  
  1         11  
  1         7  
  1         68  
  1         7  
  1         2  
  1         87  
  1         7  
  1         2  
  1         83  
  1         7  
  1         2  
  1         55  
  1         14  
  1         4  
  1         98  
  1         8  
  1         3  
  1         69  
  1         9  
  1         2  
  1         55  
  1         11  
  1         3  
  1         81  
  1         8  
  1         2  
  1         67  
  1         6  
  1         8  
  1         66  
  1         9  
  1         2  
  1         84  
  1         13  
  1         2  
  1         70  
  1         11  
  1         3  
  1         52  
  1         8  
  1         2  
  1         89  
  1         8  
  1         7  
  1         53  
  1         8  
  1         4  
  1         66  
  1         8  
  1         10  
  1         81  
  1         7  
  1         7  
  1         73  
  1         6  
  1         2  
  1         52  
  1         9  
  1         3  
  1         102  
  1         7  
  1         4  
  1         53  
  1         10  
  1         2  
  1         54  
  1         8  
  1         2  
  1         82  
  1         12  
  1         3  
  1         70  
  1         10  
  1         2  
  1         67  
  1         7  
  1         3  
  1         83  
  1         9  
  1         3  
  1         56  
  1         7  
  1         18  
  1         58  
  1         9  
  1         2  
  1         81  
  1         7  
  1         2  
  1         66  
  1         8  
  1         3  
  1         52  
  1         7  
  1         5  
  1         83  
  1         9  
  1         3  
  1         54  
  1         7  
  1         3  
  1         53  
  1         8  
  1         3  
  1         98  
  1         7  
  1         2  
  1         56  
  1         6  
  1         12  
  1         135  
  1         11  
  1         6  
  1         89  
  1         9  
  1         3  
  1         67  
  1         7  
  1         10  
  1         52  
  1         8  
  1         2  
  1         80  
  1         8  
  1         2  
  1         69  
  1         8  
  1         2  
  1         53  
  1         6  
  1         3  
  1         80  
  1         7  
  1         3  
  1         64  
  1         7  
  1         3  
  1         52  
  1         7  
  1         2  
  1         81  
  1         8  
  1         3  
  1         52  
  1         7  
  1         3  
  1         60  
  1         9  
  1         3  
  1         81  
  1         7  
  1         3  
  1         65  
  1         9  
  1         2  
  1         53  
  1         7  
  1         8  
  1         79  
  1         7  
  1         3  
  1         68  
  1         9  
  1         3  
  1         56  
  1         7  
  1         4  
  1         79  
  1         7  
  1         2  
  1         66  
  1         11  
  1         3  
  1         55  
  1         7  
  1         9  
  1         92  
  1         9  
  1         4  
  1         55  
  1         6  
  1         3  
  1         57  
  1         7  
  1         4  
  1         98  
  1         16  
  1         7  
  1         69  
  1         8  
  1         3  
  1         68  
  1         7  
  1         8  
  1         89  
  1         16  
  1         2  
  1         55  
  1         8  
  1         2  
  1         54  
  1         7  
  1         3  
  1         93  
  1         8  
  1         2  
  1         65  
  1         7  
  1         4  
  1         53  
  1         7  
  1         2  
  1         85  
  1         8  
  1         4  
  1         55  
  1         7  
  1         3  
  1         54  
  1         9  
  1         2  
  1         98  
  1         8  
  1         7  
  1         76  
  1         8  
  1         3  
  1         59  
  1         17  
  1         3  
  1         105  
  1         19  
  1         6  
  1         66  
  1         7  
  1         2  
  1         54  
  1         7  
  1         9  
  1         86  
  1         9  
  1         13  
  1         55  
  1         7  
  1         3  
  1         65  
  1         7  
  1         2  
  1         84  
  1         15  
  1         3  
  1         70  
  1         8  
  1         7  
  1         63  
  1         8  
  1         3  
  1         85  
  1         6  
  1         15  
  1         51  
  1         8  
  1         6  
  1         56  
  1         7  
  1         3  
  1         90  
  1         6  
  1         3  
  1         67  
  1         7  
  1         2  
  1         59  
  1         14  
  1         3  
  1         100  
  1         7  
  1         6  
  1         103  
  1         7  
  1         2  
  1         61  
  1         11  
  1         2  
  1         88  
  1         7  
  1         4  
  1         75  
  1         7  
  1         5  
  1         108  
  1         11  
  1         6  
  1         82  
  1         6  
  1         3  
  1         65  
  1         13  
  1         7  
  1         58  
  1         11  
  1         5  
  1         114  
  1         7  
  1         4  
  1         54  
  1         7  
  1         13  
  1         56  
  1         9  
  1         3  
  1         86  
  1         9  
  1         3  
  1         61  
  1         7  
  1         3  
  1         82  
  1         12  
  1         3  
  1         139  
  1         16  
  1         3  
  1         53  
  1         6  
  1         5  
  1         91  
  1         8  
  1         3  
  1         88  
  1         8  
  1         3  
  1         65  
  1         8  
  1         2  
  1         56  
  1         7  
  1         16  
  1         130  
  1         7  
  1         4  
  1         65  
  1         9  
  1         3  
  1         57  
  1         10  
  1         3  
  1         111  
  1         12  
  1         4  
  1         69  
  1         8  
  1         3  
  1         70  
  1         21  
  1         2  
  1         98  
  1         17  
  1         3  
  1         79  
  1         14  
  1         3  
  1         60  
  1         7  
  1         3  
  1         91  
  1         8  
  1         2  
  1         57  
  1         6  
  1         3  
  1         61  
  1         13  
  1         13  
  1         88  
  1         13  
  1         3  
  1         65  
  1         9  
  1         2  
  1         55  
  1         11  
  1         2  
  1         90  
  1         7  
  1         2  
  1         78  
  1         8  
  1         7  
  1         57  
  1         10  
  1         10  
  1         108  
  1         20  
  1         4  
  1         58  
  1         8  
  1         3  
  1         76  
  1         7  
  1         14  
  1         84  
  1         12  
  1         4  
  1         63  
  1         6  
  1         3  
  1         98  
  1         8  
  1         4  
  1         76  
  1         9  
  1         3  
  1         59  
  1         7  
  1         2  
  1         69  
  1         14  
  1         3  
  1         106  
  1         12  
  1         4  
  1         101  
  1         11  
  1         5  
  1         59  
  1         11  
  1         8  
  1         73  
  1         7  
  1         2  
  1         76  
  1         19  
  1         6  
  1         59  
  1         7  
  1         3  
  1         90  
  1         6  
  1         3  
  1         58  
  1         7  
  1         3  
  1         59  
  1         7  
  1         3  
  1         97  
  1         7  
  1         3  
  1         69  
  1         13  
  1         2  
  1         57  
  1         12  
  1         11  
  1         87  
  1         7  
  1         10  
  1         54  
  1         18  
  1         2  
  1         43  
  1         9  
  1         27  
  1         88  
  1         16  
  1         11  
  1         55  
  1         11  
  1         13  
  1         60  
  1         7  
  1         3  
  1         122  
  1         10  
  1         14  
  1         98  
  1         8  
  1         2  
  1         124  
  1         9  
  1         4  
  1         94  
  1         11  
  1         6  
  1         141  
  1         13  
  1         2  
  1         97  
  1         15  
  1         2  
  1         132  
  1         17  
  1         2  
  1         99  
  1         14  
  1         3  
  1         102  
  1         10  
  1         5  
  1         85  
  1         27  
  1         2  
  1         107  
  1         7  
  1         5  
  1         96  
  1         8  
  1         4  
  1         92  
  1         11  
  1         2  
  1         51  
  1         9  
  1         3  
  1         51  
  1         7  
  1         2  
  1         82  
  1         7  
  1         6  
  1         66  
  1         7  
  1         11  
  1         65  
  1         24  
  1         4  
  1         81  
  1         6  
  1         3  
  1         76  
  1         8  
  1         3  
  1         53  
  1         18  
  1         3  
  1         82  
  1         11  
  1         3  
  1         49  
  1         9  
  1         3  
  1         51  
  1         14  
  1         7  
  1         78  
  1         9  
  1         3  
  1         51  
  1         11  
  1         9  
  1         67  
  1         7  
  1         3  
  1         79  
  1         10  
  1         2  
  1         66  
  1         11  
  1         3  
  1         48  
74              
75             sub should_pass
76             {
77             my ($value, $type, $message) = @_;
78            
79             local $Test::Builder::Level = $Test::Builder::Level + 1;
80             $type = Types::TypeTiny::to_TypeTiny($type) unless blessed($type) && $type->can("check");
81            
82             my $strictures = $type->can("_strict_check");
83             my $compiled = $type->can("compiled_check");
84             my $can_inline = $type->can("can_be_inlined") && $type->can_be_inlined && $type->can("inline_check");
85            
86             my $count = 1;
87             $count +=1 if $strictures;
88             $count +=1 if $compiled;
89             $count +=2 if $can_inline;
90            
91             my @codes;
92             if ( $can_inline ) {
93             push @codes, eval sprintf('no warnings; [ q(inlined), sub { my $VAR = shift; %s } ]', $type->inline_check('$VAR'));
94             local $Type::Tiny::AvoidCallbacks = 1;
95             push @codes, eval sprintf('no warnings; [ q(inlined avoiding callbacks), sub { my $VAR = shift; %s } ]', $type->inline_check('$VAR'));
96             }
97            
98             my $test = "Test::Builder"->new->child(
99             $message || _mk_message("%s passes type constraint $type", $value),
100             );
101             $test->plan(tests => $count);
102             $test->ok(!!$type->check($value), '->check');
103             $test->ok(!!$type->_strict_check($value), '->_strict_check') if $strictures;
104             $test->ok(!!$type->compiled_check->($value), '->compiled_check') if $compiled;
105             for my $code ( @codes ) {
106             $test->ok(!!$code->[1]->($value), $code->[0]);
107             }
108             $test->finalize;
109             return $test->is_passing;
110             }
111              
112             sub should_fail
113             {
114             my ($value, $type, $message) = @_;
115             $type = Types::TypeTiny::to_TypeTiny($type) unless blessed($type) && $type->can("check");
116            
117             local $Test::Builder::Level = $Test::Builder::Level + 1;
118            
119             my $strictures = $type->can("_strict_check");
120             my $compiled = $type->can("compiled_check");
121             my $can_inline = $type->can("can_be_inlined") && $type->can_be_inlined && $type->can("inline_check");
122            
123             my $count = 1;
124             $count +=1 if $strictures;
125             $count +=1 if $compiled;
126             $count +=2 if $can_inline;
127            
128             my @codes;
129             if ( $can_inline ) {
130             push @codes, eval sprintf('no warnings; [ q(inlined), sub { my $VAR = shift; %s } ]', $type->inline_check('$VAR'));
131             local $Type::Tiny::AvoidCallbacks = 1;
132             push @codes, eval sprintf('no warnings; [ q(inlined avoiding callbacks), sub { my $VAR = shift; %s } ]', $type->inline_check('$VAR'));
133             }
134            
135             my $test = "Test::Builder"->new->child(
136             $message || _mk_message("%s fails type constraint $type", $value),
137             );
138             $test->plan(tests => $count);
139             $test->ok(!$type->check($value), '->check');
140             $test->ok(!$type->_strict_check($value), '->_strict_check') if $strictures;
141             $test->ok(!$type->compiled_check->($value), '->compiled_check') if $compiled;
142             for my $code ( @codes ) {
143             $test->ok(!$code->[1]->($value), $code->[0]);
144             }
145             $test->finalize;
146             return $test->is_passing;
147             }
148              
149             SLOW
150              
151             sub should_pass
152             {
153             my ($value, $type, $message) = @_;
154             $type = Types::TypeTiny::to_TypeTiny($type) unless blessed($type) && $type->can("check");
155             @_ = (
156             !!$type->check($value),
157             $message || _mk_message("%s passes type constraint $type", $value),
158             );
159             goto \&Test::More::ok;
160             }
161              
162             sub should_fail
163             {
164             my ($value, $type, $message) = @_;
165             $type = Types::TypeTiny::to_TypeTiny($type) unless blessed($type) && $type->can("check");
166             @_ = (
167             !$type->check($value),
168             $message || _mk_message("%s fails type constraint $type", $value),
169             );
170             goto \&Test::More::ok;
171             }
172              
173             FAST
174              
175             1;
176              
177             __END__
178              
179             =pod
180              
181             =encoding utf-8
182              
183             =head1 NAME
184              
185             Test::TypeTiny - useful functions for testing the efficacy of type constraints
186              
187             =head1 SYNOPSIS
188              
189             =for test_synopsis
190             BEGIN { die "SKIP: uses a module that doesn't exist as an example" };
191              
192             use strict;
193             use warnings;
194             use Test::More;
195             use Test::TypeTiny;
196            
197             use Types::Mine qw(Integer Number);
198            
199             should_pass(1, Integer);
200             should_pass(-1, Integer);
201             should_pass(0, Integer);
202             should_fail(2.5, Integer);
203            
204             ok_subtype(Number, Integer);
205            
206             done_testing;
207              
208             =head1 STATUS
209              
210             This module is covered by the
211             L<Type-Tiny stability policy|Type::Tiny::Manual::Policies/"STABILITY">.
212              
213             =head1 DESCRIPTION
214              
215             L<Test::TypeTiny> provides a few handy functions for testing type constraints.
216              
217             =head2 Functions
218              
219             =over
220              
221             =item C<< should_pass($value, $type, $test_name) >>
222              
223             =item C<< should_pass($value, $type) >>
224              
225             Test that passes iff C<< $value >> passes C<< $type->check >>.
226              
227             =item C<< should_fail($value, $type, $test_name) >>
228              
229             =item C<< should_fail($value, $type) >>
230              
231             Test that passes iff C<< $value >> fails C<< $type->check >>.
232              
233             =item C<< ok_subtype($type, @subtypes) >>
234              
235             Test that passes iff all C<< @subtypes >> are subtypes of C<< $type >>.
236              
237             =item C<< EXTENDED_TESTING >>
238              
239             Exportable boolean constant.
240              
241             =item C<< matchfor(@things) >>
242              
243             Assistant for matching exceptions. Not exported by default.
244             See also L<Test::Fatal::matchfor>.
245              
246             =back
247              
248             =head1 ENVIRONMENT
249              
250             If the C<EXTENDED_TESTING> environment variable is set to true, this
251             module will promote each C<should_pass> or C<should_fail> test into a
252             subtest block and test the type constraint in both an inlined and
253             non-inlined manner.
254              
255             This variable must be set at compile time (i.e. before this module is
256             loaded).
257              
258             =head1 BUGS
259              
260             Please report any bugs to
261             L<https://github.com/tobyink/p5-type-tiny/issues>.
262              
263             =head1 SEE ALSO
264              
265             L<Type::Tiny>.
266              
267             For an alternative to C<should_pass>, see L<Test::Deep::Type> which will
268             happily accept a Type::Tiny type constraint instead of a MooseX::Types one.
269              
270             =head1 AUTHOR
271              
272             Toby Inkster E<lt>tobyink@cpan.orgE<gt>.
273              
274             =head1 COPYRIGHT AND LICENCE
275              
276             This software is copyright (c) 2013-2014, 2017-2023 by Toby Inkster.
277              
278             This is free software; you can redistribute it and/or modify it under
279             the same terms as the Perl 5 programming language system itself.
280              
281             =head1 DISCLAIMER OF WARRANTIES
282              
283             THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
284             WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
285             MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.