File Coverage

blib/lib/Test/TypeTiny.pm
Criterion Covered Total %
statement 1773 1773 100.0
branch 28 38 73.6
condition 22 30 73.3
subroutine 591 591 100.0
pod 4 4 100.0
total 2418 2436 99.2


line stmt bran cond sub pod time code
1             package Test::TypeTiny;
2              
3 406     406   2948594 use strict;
  406         1489  
  406         29721  
4 406     406   3084 use warnings;
  406         1140  
  406         29441  
5              
6 406     406   4968 use Test::More qw();
  406         80237  
  406         27498  
7 404     404   3045 use Scalar::Util qw(blessed);
  404         1468  
  404         32665  
8 400     400   66054 use Types::TypeTiny ();
  400         1474  
  400         27450  
9 399     399   91903 use Type::Tiny ();
  399         1182  
  399         37361  
10              
11             require Exporter::Tiny;
12             our @ISA = 'Exporter::Tiny';
13              
14             BEGIN {
15 398 100   398   71057 *EXTENDED_TESTING = $ENV{EXTENDED_TESTING} ? sub() { !!1 } : sub() { !!0 };
16             }
17              
18             our $AUTHORITY = 'cpan:TOBYINK';
19             our $VERSION = '2.002001';
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 273     273 1 5873 my @matchers = @_;
29 273         25391 bless \@matchers, do {
30             package #
31             Test::TypeTiny::Internal::MATCHFOR;
32 273 100       2203 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 270     268   23886 $_[0][0];
40             }
41            
42             sub match {
43 270     270   2151 my ( $self, $e ) = @_;
44 270 100 33     821 my $does =
45             Scalar::Util::blessed( $e )
46             ? ( $e->can( 'DOES' ) || $e->can( 'isa' ) )
47             : undef;
48 270         24739 for my $s ( @$self ) {
49 277 100 100     2214 return 1 if ref( $s ) && $e =~ $s;
50 275 100 100     857 return 1 if !ref( $s ) && $does && $e->$does( $s );
      100        
51             }
52 267         26371 return;
53             } #/ sub match
54 273         890 __PACKAGE__;
55             };
56             } #/ sub matchfor
57              
58             sub _mk_message {
59 1797     1797   10110 require Type::Tiny;
60 1797         4972 my ( $template, $value ) = @_;
61 1797         27856 sprintf( $template, Type::Tiny::_dd( $value ) );
62             }
63              
64             sub ok_subtype {
65 302     302 1 24792 my ( $type, @s ) = @_;
66 302         954 @_ = (
67             not( scalar grep !$_->is_subtype_of( $type ), @s ),
68             sprintf( "%s subtype: %s", $type, join q[, ], @s ),
69             );
70 302         23863 goto \&Test::More::ok;
71             }
72              
73 3969 50 33 3969 1 1141793 eval( EXTENDED_TESTING ? <<'SLOW' : <<'FAST');
  3969 50 100 1625 1 26426  
  3969 50 66 362   36219  
  3968 100 33 361   12206  
  3956 100 100 361   12037  
  3956 50 66 358   35565  
  3954 50   356   11005  
  3954 50   336   10166  
  3954 50   333   31142  
  3953 50   332   10026  
  3953 100   329   6688  
  3953 100   327   33243  
  3867 50   326   11992  
  3867 50   326   13364  
  3867     324   40091  
  3950     314   23336  
  3950     232   1669733  
  3950     232   2319885  
  3949     230   1429884  
  3949     230   1412750  
  3949     229   1420733  
  7451     156   1498145  
  3929     65   1377125  
  3929     65   3464892  
  1595     63   356281  
  1595     60   4429  
  1595     60   32304  
  1594     58   6934  
  1684     58   6246  
  1684     57   27235  
  1684     19   15832  
  1684     19   5548  
  1684     19   24999  
  1682     17   15192  
  1682     17   4384  
  1682     16   25648  
  1618     15   14475  
  1618     15   6323  
  1618     15   29135  
  1682     15   20569  
  1681     15   616348  
  1681     15   867803  
  1681     15   537249  
  1681     15   510045  
  1681     15   529924  
  2894     15   546770  
  1671     15   496275  
  1671     15   1284732  
  240     15   10150  
  240     15   1257  
  240     15   13826  
  240     13   10521  
  237     12   1274  
  237     12   14614  
  236     12   10519  
  236     12   1751  
  236     12   14560  
  236     12   10603  
  235     12   1198  
  235     12   13360  
  235     12   9081  
  235     12   1231  
  235     12   14345  
  162     12   9929  
  160     12   981  
  160     9   6187  
  160     9   9806  
  160     9   1136  
  160     9   7038  
  160     9   9250  
  158     9   974  
  158     9   6917  
  156     8   8620  
  156     8   1035  
  156     7   7485  
  153     7   10133  
  152     7   925  
  152     6   5367  
  152     6   8551  
  152     6   849  
  152     6   7079  
  150     6   9429  
  149     6   946  
  149     6   6294  
  149     6   8731  
  149     6   915  
  149     6   6370  
  148     6   8909  
  57     6   165  
  57     6   5278  
  19     6   157  
  19     6   60  
  19     6   2110  
  19     6   162  
  19     6   47  
  19     6   1854  
  19     6   151  
  19     6   65  
  19     6   1997  
  17     6   141  
  17     6   44  
  17     6   1698  
  17     6   122  
  17     6   55  
  17     6   1513  
  16     5   134  
  16     5   44  
  16     5   1224  
  15     5   126  
  15     5   43  
  15     5   1491  
  15     5   114  
  15     5   38  
  15     5   1370  
  15     5   130  
  15     4   47  
  15     4   1472  
  15     4   127  
  15     4   47  
  15     4   1246  
  15     4   138  
  15     4   61  
  15     4   1472  
  15     4   129  
  15     4   267  
  15     4   1513  
  15     4   120  
  15     4   48  
  15     4   1594  
  15     4   121  
  15     4   44  
  15     4   1136  
  15     4   116  
  15     4   40  
  15     4   1268  
  15     4   134  
  15     4   84  
  15     4   1532  
  15     4   110  
  15     4   42  
  15     4   1569  
  15     4   161  
  15     4   42  
  15     4   1064  
  15     4   132  
  15     3   42  
  15     3   1661  
  15     2   126  
  15     2   44  
  15     2   1549  
  15     2   121  
  15     2   34  
  15     2   1418  
  13     2   94  
  13     2   37  
  13     2   1075  
  12     2   89  
  12     2   52  
  12     2   1123  
  12     2   108  
  12     2   40  
  12     2   1107  
  12     2   106  
  12     2   30  
  12     2   1106  
  12     2   95  
  12     2   33  
  12     2   914  
  12     2   93  
  12     2   27  
  12     2   1340  
  12     1   93  
  12     1   34  
  12     1   1356  
  12     1   112  
  12     1   40  
  12     1   1343  
  12     1   115  
  12     1   34  
  12     1   730  
  12     1   86  
  12     1   46  
  12     1   1111  
  12     1   105  
  12     1   35  
  12     1   1491  
  12     1   102  
  12     1   31  
  12     1   1194  
  12     1   96  
  12     1   40  
  12     1   828  
  12     1   101  
  12     1   72  
  12     1   1324  
  9     1   60  
  9     1   31  
  9     1   931  
  9     1   71  
  9     1   33  
  9     1   1135  
  9     1   81  
  9     1   26  
  9     1   1083  
  9     1   67  
  9     1   31  
  9     1   979  
  9     1   75  
  9     1   28  
  9     1   1143  
  9     1   68  
  9     1   42  
  9     1   1176  
  9     1   129  
  9     1   29  
  9     1   606  
  8     1   58  
  8     1   22  
  8     1   771  
  8     1   64  
  8     1   33  
  8     1   1322  
  7     1   49  
  7     1   18  
  7     1   906  
  7     1   65  
  7     1   20  
  7     1   516  
  7     1   51  
  7     1   17  
  7     1   816  
  6     1   40  
  6     1   17  
  6     1   500  
  6     1   40  
  6     1   16  
  6     1   611  
  6     1   50  
  6     1   23  
  6     1   886  
  6     1   43  
  6     1   13  
  6     1   657  
  6     1   53  
  6     1   24  
  6     1   621  
  6     1   43  
  6     1   15  
  6     1   726  
  6     1   56  
  6     1   14  
  6     1   414  
  6     1   42  
  6     1   17  
  6     1   592  
  6     1   51  
  6     1   16  
  6     1   923  
  6     1   43  
  6     1   21  
  6     1   694  
  6     1   55  
  6     1   20  
  6     1   518  
  6     1   41  
  6     1   15  
  6     1   660  
  6     1   49  
  6     1   16  
  6     1   499  
  6     1   48  
  6     1   20  
  6     1   632  
  6     1   54  
  6     1   17  
  6     1   791  
  6     1   41  
  6     1   29  
  6     1   685  
  6     1   53  
  6     1   25  
  6     1   565  
  6     1   46  
  6     1   16  
  6     1   649  
  6     1   41  
  6     1   14  
  6     1   446  
  6     1   47  
  6     1   14  
  6     1   597  
  6     1   42  
  6     1   14  
  6     1   903  
  6     1   44  
  6     1   17  
  6     1   665  
  6     1   51  
  6     1   27  
  6     1   1040  
  6     1   43  
  6     1   16  
  6     1   620  
  6     1   46  
  6     1   16  
  6     1   470  
  6     1   42  
  6     1   27  
  6     1   604  
  6     1   60  
  6     1   24  
  6     1   812  
  6     1   46  
  6     1   14  
  6     1   663  
  5     1   44  
  5     1   17  
  5     1   456  
  5     1   35  
  5     1   13  
  5     1   548  
  5     1   36  
  5     1   11  
  5     1   524  
  5     1   36  
  5     1   13  
  5     1   658  
  5     1   36  
  5     1   15  
  5     1   508  
  5     1   34  
  5     1   11  
  5     1   375  
  5     1   41  
  5     1   20  
  5     1   696  
  5     1   42  
  5     1   19  
  5     1   741  
  5     1   42  
  5     1   17  
  5     1   365  
  5     1   32  
  5     1   19  
  5     1   492  
  4     1   28  
  4     1   16  
  4     1   725  
  4     1   62  
  4     1   9  
  4     1   491  
  4     1   29  
  4     1   13  
  4     1   380  
  4     1   58  
  4     1   11  
  4     1   792  
  4     1   28  
  4     1   13  
  4     1   452  
  4     1   34  
  4     1   12  
  4     1   627  
  4     1   33  
  4     1   8  
  4     1   471  
  4     1   26  
  4     1   13  
  4     1   317  
  4     1   29  
  4     1   12  
  4     1   612  
  4     1   34  
  4     1   14  
  4     1   702  
  4     1   31  
  4     1   9  
  4     1   315  
  4     1   29  
  4     1   13  
  4     1   495  
  4     1   29  
  4     1   12  
  4     1   709  
  4     1   30  
  4     1   11  
  4     1   496  
  4     1   39  
  4     1   9  
  4     1   402  
  4     1   29  
  4     1   10  
  4     1   653  
  4     1   46  
  4     1   14  
  4     1   524  
  4     1   30  
  4     1   9  
  4     1   609  
  4     1   33  
  4     1   9  
  4     1   433  
  4     1   25  
  4     1   11  
  4     1   384  
  4     1   35  
  4     1   13  
  4     1   622  
  4     1   30  
  4     1   17  
  4     1   636  
  4     1   32  
  4     1   9  
  4     1   263  
  4     1   26  
  4     1   10  
  4     1   501  
  4     1   32  
  4     1   435  
  4     1   1026  
  4     1   34  
  4     1   10  
  4     1   430  
  4     1   30  
  4     1   12  
  4     1   618  
  4     1   30  
  4     1   10  
  4     1   657  
  4     1   28  
  4     1   8  
  4     1   502  
  4     1   35  
  4     1   9  
  4     1   622  
  3     1   22  
  3     1   21  
  3     1   457  
  3     1   28  
  3     1   8  
  3     1   268  
  2     1   14  
  2     1   7  
  2     1   358  
  2     1   14  
  2     1   5  
  2     1   433  
  2     1   18  
  2     1   6  
  2     1   222  
  2     1   15  
  2     1   23  
  2     1   300  
  2     1   16  
  2     1   35  
  2     1   401  
  2     1   14  
  2     1   5  
  2     1   203  
  2     1   13  
  2     1   16  
  2     1   280  
  2     1   15  
  2     1   5  
  2     1   380  
  2     1   16  
  2     1   4  
  2     1   201  
  2     1   14  
  2     1   6  
  2     1   315  
  2     1   17  
  2     1   5  
  2     1   313  
  2     1   15  
  2     1   6  
  2     1   202  
  2     1   15  
  2     1   8  
  2     1   209  
  2     1   15  
  2     1   6  
  2     1   289  
  2     1   15  
  2     1   6  
  2     1   194  
  2     1   20  
  2     1   8  
  2     1   201  
  2     1   14  
  2     1   6  
  2     1   320  
  2     1   14  
  2     1   6  
  2     1   248  
  2     1   14  
  2     1   6  
  2     1   335  
  2     1   24  
  2     1   6  
  2     1   278  
  2     1   23  
  2     1   11  
  2     1   294  
  2     1   18  
  2     1   6  
  2     1   324  
  2     1   15  
  2     1   5  
  2     1   278  
  2     1   15  
  2     1   7  
  2     1   273  
  1     1   7  
  1     1   920  
  1     1   98  
  1     1   6  
  1     1   3  
  1     1   68  
  1     1   7  
  1     1   3  
  1     1   45  
  1     1   7  
  1     1   2  
  1     1   75  
  1     1   7  
  1     1   2  
  1     1   52  
  1     1   6  
  1     1   3  
  1     1   45  
  1     1   7  
  1     1   3  
  1     1   86  
  1     1   6  
  1     1   3  
  1     1   73  
  1     1   8  
  1     1   2  
  1     1   57  
  1     1   7  
  1     1   3  
  1     1   86  
  1     1   7  
  1     1   2  
  1     1   54  
  1     1   7  
  1     1   3  
  1     1   59  
  1     1   7  
  1     1   2  
  1     1   85  
  1     1   7  
  1     1   2  
  1     1   69  
  1     1   7  
  1     1   4  
  1     1   58  
  1     1   8  
  1     1   2  
  1     1   91  
  1     1   6  
  1     1   4  
  1     1   55  
  1     1   6  
  1     1   3  
  1     1   58  
  1     1   6  
  1     1   2  
  1     1   86  
  1     1   8  
  1     1   2  
  1     1   68  
  1     1   7  
  1     1   3  
  1     1   58  
  1     1   7  
  1     1   2  
  1     1   85  
  1         6  
  1         5  
  1         57  
  1         6  
  1         2  
  1         74  
  1         7  
  1         3  
  1         85  
  1         7  
  1         4  
  1         55  
  1         6  
  1         4  
  1         80  
  1         7  
  1         4  
  1         84  
  1         6  
  1         2  
  1         69  
  1         8  
  1         4  
  1         57  
  1         14  
  1         2  
  1         86  
  1         8  
  1         2  
  1         55  
  1         8  
  1         2  
  1         44  
  1         11  
  1         3  
  1         104  
  1         7  
  1         3  
  1         67  
  1         8  
  1         2  
  1         59  
  1         15  
  1         3  
  1         85  
  1         7  
  1         2  
  1         55  
  1         7  
  1         2  
  1         59  
  1         8  
  1         2  
  1         85  
  1         7  
  1         3  
  1         66  
  1         9  
  1         2  
  1         57  
  1         7  
  1         2  
  1         88  
  1         8  
  1         3  
  1         67  
  1         7  
  1         3  
  1         56  
  1         6  
  1         2  
  1         94  
  1         7  
  1         3  
  1         70  
  1         8  
  1         2  
  1         56  
  1         7  
  1         2  
  1         85  
  1         8  
  1         3  
  1         66  
  1         9  
  1         3  
  1         55  
  1         7  
  1         2  
  1         122  
  1         7  
  1         2  
  1         54  
  1         6  
  1         3  
  1         59  
  1         16  
  1         3  
  1         84  
  1         7  
  1         2  
  1         69  
  1         8  
  1         2  
  1         57  
  1         8  
  1         4  
  1         85  
  1         7  
  1         2  
  1         54  
  1         7  
  1         4  
  1         66  
  1         7  
  1         3  
  1         83  
  1         6  
  1         4  
  1         70  
  1         8  
  1         2  
  1         58  
  1         7  
  1         3  
  1         84  
  1         6  
  1         6  
  1         54  
  1         6  
  1         2  
  1         75  
  1         7  
  1         2  
  1         85  
  1         8  
  1         3  
  1         74  
  1         7  
  1         3  
  1         56  
  1         10  
  1         2  
  1         95  
  1         7  
  1         2  
  1         54  
  1         6  
  1         2  
  1         58  
  1         6  
  1         5  
  1         89  
  1         7  
  1         2  
  1         67  
  1         7  
  1         3  
  1         56  
  1         8  
  1         4  
  1         85  
  1         11  
  1         2  
  1         73  
  1         7  
  1         3  
  1         58  
  1         7  
  1         3  
  1         87  
  1         7  
  1         2  
  1         67  
  1         8  
  1         3  
  1         56  
  1         8  
  1         2  
  1         85  
  1         6  
  1         3  
  1         54  
  1         7  
  1         3  
  1         61  
  1         6  
  1         3  
  1         84  
  1         7  
  1         3  
  1         55  
  1         6  
  1         2  
  1         60  
  1         19  
  1         3  
  1         103  
  1         7  
  1         2  
  1         68  
  1         9  
  1         3  
  1         64  
  1         8  
  1         2  
  1         83  
  1         6  
  1         2  
  1         75  
  1         7  
  1         4  
  1         56  
  1         7  
  1         2  
  1         87  
  1         8  
  1         2  
  1         53  
  1         6  
  1         3  
  1         60  
  1         13  
  1         3  
  1         86  
  1         8  
  1         3  
  1         66  
  1         7  
  1         3  
  1         59  
  1         6  
  1         3  
  1         104  
  1         6  
  1         3  
  1         54  
  1         7  
  1         3  
  1         57  
  1         7  
  1         3  
  1         94  
  1         6  
  1         3  
  1         66  
  1         7  
  1         2  
  1         57  
  1         7  
  1         3  
  1         86  
  1         7  
  1         3  
  1         65  
  1         8  
  1         2  
  1         61  
  1         7  
  1         2  
  1         85  
  1         7  
  1         3  
  1         58  
  1         10  
  1         2  
  1         56  
  1         9  
  1         4  
  1         88  
  1         7  
  1         3  
  1         68  
  1         7  
  1         2  
  1         63  
  1         7  
  1         2  
  1         86  
  1         6  
  1         3  
  1         55  
  1         6  
  1         2  
  1         59  
  1         7  
  1         3  
  1         84  
  1         8  
  1         3  
  1         54  
  1         6  
  1         3  
  1         43  
  1         6  
  1         3  
  1         68  
  1         7  
  1         2  
  1         418  
  1         7  
  1         3  
  1         56  
  1         8  
  1         3  
  1         88  
  1         7  
  1         6  
  1         66  
  1         6  
  1         3  
  1         56  
  1         7  
  1         3  
  1         93  
  1         11  
  1         2  
  1         67  
  1         8  
  1         16  
  1         60  
  1         7  
  1         2  
  1         84  
  1         7  
  1         4  
  1         53  
  1         6  
  1         3  
  1         60  
  1         8  
  1         2  
  1         87  
  1         6  
  1         3  
  1         54  
  1         6  
  1         3  
  1         59  
  1         8  
  1         2  
  1         95  
  1         10  
  1         3  
  1         65  
  1         8  
  1         2  
  1         65  
  1         7  
  1         3  
  1         85  
  1         6  
  1         4  
  1         99  
  1         7  
  1         3  
  1         58  
  1         7  
  1         2  
  1         87  
  1         7  
  1         3  
  1         66  
  1         7  
  1         2  
  1         55  
  1         10  
  1         5  
  1         86  
  1         12  
  1         2  
  1         54  
  1         6  
  1         5  
  1         59  
  1         6  
  1         2  
  1         83  
  1         7  
  1         2  
  1         70  
  1         7  
  1         3  
  1         58  
  1         8  
  1         2  
  1         85  
  1         7  
  1         3  
  1         53  
  1         7  
  1         2  
  1         100  
  1         7  
  1         3  
  1         85  
  1         7  
  1         2  
  1         64  
  1         7  
  1         3  
  1         55  
  1         7  
  1         3  
  1         84  
  1         7  
  1         3  
  1         70  
  1         7  
  1         3  
  1         54  
  1         6  
  1         2  
  1         83  
  1         8  
  1         2  
  1         53  
  1         8  
  1         3  
  1         72  
  1         7  
  1         2  
  1         192  
  1         7  
  1         4  
  1         57  
  1         7  
  1         2  
  1         56  
  1         6  
  1         3  
  1         71  
  1         7  
  1         3  
  1         53  
  1         7  
  1         2  
  1         56  
  1         9  
  1         2  
  1         92  
  1         6  
  1         2  
  1         66  
  1         7  
  1         4  
  1         55  
  1         7  
  1         4  
  1         84  
  1         8  
  1         2  
  1         66  
  1         9  
  1         2  
  1         54  
  1         6  
  1         3  
  1         85  
  1         7  
  1         2  
  1         56  
  1         6  
  1         3  
  1         91  
  1         9  
  1         3  
  1         85  
  1         6  
  1         4  
  1         69  
  1         6  
  1         3  
  1         61  
  1         7  
  1         3  
  1         85  
  1         9  
  1         2  
  1         54  
  1         6  
  1         3  
  1         56  
  1         8  
  1         2  
  1         90  
  1         6  
  1         3  
  1         83  
  1         9  
  1         2  
  1         49  
  1         7  
  1         5  
  1         88  
  1         6  
  1         3  
  1         54  
  1         6  
  1         2  
  1         58  
  1         7  
  1         2  
  1         85  
  1         7  
  1         3  
  1         97  
  1         9  
  1         2  
  1         60  
  1         7  
  1         2  
  1         84  
  1         7  
  1         3  
  1         53  
  1         6  
  1         3  
  1         57  
  1         6  
  1         4  
  1         94  
  1         7  
  1         2  
  1         65  
  1         7  
  1         2  
  1         57  
  1         7  
  1         2  
  1         116  
  1         7  
  1         3  
  1         55  
  1         7  
  1         2  
  1         58  
  1         8  
  1         3  
  1         81  
  1         7  
  1         3  
  1         66  
  1         8  
  1         3  
  1         56  
  1         7  
  1         2  
  1         84  
  1         7  
  1         2  
  1         56  
  1         8  
  1         2  
  1         56  
  1         7  
  1         6  
  1         81  
  1         9  
  1         4  
  1         79  
  1         8  
  1         2  
  1         56  
  1         7  
  1         3  
  1         83  
  1         7  
  1         2  
  1         54  
  1         8  
  1         2  
  1         56  
  1         8  
  1         2  
  1         93  
  1         7  
  1         3  
  1         66  
  1         7  
  1         4  
  1         59  
  1         7  
  1         5  
  1         84  
  1         8  
  1         3  
  1         54  
  1         10  
  1         2  
  1         56  
  1         8  
  1         4  
  1         109  
  1         7  
  1         2  
  1         67  
  1         7  
  1         2  
  1         55  
  1         7  
  1         3  
  1         85  
  1         7  
  1         2  
  1         69  
  1         7  
  1         4  
  1         57  
  1         7  
  1         3  
  1         100  
  1         6  
  1         2  
  1         73  
  1         9  
  1         5  
  1         55  
  1         7  
  1         3  
  1         83  
  1         8  
  1         2  
  1         58  
  1         7  
  1         3  
  1         56  
  1         7  
  1         3  
  1         95  
  1         8  
  1         2  
  1         107  
  1         9  
  1         2  
  1         57  
  1         7  
  1         4  
  1         87  
  1         7  
  1         2  
  1         53  
  1         9  
  1         4  
  1         59  
  1         8  
  1         2  
  1         86  
  1         7  
  1         5  
  1         68  
  1         8  
  1         2  
  1         58  
  1         40  
  1         7  
  1         93  
  1         7  
  1         2  
  1         70  
  1         8  
  1         2  
  1         56  
  1         7  
  1         10  
  1         88  
  1         8  
  1         5  
  1         73  
  1         7  
  1         3  
  1         55  
  1         7  
  1         3  
  1         92  
  1         7  
  1         19  
  1         58  
  1         10  
  1         3  
  1         59  
  1         7  
  1         3  
  1         96  
  1         7  
  1         2  
  1         53  
  1         11  
  1         2  
  1         58  
  1         8  
  1         2  
  1         103  
  1         8  
  1         3  
  1         58  
  1         7  
  1         3  
  1         58  
  1         7  
  1         3  
  1         89  
  1         6  
  1         3  
  1         66  
  1         7  
  1         3  
  1         54  
  1         11  
  1         2  
  1         86  
  1         8  
  1         2  
  1         55  
  1         7  
  1         2  
  1         58  
  1         7  
  1         3  
  1         87  
  1         8  
  1         2  
  1         68  
  1         8  
  1         3  
  1         57  
  1         8  
  1         2  
  1         86  
  1         8  
  1         2  
  1         70  
  1         7  
  1         2  
  1         55  
  1         9  
  1         3  
  1         95  
  1         9  
  1         2  
  1         54  
  1         6  
  1         5  
  1         70  
  1         6  
  1         3  
  1         85  
  1         6  
  1         3  
  1         54  
  1         6  
  1         2  
  1         56  
  1         8  
  1         5  
  1         104  
  1         7  
  1         2  
  1         54  
  1         8  
  1         3  
  1         59  
  1         7  
  1         3  
  1         96  
  1         7  
  1         3  
  1         53  
  1         6  
  1         2  
  1         56  
  1         8  
  1         4  
  1         85  
  1         8  
  1         2  
  1         55  
  1         7  
  1         2  
  1         59  
  1         6  
  1         4  
  1         95  
  1         8  
  1         3  
  1         68  
  1         8  
  1         3  
  1         54  
  1         8  
  1         2  
  1         85  
  1         7  
  1         3  
  1         70  
  1         9  
  1         2  
  1         55  
  1         8  
  1         2  
  1         89  
  1         7  
  1         2  
  1         66  
  1         8  
  1         2  
  1         57  
  1         8  
  1         2  
  1         97  
  1         7  
  1         2  
  1         68  
  1         6  
  1         3  
  1         57  
  1         6  
  1         4  
  1         91  
  1         8  
  1         2  
  1         78  
  1         7  
  1         3  
  1         57  
  1         7  
  1         2  
  1         85  
  1         7  
  1         2  
  1         67  
  1         8  
  1         3  
  1         58  
  1         9  
  1         4  
  1         99  
  1         9  
  1         3  
  1         55  
  1         6  
  1         2  
  1         61  
  1         9  
  1         3  
  1         101  
  1         7  
  1         3  
  1         68  
  1         8  
  1         2  
  1         61  
  1         7  
  1         2  
  1         87  
  1         7  
  1         3  
  1         53  
  1         6  
  1         3  
  1         60  
  1         8  
  1         4  
  1         86  
  1         10  
  1         3  
  1         69  
  1         9  
  1         2  
  1         61  
  1         6  
  1         3  
  1         103  
  1         7  
  1         4  
  1         65  
  1         8  
  1         2  
  1         57  
  1         8  
  1         3  
  1         88  
  1         13  
  1         2  
  1         69  
  1         7  
  1         4  
  1         57  
  1         7  
  1         2  
  1         87  
  1         70  
  1         6  
  1         61  
  1         6  
  1         2  
  1         60  
  1         7  
  1         3  
  1         87  
  1         7  
  1         2  
  1         55  
  1         6  
  1         6  
  1         68  
  1         7  
  1         3  
  1         90  
  1         7  
  1         2  
  1         69  
  1         7  
  1         3  
  1         61  
  1         7  
  1         3  
  1         85  
  1         6  
  1         2  
  1         69  
  1         8  
  1         3  
  1         56  
  1         9  
  1         7  
  1         94  
  1         8  
  1         3  
  1         67  
  1         8  
  1         1  
  1         58  
  1         7  
  1         2  
  1         88  
  1         7  
  1         2  
  1         55  
  1         7  
  1         3  
  1         59  
  1         10  
  1         2  
  1         98  
  1         12  
  1         2  
  1         58  
  1         9  
  1         2  
  1         61  
  1         9  
  1         3  
  1         84  
  1         8  
  1         3  
  1         67  
  1         8  
  1         3  
  1         60  
  1         7  
  1         3  
  1         91  
  1         7  
  1         3  
  1         54  
  1         6  
  1         6  
  1         63  
  1         7  
  1         3  
  1         91  
  1         6  
  1         2  
  1         70  
  1         6  
  1         3  
  1         63  
  1         7  
  1         2  
  1         87  
  1         7  
  1         2  
  1         68  
  1         9  
  1         2  
  1         60  
  1         7  
  1         2  
  1         92  
  1         8  
  1         2  
  1         65  
  1         8  
  1         2  
  1         59  
  1         8  
  1         4  
  1         88  
  1         8  
  1         2  
  1         54  
  1         6  
  1         2  
  1         77  
  1         7  
  1         2  
  1         89  
  1         7  
  1         3  
  1         68  
  1         9  
  1         2  
  1         59  
  1         7  
  1         2  
  1         102  
  1         7  
  1         4  
  1         72  
  1         8  
  1         2  
  1         63  
  1         7  
  1         3  
  1         87  
  1         7  
  1         3  
  1         54  
  1         18  
  1         3  
  1         59  
  1         7  
  1         2  
  1         85  
  1         8  
  1         3  
  1         55  
  1         6  
  1         2  
  1         66  
  1         6  
  1         3  
  1         97  
  1         7  
  1         3  
  1         57  
  1         6  
  1         2  
  1         46  
  1         6  
  1         3  
  1         91  
  1         7  
  1         3  
  1         53  
  1         7  
  1         4  
  1         57  
  1         8  
  1         3  
  1         88  
  1         7  
  1         3  
  1         54  
  1         6  
  1         2  
  1         77  
  1         7  
  1         2  
  1         118  
  1         7  
  1         3  
  1         102  
  1         9  
  1         3  
  1         105  
  1         8  
  1         4  
  1         101  
  1         7  
  1         3  
  1         107  
  1         7  
  1         2  
  1         100  
  1         8  
  1         4  
  1         117  
  1         7  
  1         2  
  1         102  
  1         7  
  1         2  
  1         105  
  1         6  
  1         3  
  1         100  
  1         7  
  1         4  
  1         103  
  1         7  
  1         3  
  1         123  
  1         8  
  1         3  
  1         90  
  1         8  
  1         2  
  1         53  
  1         6  
  1         2  
  1         56  
  1         7  
  1         3  
  1         82  
  1         6  
  1         3  
  1         51  
  1         10  
  1         4  
  1         58  
  1         7  
  1         3  
  1         79  
  1         6  
  1         2  
  1         65  
  1         8  
  1         3  
  1         84  
  1         7  
  1         2  
  1         80  
  1         8  
  1         4  
  1         51  
  1         8  
  1         3  
  1         55  
  1         8  
  1         3  
  1         91  
  1         6  
  1         3  
  1         52  
  1         7  
  1         1  
  1         52  
  1         8  
  1         3  
  1         81  
  1         6  
  1         4  
  1         65  
  1         10  
  1         4  
  1         56  
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__