Skip to content

Commit

Permalink
Refactor decryption tests for ROT13
Browse files Browse the repository at this point in the history
  • Loading branch information
m-dango committed Sep 14, 2023
1 parent 3fce691 commit 22fc859
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 167 deletions.
3 changes: 3 additions & 0 deletions exercises/practice/rotational-cipher/.meta/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
"authors": [
"habere-et-dispertire"
],
"contributors": [
"m-dango"
],
"files": {
"solution": [
"RotationalCipher.rakumod"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
unit module RotationalCipher;

sub caesar-cipher ( Str $message, Int $shift-key --> Str ) is export {
$message.trans( 'A'..'Z' => rotate ( 'A'..'Z' ).Slip, $shift-key )
sub caesar-cipher ( Str :$text, Int :$shift-key --> Str ) is export {
$text.trans( 'A'..'Z' => rotate ( 'A'..'Z' ).Slip, $shift-key )
.trans: 'a'..'z' => rotate ( 'a'..'z' ).Slip, $shift-key;
}
49 changes: 31 additions & 18 deletions exercises/practice/rotational-cipher/.meta/template-data.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,44 @@ unit: module
properties:
rotate:
test: |-
sprintf(q:to/END/, %case<input><text>.Str, %case<input><shiftKey>.Int, %case<expected>.Str, %case<description>.raku);
subtest "%1$s" => {
cmp-ok(
caesar-cipher("%1$s", %2$s),
"eq",
"%3$s",
%4$s,
);
if %2$s == 13 {
my Str:D $template.=new;
if %case<input><shiftKey> != 13 {
$template = q:to/END/;
cmp-ok(
caesar-cipher(caesar-cipher("%1$s", %2$s),13),
"eq",
"%1$s",
%4$s,
caesar-cipher( :text(%s), :shift-key(%s) ),
"eq",
%s,
%s,
);
}
END
}
END
else {
$template = q:to/END/;
subtest %4$s => {
cmp-ok(
caesar-cipher( :text(%1$s), :shift-key(%2$s) ),
"eq",
%3$s,
"encrypt",
);
cmp-ok(
caesar-cipher( :text(%3$s), :shift-key(%2$s) ),
"eq",
%1$s,
"decrypt",
);
}
END
}
sprintf($template, %case<input><text>.raku, %case<input><shiftKey>, %case<expected>.raku, %case<description>.raku);
example: |-
sub caesar-cipher ( Str $message, Int $shift-key --> Str ) is export {
$message.trans( 'A'..'Z' => rotate ( 'A'..'Z' ).Slip, $shift-key )
sub caesar-cipher ( Str :$text, Int :$shift-key --> Str ) is export {
$text.trans( 'A'..'Z' => rotate ( 'A'..'Z' ).Slip, $shift-key )
.trans: 'a'..'z' => rotate ( 'a'..'z' ).Slip, $shift-key;
}
stub: |-
sub caesar-cipher ( Str $message, Int $shift-key --> Str ) is export {
sub caesar-cipher ( :$text, :$shift-key ) is export {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
unit module RotationalCipher;

sub caesar-cipher ( Str $message, Int $shift-key --> Str ) is export {
sub caesar-cipher ( :$text, :$shift-key ) is export {
}
219 changes: 73 additions & 146 deletions exercises/practice/rotational-cipher/rotational-cipher.rakutest
Original file line number Diff line number Diff line change
Expand Up @@ -3,174 +3,101 @@ use Test;
use lib $?FILE.IO.dirname;
use RotationalCipher;

subtest "a" => { # begin: 74e58a38-e484-43f1-9466-877a7515e10f
cmp-ok(
caesar-cipher("a", 0),
"eq",
"a",
"rotate a by 0, same output as input",
);
if 0 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("a", 0),13),
"eq",
"a",
"rotate a by 0, same output as input",
);
}
} # end: 74e58a38-e484-43f1-9466-877a7515e10f
cmp-ok( # begin: 74e58a38-e484-43f1-9466-877a7515e10f
caesar-cipher( :text("a"), :shift-key(0) ),
"eq",
"a",
"rotate a by 0, same output as input",
); # end: 74e58a38-e484-43f1-9466-877a7515e10f

subtest "a" => { # begin: 7ee352c6-e6b0-4930-b903-d09943ecb8f5
cmp-ok(
caesar-cipher("a", 1),
"eq",
"b",
"rotate a by 1",
);
if 1 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("a", 1),13),
"eq",
"a",
"rotate a by 1",
);
}
} # end: 7ee352c6-e6b0-4930-b903-d09943ecb8f5
cmp-ok( # begin: 7ee352c6-e6b0-4930-b903-d09943ecb8f5
caesar-cipher( :text("a"), :shift-key(1) ),
"eq",
"b",
"rotate a by 1",
); # end: 7ee352c6-e6b0-4930-b903-d09943ecb8f5

subtest "a" => { # begin: edf0a733-4231-4594-a5ee-46a4009ad764
cmp-ok(
caesar-cipher("a", 26),
"eq",
"a",
"rotate a by 26, same output as input",
);
if 26 == 13 {
cmp-ok( # begin: edf0a733-4231-4594-a5ee-46a4009ad764
caesar-cipher( :text("a"), :shift-key(26) ),
"eq",
"a",
"rotate a by 26, same output as input",
); # end: edf0a733-4231-4594-a5ee-46a4009ad764

subtest "rotate m by 13" => { # begin: e3e82cb9-2a5b-403f-9931-e43213879300
cmp-ok(
caesar-cipher(caesar-cipher("a", 26),13),
"eq",
"a",
"rotate a by 26, same output as input",
caesar-cipher( :text("m"), :shift-key(13) ),
"eq",
"z",
"encrypt",
);
}
} # end: edf0a733-4231-4594-a5ee-46a4009ad764

subtest "m" => { # begin: e3e82cb9-2a5b-403f-9931-e43213879300
cmp-ok(
caesar-cipher("m", 13),
"eq",
"z",
"rotate m by 13",
);
if 13 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("m", 13),13),
"eq",
"m",
"rotate m by 13",
caesar-cipher( :text("z"), :shift-key(13) ),
"eq",
"m",
"decrypt",
);
}
} # end: e3e82cb9-2a5b-403f-9931-e43213879300

