t/20: clarify code structure
[perl/list-index.git] / t / 20-links.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4
5 use Test::More tests => 30;
6 use Test::NoWarnings;
7 use Data::Dump 'pp';
8
9 BEGIN { use_ok('List::Index' => 'rangematch'); }
10
11 my @RANGETESTS = (
12         # single prefix
13         [   q      =>          'q'],
14         ['#foo.!$' =>          '\#foo\.\!\$'],
15         [   '-'    =>          ''],
16         [   ''     =>          ''],
17         # end only
18         [    -q    =>            '(?:(?![q-z])|q)'],
19         [    -qqq  =>            '(?:(?![q-z])|q(?![q-z])|qq(?![q-z])|qqq)'],
20         # start only
21         [  'q-'    =>    '[q-z]'],
22         ['qqq-'    => '(?:[r-z]|q[r-z]|qq[q-z])'],
23         ['zzz-'    =>                 'zz[z-z]'],
24         # prefixed range
25         [  'q-q'   =>          'q'],
26         [ 'qq-qq'  =>                 'qq'],
27         [ 'qq-qqx' =>                                 '(?:qq(?![x-z])|qqx)'],
28         [  'q-qx'  =>                      '(?:q(?![x-z])|qx)'],
29         # end within prefix
30         ['qqq-qq'  =>                 'qq[q-z]'],
31         ['qqq-q'   =>       '(?:q[r-z]|qq[q-z])'],
32         # interchar range
33         [  'q-x'   =>    '[q-x]'],
34         ['qqq-xxx' => '(?:[r-w]|q[r-z]|qq[q-z]|x(?![x-z])|xx(?![x-z])|xxx)'],
35         ['qqq-xqq' => '(?:[r-w]|q[r-z]|qq[q-z]|x(?![q-z])|xq(?![q-z])|xqq)'],
36         # interchar mixed length
37         ['qqq-xq'  => '(?:[r-w]|q[r-z]|qq[q-z]|x(?![q-z])|xq)'],
38         [ 'qq-xqq' => '(?:[r-w]|q[q-z]|'   .  'x(?![q-z])|xq(?![q-z])|xqq)'],
39         [  'q-xxx' =>                '(?:[q-w]|x(?![x-z])|xx(?![x-z])|xxx)'],
40         ['qqq-x'   => '(?:[r-x]|q[r-z]|qq[q-z])'],
41         ['qaa-qb'  =>              '(?:qa[a-z]|qb)'],
42         ['qaa-qq'  =>       '(?:q[b-p]|qa[a-z]|qq)'],
43         # reversed
44         [  'x-q'   => undef],
45         ['xxx-qqq' => undef],
46         ['xxx-q'   => undef],
47         ['qqq-qc'  => undef],
48 );
49
50 for (@RANGETESTS) {
51         my ($in, $out) = @$_;
52         is(
53                 eval { rangematch($in) },
54                 defined $out ? "(?i-xsm:^$out)" : undef,
55                 (length $in ? $in : q{''}) . (!defined $out && ' failure')
56         );
57         diag($@) if $@;
58 }
59