File Coverage

blib/lib/Data/Sah/Filter/perl/Array/check_uniqstr.pm
Criterion Covered Total %
statement 8 17 47.0
branch 0 4 0.0
condition 0 2 0.0
subroutine 3 5 60.0
pod 0 2 0.0
total 11 30 36.6


line stmt bran cond sub pod time code
1             package Data::Sah::Filter::perl::Array::check_uniqstr;
2              
3 1     1   522890 use 5.010001;
  1         8  
4 1     1   8 use strict;
  1         3  
  1         58  
5 1     1   7 use warnings;
  1         8  
  1         368  
6              
7             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
8             our $DATE = '2024-07-17'; # DATE
9             our $DIST = 'Data-Sah-Filter'; # DIST
10             our $VERSION = '0.025'; # VERSION
11              
12             sub meta {
13             +{
14 0     0 0   v => 1,
15             summary => 'Check that an array has unique elements, using List::Util\'s uniqstr() (synonym for uniq())',
16             target_type => 'array',
17             might_fail => 1,
18             args => {
19             reverse => {
20             summary => 'If set to true, then will *fail* when array is unique',
21             schema => 'bool*',
22             },
23             ci => {
24             summary => 'Ignore case',
25             schema => 'bool*',
26             },
27             },
28             examples => [
29             {value=>[], valid=>1},
30             {value=>["a","b"], valid=>1},
31             {value=>["a","b","a"], valid=>0},
32             {value=>["a","b","A"], valid=>1},
33             {value=>["a","b","A"], filter_args=>{ci=>1}, valid=>0},
34              
35             {value=>[], filter_args=>{reverse=>1}, valid=>0},
36             {value=>["a","b"], filter_args=>{reverse=>1}, valid=>0},
37             {value=>["a","b","a"], filter_args=>{reverse=>1}, valid=>1},
38             {value=>["a","b","A"], filter_args=>{reverse=>1}, valid=>0},
39             {value=>["a","b","A"], filter_args=>{reverse=>1, ci=>1}, valid=>1},
40             ],
41             };
42             }
43              
44             sub filter {
45 0     0 0   my %fargs = @_;
46              
47 0           my $dt = $fargs{data_term};
48 0   0       my $gen_args = $fargs{args} // {};
49 0           my $res = {};
50              
51 0           $res->{modules}{'List::Util::Uniq'} = "0.005";
52 0           $res->{modules}{'Data::Dmp'} = "0.242";
53             $res->{expr_filter} = join(
54             "",
55             "do { my \$orig = $dt; \$tmp=".($gen_args->{ci} ? "[map {lc} \@\$orig]":"$dt")."; my \@dupes = List::Util::Uniq::uniqstr( List::Util::Uniq::dupestr(\@\$tmp) ); ",
56 0 0         ($gen_args->{reverse} ? "\@dupes ? [undef,\$orig] : [\"Array does not have duplicate string(s)\"]" : "!\@dupes ? [undef,\$orig] : [\"Array has duplicate string(s): \".join(', ', map { Data::Dmp::dmp(\$_) } \@dupes)]"),
    0          
57             "}",
58             );
59              
60 0           $res;
61             }
62              
63             1;
64             # ABSTRACT: Check that an array has unique elements, using List::Util's uniqstr() (synonym for uniq())
65              
66             __END__