subtest "n" => { # begin: 19f9eb78-e2ad-4da4-8fe3-9291d47c1709
cmp-ok(
caesar-cipher("n", 13),
"eq",
"a",
"rotate n by 13 with wrap around alphabet",
);
if 13 == 13 {
subtest "rotate n by 13 with wrap around alphabet" => { # begin: 19f9eb78-e2ad-4da4-8fe3-9291d47c1709
cmp-ok(
caesar-cipher(caesar-cipher("n", 13),13),
"eq",
"n",
"rotate n by 13 with wrap around alphabet",
caesar-cipher( :text("n"), :shift-key(13) ),
"eq",
"a",
"encrypt",
);
}
} # end: 19f9eb78-e2ad-4da4-8fe3-9291d47c1709

subtest "OMG" => { # begin: a116aef4-225b-4da9-884f-e8023ca6408a
cmp-ok(
caesar-cipher("OMG", 5),
"eq",
"TRL",
"rotate capital letters",
);
if 5 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("OMG", 5),13),
"eq",
"OMG",
"rotate capital letters",
caesar-cipher( :text("a"), :shift-key(13) ),
"eq",
"n",
"decrypt",
);
}
} # end: a116aef4-225b-4da9-884f-e8023ca6408a
} # end: 19f9eb78-e2ad-4da4-8fe3-9291d47c1709

