File Coverage

blib/lib/Test/TypeTiny.pm
Criterion Covered Total %
statement 1722 1722 100.0
branch 28 38 73.6
condition 22 30 73.3
subroutine 574 574 100.0
pod 4 4 100.0
total 2350 2368 99.2


line stmt bran cond sub pod time code
1             package Test::TypeTiny;
2              
3 335     335   2879163 use strict;
  335         1402  
  335         22433  
4 335     335   2746 use warnings;
  335         993  
  335         23326  
5              
6 335     335   4453 use Test::More qw();
  335         77391  
  335         20252  
7 335     335   2394 use Scalar::Util qw(blessed);
  335         895  
  335         26119  
8 332     332   69067 use Types::TypeTiny ();
  332         1036  
  332         21374  
9 332     332   95000 use Type::Tiny ();
  332         1093  
  332         31368  
10              
11             require Exporter::Tiny;
12             our @ISA = 'Exporter::Tiny';
13              
14             BEGIN {
15 331 100   331   70948 *EXTENDED_TESTING = $ENV{EXTENDED_TESTING} ? sub() { !!1 } : sub() { !!0 };
16             }
17              
18             our $AUTHORITY = 'cpan:TOBYINK';
19             our $VERSION = '2.004000';
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 203     202 1 4924 my @matchers = @_;
29 203         17004 bless \@matchers, do {
30             package #
31             Test::TypeTiny::Internal::MATCHFOR;
32 202 100       1675 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 199     198   19117 $_[0][0];
40             }
41            
42             sub match {
43 200     200   1714 my ( $self, $e ) = @_;
44 200 100 33     1029 my $does =
45             Scalar::Util::blessed( $e )
46             ? ( $e->can( 'DOES' ) || $e->can( 'isa' ) )
47             : undef;
48 200         17028 for my $s ( @$self ) {
49 207 100 100     1916 return 1 if ref( $s ) && $e =~ $s;
50 205 100 100     904 return 1 if !ref( $s ) && $does && $e->$does( $s );
      100        
51             }
52 197         19086 return;
53             } #/ sub match
54 202         649 __PACKAGE__;
55             };
56             } #/ sub matchfor
57              
58             sub _mk_message {
59 1826     1826   10253 require Type::Tiny;
60 1826         5066 my ( $template, $value ) = @_;
61 1826         21526 sprintf( $template, Type::Tiny::_dd( $value ) );
62             }
63              
64             sub ok_subtype {
65 232     232 1 21085 my ( $type, @s ) = @_;
66 232         883 @_ = (
67             not( scalar grep !$_->is_subtype_of( $type ), @s ),
68             sprintf( "%s subtype: %s", $type, join q[, ], @s ),
69             );
70 232         18528 goto \&Test::More::ok;
71             }
72              
73 4070 50 33 4070 1 1169976 eval( EXTENDED_TESTING ? <<'SLOW' : <<'FAST');
  4070 50 100 1670 1 28219  
  4070 50 66 296   28772  
  4070 100 33 296   12097  
  4058 100 100 289   13137  
  4058 50 66 288   31416  
  4056 50   287   11404  
  4056 50   287   10742  
  4056 50   284   25152  
  4056 50   284   9857  
  4056 100   281   6779  
  4056 100   280   26937  
  3963 50   279   12283  
  3963 50   277   14476  
  3963     275   33852  
  4048     275   26205  
  4048     271   1783029  
  4048     271   2459687  
  4048     270   1515786  
  4048     268   1490289  
  4048     264   1490919  
  7741     264   1582868  
  4048     168   1460569  
  4048     168   3667332  
  1657     166   382907  
  1657     166   4681  
  1657     87   26701  
  1657     87   7252  
  1750     87   6570  
  1750     87   22782  
  1750     87   16197  
  1750     87   5958  
  1750     85   20140  
  1749     85   15111  
  1749     64   3909  
  1749     64   20790  
  1685     63   15127  
  1685     63   6941  
  1685     59   22680  
  1747     59   21676  
  1746     59   679569  
  1746     58   962475  
  1746     56   601811  
  1746     56   573820  
  1746     56   586529  
  3083     56   606260  
  1746     56   550916  
  1746     56   1426182  
  279     55   10861  
  279     55   1442  
  279     55   16030  
  279     55   11371  
  276     52   1500  
  276     51   17303  
  276     49   10706  
  276     49   1406  
  276     46   15456  
  274     46   11866  
  273     46   1673  
  273     46   18210  
  270     44   9442  
  270     43   1389  
  270     42   15013  
  270     41   11218  
  268     40   1374  
  268     40   18867  
  266     40   10900  
  266     40   1389  
  266     40   14852  
  266     40   10887  
  264     6   1333  
  264     6   16302  
  262     6   9535  
  262     6   1316  
  262     6   14646  
  262     6   11684  
  261     6   1539  
  261     6   16524  
  182     6   9177  
  182     6   1091  
  182     6   8096  
  182     6   9916  
  181     6   1112  
  181     6   8908  
  181     6   9265  
  181     6   1061  
  181     6   7812  
  181     6   9942  
  87     6   269  
  87     6   8782  
  87     6   735  
  87     6   306  
  87     6   6883  
  87     6   745  
  87     6   264  
  87     6   8503  
  85     5   733  
  85     5   263  
  85     5   7544  
  85     5   712  
  85     5   248  
  85     5   7822  
  64     4   550  
  64     4   185  
  64     4   6386  
  64     4   672  
  64     4   246  
  64     4   7417  
  63     4   541  
  63     4   203  
  63     4   5264  
  63     4   528  
  63     4   178  
  63     4   7283  
  59     4   531  
  59     4   209  
  59     4   5665  
  59     4   661  
  59     4   195  
  59     4   6364  
  59     4   476  
  59     4   188  
  59     4   5303  
  58     4   503  
  58     4   208  
  58     4   6374  
  56     4   490  
  56     4   158  
  56     4   5163  
  56     4   503  
  56     4   190  
  56     4   6437  
  56     3   469  
  56     3   182  
  56     3   4948  
  56     3   502  
  56     2   170  
  56     2   6008  
  56     2   471  
  56     2   175  
  56     2   5744  
  56     2   478  
  56     2   180  
  56     2   6680  
  55     2   449  
  55     2   193  
  55     2   4402  
  55     2   441  
  55     2   165  
  55     2   6484  
  55     2   439  
  55     2   163  
  55     2   5437  
  55     2   599  
  55     1   160  
  55     1   5551  
  52     1   425  
  52     1   158  
  52     1   4905  
  51     1   438  
  51     1   157  
  51     1   5655  
  49     1   440  
  49     1   216  
  49     1   4688  
  49     1   411  
  49     1   183  
  49     1   5529  
  46     1   371  
  46     1   189  
  46     1   4722  
  46     1   379  
  46     1   135  
  46     1   4653  
  46     1   356  
  46     1   153  
  46     1   4831  
  46     1   378  
  46     1   177  
  46     1   5147  
  44     1   377  
  44     1   158  
  44     1   4171  
  43     1   374  
  43     1   116  
  43     1   4907  
  42     1   349  
  42     1   165  
  42     1   4560  
  41     1   549  
  41     1   276  
  41     1   3923  
  40     1   304  
  40     1   150  
  40     1   3495  
  40     1   314  
  40     1   132  
  40     1   4179  
  40     1   324  
  40     1   366  
  40     1   4474  
  40     1   321  
  40     1   122  
  40     1   4460  
  40     1   334  
  40     1   132  
  40     1   3693  
  40     1   317  
  40     1   160  
  40     1   3704  
  6     1   45  
  6     1   18  
  6     1   496  
  6     1   43  
  6     1   19  
  6     1   722  
  6     1   66  
  6     1   21  
  6     1   682  
  6     1   47  
  6     1   21  
  6     1   820  
  6     1   86  
  6     1   19  
  6     1   553  
  6     1   42  
  6     1   30  
  6     1   524  
  6     1   52  
  6     1   19  
  6     1   591  
  6     1   49  
  6     1   34  
  6     1   1311  
  6     1   53  
  6     1   20  
  6     1   619  
  6     1   48  
  6     1   18  
  6     1   654  
  6     1   48  
  6     1   19  
  6     1   614  
  6     1   43  
  6     1   15  
  6     1   488  
  6     1   47  
  6     1   20  
  6     1   509  
  6     1   60  
  6     1   17  
  6     1   660  
  6     1   47  
  6     1   19  
  6     1   700  
  6     1   54  
  6     1   20  
  6     1   723  
  6     1   47  
  6     1   15  
  6     1   574  
  6     1   46  
  6     1   23  
  6     1   477  
  6     1   53  
  6     1   19  
  6     1   533  
  6     1   48  
  6     1   16  
  6     1   632  
  6     1   43  
  6     1   18  
  6     1   538  
  6     1   46  
  6     1   18  
  6     1   762  
  6     1   60  
  6     1   16  
  6     1   579  
  6     1   56  
  6     1   15  
  6     1   445  
  6     1   51  
  6     1   14  
  6     1   677  
  6     1   57  
  6     1   22  
  6     1   731  
  5     1   43  
  5     1   11  
  5     1   351  
  5     1   37  
  5     1   12  
  5     1   490  
  5     1   36  
  5     1   25  
  5     1   711  
  5     1   46  
  5     1   13  
  5     1   582  
  5     1   55  
  5     1   22  
  5     1   466  
  5     1   37  
  5     1   20  
  5     1   613  
  4     1   30  
  4     1   11  
  4     1   495  
  4     1   28  
  4     1   11  
  4     1   614  
  4     1   32  
  4     1   9  
  4     1   475  
  4     1   26  
  4     1   12  
  4     1   344  
  4     1   39  
  4     1   10  
  4     1   603  
  4     1   94  
  4     1   21  
  4     1   687  
  4     1   33  
  4     1   9  
  4     1   661  
  4     1   29  
  4     1   11  
  4     1   416  
  4     1   32  
  4     1   9  
  4     1   655  
  4     1   31  
  4     1   22  
  4     1   500  
  4     1   42  
  4     1   14  
  4     1   511  
  4     1   58  
  4     1   20  
  4     1   566  
  4     1   32  
  4     1   14  
  4     1   473  
  4     1   40  
  4     1   22  
  4     1   587  
  4     1   29  
  4     1   31  
  4     1   417  
  4     1   25  
  4     1   11  
  4     1   361  
  4     1   45  
  4     1   11  
  4     1   617  
  4     1   37  
  4     1   18  
  4     1   661  
  4     1   37  
  4     1   13  
  4     1   281  
  4     1   26  
  4     1   18  
  4     1   515  
  4     1   30  
  4     1   14  
  4     1   693  
  4     1   31  
  4     1   15  
  4     1   598  
  4     1   31  
  4     1   10  
  4     1   420  
  4     1   27  
  4     1   15  
  4     1   550  
  4     1   35  
  4     1   20  
  4     1   548  
  4     1   43  
  4     1   27  
  4     1   568  
  4     1   43  
  4     1   12  
  4     1   740  
  4     1   31  
  4     1   15  
  4     1   468  
  4     1   83  
  4     1   9  
  4     1   626  
  4     1   36  
  4     1   17  
  4     1   697  
  3     1   22  
  3     1   13  
  3     1   304  
  3     1   23  
  3     1   8  
  3     1   370  
  3     1   36  
  3     1   8  
  3     1   435  
  3     1   19  
  3     1   7  
  3     1   276  
  2     1   15  
  2     1   19  
  2     1   277  
  2     1   27  
  2     1   7  
  2     1   379  
  2     1   14  
  2     1   25  
  2     1   216  
  2     1   22  
  2     1   8  
  2     1   303  
  2     1   16  
  2     1   5  
  2     1   297  
  2     1   16  
  2     1   4  
  2     1   207  
  2     1   16  
  2     1   5  
  2     1   220  
  2     1   26  
  2     1   5  
  2     1   263  
  2     1   27  
  2     1   11  
  2     1   175  
  2     1   15  
  2     1   6  
  2     1   220  
  2     1   17  
  2     1   6  
  2     1   275  
  2     1   19  
  2     1   6  
  2     1   290  
  2     1   15  
  2     1   11  
  2     1   282  
  2     1   14  
  2     1   4  
  2     1   247  
  2     1   14  
  2     1   5  
  2     1   269  
  2     1   14  
  2     1   5  
  2     1   291  
  2     1   14  
  2     1   6  
  2     1   288  
  2     1   18  
  2     1   16  
  2     1   278  
  1     1   7  
  1     1   4  
  1     1   80  
  1     1   7  
  1     1   3  
  1     1   75  
  1     1   7  
  1     1   2  
  1     1   58  
  1     1   7  
  1     1   2  
  1     1   88  
  1     1   9  
  1     1   3  
  1     1   52  
  1     1   5  
  1     1   2  
  1     1   57  
  1     1   9  
  1     1   3  
  1     1   132  
  1     1   6  
  1     1   3  
  1     1   67  
  1     1   6  
  1     1   2  
  1     1   58  
  1     1   6  
  1     1   3  
  1     1   83  
  1     1   7  
  1     1   2  
  1     1   52  
  1     1   6  
  1     1   6  
  1     1   58  
  1     1   10  
  1     1   2  
  1     1   71  
  1     1   7  
  1     1   2  
  1     1   81  
  1     1   7  
  1     1   13  
  1     1   60  
  1     1   6  
  1     1   2  
  1     1   90  
  1     1   7  
  1     1   2  
  1     1   64  
  1     1   7  
  1     1   2  
  1     1   57  
  1     1   7  
  1     1   3  
  1     1   88  
  1     1   7  
  1     1   2  
  1     1   53  
  1     1   6  
  1     1   3  
  1     1   57  
  1     1   7  
  1     1   3  
  1     1   114  
  1     1   7  
  1     1   2  
  1     1   83  
  1     1   8  
  1     1   6  
  1     1   48  
  1     1   7  
  1     1   13  
  1     1   85  
  1     1   8  
  1     1   2  
  1     1   64  
  1     1   6  
  1     1   2  
  1     1   71  
  1     1   7  
  1     1   3  
  1     1   94  
  1     1   9  
  1     1   3  
  1     1   70  
  1     1   8  
  1     1   2  
  1     1   55  
  1     1   6  
  1     1   8  
  1     1   87  
  1     1   7  
  1     1   3  
  1     1   51  
  1     1   6  
  1     1   2  
  1     1   62  
  1     1   8  
  1         3  
  1         81  
  1         7  
  1         2  
  1         67  
  1         7  
  1         3  
  1         55  
  1         26  
  1         3  
  1         86  
  1         7  
  1         2  
  1         74  
  1         8  
  1         2  
  1         69  
  1         7  
  1         2  
  1         83  
  1         7  
  1         3  
  1         53  
  1         6  
  1         2  
  1         57  
  1         7  
  1         2  
  1         96  
  1         8  
  1         2  
  1         64  
  1         7  
  1         2  
  1         112  
  1         7  
  1         2  
  1         101  
  1         13  
  1         2  
  1         55  
  1         6  
  1         3  
  1         57  
  1         7  
  1         2  
  1         83  
  1         7  
  1         3  
  1         66  
  1         7  
  1         2  
  1         57  
  1         6  
  1         3  
  1         88  
  1         8  
  1         2  
  1         54  
  1         6  
  1         2  
  1         57  
  1         9  
  1         3  
  1         85  
  1         7  
  1         3  
  1         53  
  1         15  
  1         4  
  1         56  
  1         17  
  1         7  
  1         99  
  1         7  
  1         3  
  1         53  
  1         9  
  1         3  
  1         71  
  1         15  
  1         2  
  1         104  
  1         19  
  1         3  
  1         59  
  1         6  
  1         3  
  1         97  
  1         15  
  1         3  
  1         83  
  1         8  
  1         4  
  1         51  
  1         8  
  1         11  
  1         57  
  1         7  
  1         2  
  1         87  
  1         7  
  1         2  
  1         65  
  1         7  
  1         2  
  1         58  
  1         8  
  1         3  
  1         84  
  1         8  
  1         2  
  1         76  
  1         8  
  1         3  
  1         65  
  1         7  
  1         8  
  1         97  
  1         10  
  1         6  
  1         53  
  1         11  
  1         3  
  1         59  
  1         7  
  1         3  
  1         82  
  1         9  
  1         2  
  1         56  
  1         6  
  1         2  
  1         65  
  1         9  
  1         3  
  1         84  
  1         9  
  1         3  
  1         52  
  1         7  
  1         4  
  1         55  
  1         8  
  1         3  
  1         82  
  1         8  
  1         2  
  1         65  
  1         7  
  1         3  
  1         55  
  1         13  
  1         3  
  1         87  
  1         13  
  1         3  
  1         70  
  1         7  
  1         3  
  1         59  
  1         7  
  1         2  
  1         87  
  1         9  
  1         4  
  1         82  
  1         7  
  1         3  
  1         58  
  1         8  
  1         3  
  1         98  
  1         8  
  1         2  
  1         61  
  1         6  
  1         2  
  1         58  
  1         8  
  1         2  
  1         70  
  1         8  
  1         3  
  1         54  
  1         6  
  1         11  
  1         64  
  1         7  
  1         7  
  1         92  
  1         7  
  1         3  
  1         54  
  1         6  
  1         3  
  1         57  
  1         8  
  1         2  
  1         85  
  1         7  
  1         2  
  1         72  
  1         9  
  1         3  
  1         56  
  1         7  
  1         4  
  1         84  
  1         9  
  1         3  
  1         55  
  1         8  
  1         5  
  1         56  
  1         7  
  1         2  
  1         117  
  1         9  
  1         5  
  1         72  
  1         9  
  1         3  
  1         59  
  1         7  
  1         7  
  1         82  
  1         11  
  1         6  
  1         69  
  1         9  
  1         5  
  1         60  
  1         20  
  1         2  
  1         87  
  1         7  
  1         3  
  1         52  
  1         11  
  1         5  
  1         65  
  1         8  
  1         2  
  1         88  
  1         6  
  1         2  
  1         79  
  1         10  
  1         8  
  1         63  
  1         7  
  1         4  
  1         89  
  1         7  
  1         3  
  1         57  
  1         7  
  1         3  
  1         43  
  1         11  
  1         14  
  1         84  
  1         8  
  1         4  
  1         54  
  1         11  
  1         1  
  1         58  
  1         8  
  1         2  
  1         113  
  1         10  
  1         7  
  1         52  
  1         8  
  1         2  
  1         69  
  1         7  
  1         3  
  1         87  
  1         6  
  1         11  
  1         64  
  1         10  
  1         8  
  1         61  
  1         24  
  1         5  
  1         85  
  1         46  
  1         6  
  1         85  
  1         23  
  1         2  
  1         59  
  1         6  
  1         2  
  1         91  
  1         6  
  1         9  
  1         85  
  1         7  
  1         3  
  1         78  
  1         7  
  1         3  
  1         92  
  1         18  
  1         3  
  1         56  
  1         6  
  1         2  
  1         59  
  1         10  
  1         3  
  1         96  
  1         16  
  1         6  
  1         71  
  1         7  
  1         3  
  1         56  
  1         25  
  1         2  
  1         83  
  1         6  
  1         3  
  1         67  
  1         8  
  1         13  
  1         68  
  1         18  
  1         13  
  1         93  
  1         7  
  1         4  
  1         60  
  1         5  
  1         7  
  1         56  
  1         7  
  1         4  
  1         126  
  1         7  
  1         3  
  1         65  
  1         7  
  1         7  
  1         57  
  1         15  
  1         3  
  1         83  
  1         6  
  1         3  
  1         65  
  1         10  
  1         5  
  1         57  
  1         7  
  1         3  
  1         244  
  1         6  
  1         3  
  1         61  
  1         7  
  1         2  
  1         88  
  1         11  
  1         3  
  1         86  
  1         11  
  1         3  
  1         79  
  1         12  
  1         3  
  1         71  
  1         7  
  1         2  
  1         70  
  1         7  
  1         3  
  1         65  
  1         7  
  1         2  
  1         59  
  1         9  
  1         3  
  1         79  
  1         7  
  1         3  
  1         73  
  1         8  
  1         5  
  1         67  
  1         8  
  1         4  
  1         86  
  1         6  
  1         7  
  1         116  
  1         8  
  1         3  
  1         53  
  1         7  
  1         3  
  1         81  
  1         6  
  1         3  
  1         54  
  1         8  
  1         3  
  1         54  
  1         7  
  1         2076  
  1         93  
  1         8  
  1         4  
  1         54  
  1         6  
  1         3  
  1         58  
  1         7  
  1         2  
  1         97  
  1         8  
  1         2  
  1         63  
  1         7  
  1         3  
  1         58  
  1         13  
  1         2  
  1         70  
  1         7  
  1         4  
  1         50  
  1         5  
  1         2  
  1         55  
  1         11  
  1         2  
  1         90  
  1         7  
  1         2  
  1         66  
  1         6  
  1         2  
  1         55  
  1         10  
  1         2  
  1         95  
  1         6  
  1         3  
  1         74  
  1         7  
  1         15  
  1         57  
  1         7  
  1         3  
  1         79  
  1         7  
  1         2  
  1         68  
  1         7  
  1         2  
  1         59  
  1         7  
  1         2  
  1         86  
  1         6  
  1         3  
  1         64  
  1         8  
  1         2  
  1         57  
  1         7  
  1         13  
  1         81  
  1         22  
  1         2  
  1         53  
  1         6  
  1         2  
  1         66  
  1         8  
  1         2  
  1         137  
  1         7  
  1         3  
  1         73  
  1         8  
  1         5  
  1         54  
  1         6  
  1         2  
  1         88  
  1         6  
  1         3  
  1         52  
  1         7  
  1         2  
  1         60  
  1         7  
  1         2  
  1         84  
  1         7  
  1         2  
  1         64  
  1         7  
  1         2  
  1         64  
  1         6  
  1         3  
  1         95  
  1         6  
  1         2  
  1         53  
  1         7  
  1         2  
  1         54  
  1         7  
  1         2  
  1         81  
  1         12  
  1         4  
  1         73  
  1         18  
  1         6  
  1         58  
  1         10  
  1         8  
  1         93  
  1         6  
  1         3  
  1         83  
  1         9  
  1         1  
  1         57  
  1         8  
  1         3  
  1         82  
  1         9  
  1         2  
  1         66  
  1         7  
  1         2  
  1         53  
  1         7  
  1         4  
  1         85  
  1         7  
  1         2  
  1         67  
  1         10  
  1         3  
  1         65  
  1         7  
  1         2  
  1         84  
  1         9  
  1         4  
  1         53  
  1         6  
  1         12  
  1         56  
  1         8  
  1         2  
  1         83  
  1         9  
  1         3  
  1         68  
  1         9  
  1         3  
  1         54  
  1         7  
  1         3  
  1         86  
  1         7  
  1         15  
  1         53  
  1         6  
  1         8  
  1         58  
  1         7  
  1         2  
  1         83  
  1         7  
  1         2  
  1         55  
  1         7  
  1         5  
  1         53  
  1         6  
  1         3  
  1         85  
  1         8  
  1         3  
  1         64  
  1         9  
  1         2  
  1         58  
  1         11  
  1         2  
  1         83  
  1         15  
  1         2  
  1         55  
  1         6  
  1         3  
  1         92  
  1         17  
  1         2  
  1         114  
  1         7  
  1         12  
  1         75  
  1         7  
  1         2  
  1         55  
  1         7  
  1         3  
  1         87  
  1         6  
  1         3  
  1         54  
  1         10  
  1         2  
  1         65  
  1         16  
  1         2  
  1         92  
  1         7  
  1         3  
  1         80  
  1         11  
  1         3  
  1         55  
  1         9  
  1         3  
  1         87  
  1         12  
  1         11  
  1         52  
  1         8  
  1         6  
  1         63  
  1         8  
  1         10  
  1         83  
  1         6  
  1         3  
  1         72  
  1         10  
  1         3  
  1         76  
  1         8  
  1         12  
  1         84  
  1         11  
  1         3  
  1         53  
  1         8  
  1         3  
  1         58  
  1         7  
  1         3  
  1         97  
  1         14  
  1         2  
  1         52  
  1         14  
  1         12  
  1         60  
  1         8  
  1         13  
  1         85  
  1         7  
  1         3  
  1         68  
  1         12  
  1         2  
  1         63  
  1         9  
  1         5  
  1         136  
  1         7  
  1         7  
  1         70  
  1         7  
  1         5  
  1         55  
  1         9  
  1         9  
  1         82  
  1         19  
  1         4  
  1         57  
  1         10  
  1         2  
  1         55  
  1         12  
  1         3  
  1         88  
  1         11  
  1         4  
  1         71  
  1         8  
  1         2  
  1         66  
  1         14  
  1         10  
  1         81  
  1         6  
  1         2  
  1         81  
  1         12  
  1         2  
  1         57  
  1         6  
  1         3  
  1         94  
  1         28  
  1         3  
  1         55  
  1         11  
  1         3  
  1         56  
  1         8  
  1         2  
  1         81  
  1         10  
  1         2  
  1         67  
  1         8  
  1         2  
  1         56  
  1         15  
  1         4  
  1         98  
  1         13  
  1         2  
  1         53  
  1         6  
  1         3  
  1         56  
  1         12  
  1         3  
  1         92  
  1         8  
  1         2  
  1         52  
  1         20  
  1         4  
  1         55  
  1         7  
  1         6  
  1         69  
  1         12  
  1         4  
  1         57  
  1         5  
  1         3  
  1         57  
  1         7  
  1         3  
  1         90  
  1         7  
  1         4  
  1         53  
  1         6  
  1         11  
  1         59  
  1         8  
  1         2  
  1         81  
  1         23  
  1         2  
  1         59  
  1         12  
  1         2  
  1         90  
  1         12  
  1         4  
  1         87  
  1         10  
  1         3  
  1         77  
  1         8  
  1         10  
  1         70  
  1         7  
  1         3  
  1         83  
  1         6  
  1         2  
  1         54  
  1         8  
  1         2  
  1         57  
  1         6  
  1         3  
  1         83  
  1         7  
  1         3  
  1         53  
  1         10  
  1         1  
  1         57  
  1         6  
  1         3  
  1         83  
  1         12  
  1         4  
  1         79  
  1         11  
  1         3  
  1         60  
  1         7  
  1         2  
  1         85  
  1         8  
  1         3  
  1         77  
  1         8  
  1         2  
  1         60  
  1         8  
  1         3  
  1         84  
  1         6  
  1         4  
  1         69  
  1         8  
  1         3  
  1         58  
  1         18  
  1         2  
  1         83  
  1         6  
  1         4  
  1         63  
  1         7  
  1         4  
  1         68  
  1         13  
  1         2  
  1         91  
  1         8  
  1         3  
  1         68  
  1         8  
  1         2  
  1         56  
  1         6  
  1         5  
  1         82  
  1         12  
  1         5  
  1         56  
  1         8  
  1         3  
  1         69  
  1         10  
  1         2  
  1         81  
  1         8  
  1         8  
  1         65  
  1         7  
  1         3  
  1         58  
  1         10  
  1         3  
  1         89  
  1         20  
  1         3  
  1         52  
  1         9  
  1         8  
  1         76  
  1         7  
  1         2  
  1         87  
  1         7  
  1         6  
  1         60  
  1         7  
  1         5  
  1         66  
  1         11  
  1         3  
  1         82  
  1         9  
  1         2  
  1         65  
  1         7  
  1         3  
  1         60  
  1         6  
  1         3  
  1         89  
  1         7  
  1         3  
  1         64  
  1         8  
  1         2  
  1         57  
  1         18  
  1         3  
  1         86  
  1         10  
  1         2  
  1         75  
  1         11  
  1         3  
  1         60  
  1         6  
  1         13  
  1         87  
  1         9  
  1         2  
  1         52  
  1         6  
  1         3  
  1         58  
  1         23  
  1         7  
  1         80  
  1         6  
  1         12  
  1         67  
  1         9  
  1         3  
  1         57  
  1         6  
  1         15  
  1         96  
  1         13  
  1         8  
  1         81  
  1         7  
  1         3  
  1         58  
  1         7  
  1         2  
  1         108  
  1         9  
  1         2  
  1         64  
  1         7  
  1         3  
  1         54  
  1         7  
  1         3  
  1         84  
  1         8  
  1         2  
  1         67  
  1         8  
  1         2  
  1         55  
  1         8  
  1         3  
  1         87  
  1         7  
  1         3  
  1         55  
  1         7  
  1         2  
  1         57  
  1         7  
  1         3  
  1         85  
  1         7  
  1         3  
  1         65  
  1         7  
  1         4  
  1         62  
  1         7  
  1         3  
  1         85  
  1         9  
  1         2  
  1         73  
  1         9  
  1         3  
  1         47  
  1         7  
  1         4  
  1         75  
  1         6  
  1         3  
  1         67  
  1         7  
  1         6  
  1         56  
  1         8  
  1         2  
  1         91  
  1         18  
  1         3  
  1         52  
  1         7  
  1         2  
  1         57  
  1         8  
  1         3  
  1         84  
  1         9  
  1         2  
  1         53  
  1         6  
  1         6  
  1         76  
  1         7  
  1         2  
  1         85  
  1         7  
  1         2  
  1         51  
  1         6  
  1         3  
  1         43  
  1         16  
  1         2  
  1         86  
  1         9  
  1         2  
  1         75  
  1         7  
  1         1  
  1         55  
  1         9  
  1         5  
  1         113  
  1         9  
  1         2  
  1         98  
  1         7  
  1         3  
  1         103  
  1         10  
  1         4  
  1         99  
  1         7  
  1         2  
  1         117  
  1         7  
  1         5  
  1         144  
  1         7  
  1         3  
  1         139  
  1         9  
  1         11  
  1         100  
  1         7  
  1         4  
  1         120  
  1         7  
  1         2  
  1         111  
  1         7  
  1         2  
  1         112  
  1         7  
  1         5  
  1         120  
  1         11  
  1         4  
  1         80  
  1         7  
  1         5  
  1         51  
  1         6  
  1         2  
  1         52  
  1         8  
  1         2  
  1         83  
  1         7  
  1         2  
  1         49  
  1         7  
  1         2  
  1         53  
  1         9  
  1         7  
  1         87  
  1         8  
  1         2  
  1         48  
  1         7  
  1         2  
  1         50  
  1         14  
  1         2  
  1         95  
  1         7  
  1         3  
  1         51  
  1         8  
  1         2  
  1         48  
  1         7  
  1         9  
  1         78  
  1         19  
  1         2  
  1         61  
  1         9  
  1         3  
  1         99  
  1         9  
  1         3  
  1         98  
  1         11  
  1         3  
  1         62  
  1         7  
  1         3  
  1         50  
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__