File: usa_ssn.t

package info (click to toggle)
libregexp-common-perl 2024080801-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,328 kB
  • sloc: perl: 17,842; makefile: 2
file content (85 lines) | stat: -rwxr-xr-x 2,137 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/perl

use strict;
use lib  qw {blib/lib}, ".";

use Regexp::Common;
use t::Common qw /run_new_tests cross criss_cross dd pdd/;

$^W = 1;


my $ssn   = $RE {SEN} {USA} {SSN};
my $space = $ssn -> {-sep => ' '};
my $empty = $ssn -> {-sep => ''};

use constant PASS => 4;
use constant FAIL => 3;

my $areas   = [ "001", map {pdd 3} 1 .. PASS];
my $groups  = [  "01", map {pdd 2} 1 .. PASS];
my $serials = ["0001", map {pdd 4} 1 .. PASS];

my $bad_a   = [ "000", "", dd (1), dd (2), dd (4), dd (5, 10)];
my $bad_g   = [  "00", "", dd (1), dd (3), dd (4), dd (5, 10)];
my $bad_s   = ["0000", "", dd (1), dd (2), dd (3), dd (5, 10)];

my $ssns    = [cross $areas, $groups, $serials];
my $wrong   = [criss_cross [[@$areas   [0 .. FAIL - 1]],
                            [@$groups  [0 .. FAIL - 1]],
                            [@$serials [0 .. FAIL - 1]]],
                           [$bad_a, $bad_g, $bad_s]];

my %targets = (
    ssn        =>  {
        list   =>  $ssns,
        query  =>  sub {join "-" => @_},
        wanted =>  sub {$_ => @_},
    },
    space      =>  {
        list   =>  $ssns,
        query  =>  sub {join " " => @_},
        wanted =>  sub {$_ => @_},
    },
    empty      =>  {
        list   =>  $ssns,
        query  =>  sub {join "" => @_},
        wanted =>  sub {$_ => @_},
    },
    wrong1     =>  {
        list   =>  $wrong,
        query  =>  sub {join "-" => @_},
    },
    wrong2     =>  {
        list   =>  $wrong,
        query  =>  sub {join " " => @_},
    },
);

my @wrongs = qw /wrong1 wrong2/;

my @tests = (
    {   name   =>  'basic',
        regex  =>  $ssn,
        pass   =>  [qw /ssn/],
        fail   =>  [qw /empty space/, @wrongs],
    },
    {   name   =>  'space',
        regex  =>  $space,
        pass   =>  [qw /space/],
        fail   =>  [qw /empty ssn/, @wrongs],
    },
    {   name   =>  'empty',
        regex  =>  $empty,
        pass   =>  [qw /empty/],
        fail   =>  [qw /ssn space/, @wrongs],
    },
);


run_new_tests  tests        => \@tests,
               targets      => \%targets,
               version_from => 'Regexp::Common::SEN',
;

__END__