From 556f1e542cdeadb7dc2f549ec7915fe28f5bb112 Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 29 Aug 2011 13:06:32 +0100 Subject: static rotors --- t/rotors.t | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 t/rotors.t (limited to 't/rotors.t') diff --git a/t/rotors.t b/t/rotors.t new file mode 100644 index 0000000..509d88d --- /dev/null +++ b/t/rotors.t @@ -0,0 +1,59 @@ +#!perl +use DAKKAR::p 'test'; +use List::Util 'shuffle'; + +use Enigmatic::Rotor; + +sub test_the_rotor { + my ($r,$out,$name) = @_; + + my @in = 'A'..'Z'; + my %map;@map{@in}=@$out; + + for my $c ('A' .. 'Z') { + is($r->map($c), + $map{$c}, + "$name on $c"); + } +} + +subtest 'identity rotor' => sub { + my @in = 'A'..'Z'; + my $r = Enigmatic::Rotor->new(@in->join); + test_the_rotor($r,\@in,'identity'); +}; + + +subtest 'scramble rotor' => sub { + my @out = shuffle 'A'..'Z'; + + my $r = Enigmatic::Rotor->new(@out->join); + test_the_rotor($r,\@out,'shuffle'); +}; + +subtest 'identity rotor, non-default ring setting' => sub { + my @out = (('B'..'Z'),'A'); + + my $r = Enigmatic::Rotor->new( + wiring => ['A'..'Z']->join, + ring_setting => 1, + ); + test_the_rotor($r,\@out,'ring=1'); +}; + +subtest 'constraints' => sub { + my @bad_params = ( + 'ABCD', + 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCD', + 'AACDEFGHIJKLMNOPQRSTUVWXYZ', + '12CDEFGHIJKLMNOPQRSTUVWXYZABCD', + ); + + for my $bad_param (@bad_params) { + dies_ok { + Enigmatic::Rotor->new($bad_param); + } "bad parameter $bad_param"; + } +}; + +done_testing(); -- cgit v1.2.3