#!/usr/bin/perl -w
use strict;
use Test;
use Algorithm::LUHN qw/valid_chars/;
BEGIN { plan tests => 6 }
# Check the valid_chars contents
{
my %chars = valid_chars();
my @chars = keys %chars;
ok(@chars, 10, " Expected 10 valid chars but got ${\(@chars)}\n") or
Algorithm::LUHN::_dump_map();
my $ok = 1;
my $msg;
for (@chars) {
$ok = ($_ == $chars{$_}); # char should be same as value
$msg=" Char $_ has value $chars{$_}, but expected $_\n", last
unless $ok;
}
ok($ok, 1, $msg);
}
# Now keep the same number of keys, but change the values
{
valid_chars(map {$_ => (9-$_)} 0..9);
my %chars = valid_chars();
my @chars = keys %chars;
ok(@chars, 10, " Expected 10 valid chars but got ${\(@chars)}\n") or
Algorithm::LUHN::_dump_map();
my $ok = 1;
my $msg;
for (@chars) {
$ok = ($_ == 9-$chars{$_}); # char should be same as value
$msg = " Char $_ has value $chars{$_}, but expected ".(9-$_)."\n", last
unless $ok;
}
ok($ok, 1, $msg);
}
{
valid_chars(map {$_ => $_} 0..9); # reset to normal
valid_chars(map {$_ => ord($_)-ord('A')+10} 'A'..'Z'); # add a bunch of alphas
my %chars = valid_chars();
my @chars = keys %chars;
ok(@chars, 36, " Expected 36 valid chars but got ${\(@chars)}\n") or
Algorithm::LUHN::_dump_map();
my $ok = 1;
my $msg;
for (@chars) {
if ($_ =~ /\d/) {
$ok = ($_ == $chars{$_}); # char should be same as value
} else {
$ok = (ord($_)-ord('A')+10 == $chars{$_});
}
$msg = " Char $_ has unexpected value $chars{$_}\n", last
unless $ok;
}
ok($ok, 1, $msg);
}
__END__