use DAKKAR::p 'test';
use Test::Enigmatic;
use Enigmatic::Plugboard;
subtest 'identity plugboard' => sub {
my @in = 'A'..'Z';
my $p = Enigmatic::Plugboard->new();
Test::Enigmatic::test_static_map($p,\@in,'identity');
};
subtest 'scramble plugboard' => sub {
my %map;my @letters='A'..'Z';my %fullmap;
my %unused;@unused{@letters}=();
for my $letter (@letters) {
next if not exists $unused{$letter};
delete $unused{$letter};
my @usable = keys %unused;
my $image = @usable[rand @usable];
$map{$letter} = $image;
$fullmap{$letter} = $image;
$fullmap{$image} = $letter;
delete $unused{$image};
}
my $wiring = '';
%map->each(sub {
$wiring .= @_->join(''). ' ';
});
note "scramble plugboard: $wiring";
my $p = Enigmatic::Plugboard->new($wiring);
Test::Enigmatic::test_static_map($p,[@fullmap{@letters}],'shuffle');
};
subtest 'constraints' => sub {
my @bad_params = (
'AB CD EF GH IJ KL MN OP QR ST UV WX YZ AB CD',
'AA',
'12',
'AB BC',
);
for my $bad_param (@bad_params) {
dies_ok {
Enigmatic::Plugboard->new($bad_param);
} "bad parameter $bad_param";
}
};
done_testing();