File: | t/06-data-util.t |
Coverage: | 92.2% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | #!perl | ||||||
2 | |||||||
3 | 1 1 1 | 25428 4 68 | use strict; | ||||
4 | 1 1 1 | 4 2 43 | use warnings; | ||||
5 | |||||||
6 | 1 1 1 | 620 23844 8 | use Test::More tests => 16; | ||||
7 | |||||||
8 | 1 1 1 | 1574 4 3180 | use Util::Underscore; | ||||
9 | |||||||
10 | my %functions = ( | ||||||
11 | 16 | 67 | is_ref => sub { _::is_ref $_, 2, 3 }, | ||||
12 | 16 | 60 | is_scalar_ref => sub { _::is_scalar_ref $_, 2, 3 }, | ||||
13 | 16 | 64 | is_array_ref => sub { _::is_array_ref $_, 2, 3 }, | ||||
14 | 16 | 66 | is_hash_ref => sub { _::is_hash_ref $_, 2, 3 }, | ||||
15 | 16 | 77 | is_code_ref => sub { _::is_code_ref $_, 2, 3 }, | ||||
16 | 16 | 61 | is_glob_ref => sub { _::is_glob_ref $_, 2, 3 }, | ||||
17 | 16 | 58 | is_regex => sub { _::is_regex $_, 2, 3 }, | ||||
18 | 16 | 65 | is_plain => sub { _::is_plain $_, 2, 3 }, | ||||
19 | 16 | 25082 | is_int => sub { _::is_int $_, 2, 3 }, | ||||
20 | 16 | 74 | is_uint => sub { _::is_uint $_, 2, 3 }, | ||||
21 | 16 | 66 | is_identifier => sub { _::is_identifier $_, 2, 3 }, | ||||
22 | 16 | 71 | is_package => sub { _::is_package $_, 2, 3 }, | ||||
23 | 1 | 199535 | ); | ||||
24 | |||||||
25 | sub value_matrix_ok { | ||||||
26 | 3 | 23 | my ($names, $values, %results) = @_; | ||||
27 | 3 | 12 | for my $i (0 .. $#$names) { | ||||
28 | subtest $names->[$i] => sub { | ||||||
29 | 16 | 14359 | plan tests => scalar keys %results; | ||||
30 | 16 | 5369 | while (my ($fn, $expected) = each %results) { | ||||
31 | 192 | 119749 | my $code = $functions{$fn} // die "Unknown function $fn"; | ||||
32 | 192 | 358 | local $_ = $values->[$i]; | ||||
33 | 192 | 563 | my ($result) = $code->(); | ||||
34 | 192 | 412 | $result = $result ? 1 : 0; | ||||
35 | 192 | 571 | is $result, $expected->[$i], $fn; | ||||
36 | } | ||||||
37 | 16 | 24552 | }; | ||||
38 | } | ||||||
39 | } | ||||||
40 | |||||||
41 | 0 | sub FOO { }; # for the glob | |||||
42 | |||||||
43 | value_matrix_ok [qw[ scalar_ref array_ref hash_ref code_ref ]], | ||||||
44 | 1 0 | 20 0 | [ \1, [], {}, sub { } ], | ||||
45 | is_ref => [ 1, 1, 1, 1 ], | ||||||
46 | is_scalar_ref => [ 1, 0, 0, 0 ], | ||||||
47 | is_array_ref => [ 0, 1, 0, 0 ], | ||||||
48 | is_hash_ref => [ 0, 0, 1, 0 ], | ||||||
49 | is_code_ref => [ 0, 0, 0, 1 ], | ||||||
50 | is_glob_ref => [ 0, 0, 0, 0 ], | ||||||
51 | is_regex => [ 0, 0, 0, 0 ], | ||||||
52 | is_plain => [ 0, 0, 0, 0 ], | ||||||
53 | is_int => [ 0, 0, 0, 0 ], | ||||||
54 | is_uint => [ 0, 0, 0, 0 ], | ||||||
55 | is_identifier => [ 0, 0, 0, 0 ], | ||||||
56 | is_package => [ 0, 0, 0, 0 ]; | ||||||
57 | 1 | 1722 | value_matrix_ok [qw[ glob_ref regex string integer float undef]], | ||||
58 | [ \*FOO, qr//, '', 42, 42.3, undef ], | ||||||
59 | is_ref => [ 1, 0, 0, 0, 0, 0 ], | ||||||
60 | is_scalar_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
61 | is_array_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
62 | is_hash_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
63 | is_code_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
64 | is_glob_ref => [ 1, 0, 0, 0, 0, 0 ], | ||||||
65 | is_regex => [ 0, 1, 0, 0, 0, 0 ], | ||||||
66 | is_plain => [ 0, 0, 1, 1, 1, 0 ], | ||||||
67 | is_int => [ 0, 0, 0, 1, 0, 0 ], | ||||||
68 | is_uint => [ 0, 0, 0, 1, 0, 0 ], | ||||||
69 | is_identifier => [ 0, 0, 0, 0, 0, 0 ], | ||||||
70 | is_package => [ 0, 0, 0, 0, 0, 0 ]; | ||||||
71 | 1 | 26619 | value_matrix_ok [qw[ negint ident package bad_package _4 _5 ]], | ||||
72 | [ -42, 'fo_3', "x::y", "x'y", undef, undef ], | ||||||
73 | is_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
74 | is_scalar_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
75 | is_array_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
76 | is_hash_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
77 | is_code_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
78 | is_glob_ref => [ 0, 0, 0, 0, 0, 0 ], | ||||||
79 | is_regex => [ 0, 0, 0, 0, 0, 0 ], | ||||||
80 | is_plain => [ 1, 1, 1, 1, 0, 0 ], | ||||||
81 | is_int => [ 1, 0, 0, 0, 0, 0 ], | ||||||
82 | is_uint => [ 0, 0, 0, 0, 0, 0 ], | ||||||
83 | is_identifier => [ 0, 1, 0, 0, 0, 0 ], | ||||||
84 | is_package => [ 0, 1, 1, 0, 0, 0 ]; |