subtest "O M G" => { # begin: 71b541bb-819c-4dc6-a9c3-132ef9bb737b
cmp-ok(
caesar-cipher("O M G", 5),
"eq",
"T R L",
"rotate spaces",
);
if 5 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("O M G", 5),13),
"eq",
"O M G",
"rotate spaces",
);
}
} # end: 71b541bb-819c-4dc6-a9c3-132ef9bb737b
cmp-ok( # begin: a116aef4-225b-4da9-884f-e8023ca6408a
caesar-cipher( :text("OMG"), :shift-key(5) ),
"eq",
"TRL",
"rotate capital letters",
); # end: a116aef4-225b-4da9-884f-e8023ca6408a

subtest "Testing 1 2 3 testing" => { # begin: ef32601d-e9ef-4b29-b2b5-8971392282e6
cmp-ok(
caesar-cipher("Testing 1 2 3 testing", 4),
"eq",
"Xiwxmrk 1 2 3 xiwxmrk",
"rotate numbers",
);
if 4 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("Testing 1 2 3 testing", 4),13),
"eq",
"Testing 1 2 3 testing",
"rotate numbers",
);
}
} # end: ef32601d-e9ef-4b29-b2b5-8971392282e6
cmp-ok( # begin: 71b541bb-819c-4dc6-a9c3-132ef9bb737b
caesar-cipher( :text("O M G"), :shift-key(5) ),
"eq",
"T R L",
"rotate spaces",
); # end: 71b541bb-819c-4dc6-a9c3-132ef9bb737b

cmp-ok( # begin: ef32601d-e9ef-4b29-b2b5-8971392282e6
caesar-cipher( :text("Testing 1 2 3 testing"), :shift-key(4) ),
"eq",
"Xiwxmrk 1 2 3 xiwxmrk",
"rotate numbers",
); # end: ef32601d-e9ef-4b29-b2b5-8971392282e6

cmp-ok( # begin: 32dd74f6-db2b-41a6-b02c-82eb4f93e549
caesar-cipher( :text("Let's eat, Grandma!"), :shift-key(21) ),
"eq",
"Gzo'n zvo, Bmviyhv!",
"rotate punctuation",
); # end: 32dd74f6-db2b-41a6-b02c-82eb4f93e549

subtest "Let's eat, Grandma!" => { # begin: 32dd74f6-db2b-41a6-b02c-82eb4f93e549
cmp-ok(
caesar-cipher("Let's eat, Grandma!", 21),
"eq",
"Gzo'n zvo, Bmviyhv!",
"rotate punctuation",
);
if 21 == 13 {
subtest "rotate all letters" => { # begin: 9fb93fe6-42b0-46e6-9ec1-0bf0a062d8c9
cmp-ok(
caesar-cipher(caesar-cipher("Let's eat, Grandma!", 21),13),
"eq",
"Let's eat, Grandma!",
"rotate punctuation",
caesar-cipher( :text("The quick brown fox jumps over the lazy dog."), :shift-key(13) ),
"eq",
"Gur dhvpx oebja sbk whzcf bire gur ynml qbt.",
"encrypt",
);
}
} # end: 32dd74f6-db2b-41a6-b02c-82eb4f93e549

subtest "The quick brown fox jumps over the lazy dog." => { # begin: 9fb93fe6-42b0-46e6-9ec1-0bf0a062d8c9
cmp-ok(
caesar-cipher("The quick brown fox jumps over the lazy dog.", 13),
"eq",
"Gur dhvpx oebja sbk whzcf bire gur ynml qbt.",
"rotate all letters",
);
if 13 == 13 {
cmp-ok(
caesar-cipher(caesar-cipher("The quick brown fox jumps over the lazy dog.", 13),13),
"eq",
"The quick brown fox jumps over the lazy dog.",
"rotate all letters",
caesar-cipher( :text("Gur dhvpx oebja sbk whzcf bire gur ynml qbt."), :shift-key(13) ),
"eq",
"The quick brown fox jumps over the lazy dog.",
"decrypt",
);
}
} # end: 9fb93fe6-42b0-46e6-9ec1-0bf0a062d8c9

done-testing;

0 comments on commit 22fc859

Please sign in to comment.