From: Neil Smith Date: Thu, 5 Apr 2018 10:36:16 +0000 (+0100) Subject: Tweaks for testing examples X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;ds=inline;h=a9dbfdb94e128941aa2db4e9eb839720ebc9f25a;p=cipher-tools.git Tweaks for testing examples --- diff --git a/caesar-cipher.ods b/caesar-cipher.ods index d7cfe16..4f4243d 100644 Binary files a/caesar-cipher.ods and b/caesar-cipher.ods differ diff --git a/support/utilities.py b/support/utilities.py index 3125a94..7319621 100644 --- a/support/utilities.py +++ b/support/utilities.py @@ -192,4 +192,5 @@ def frequencies(text): return collections.Counter(c for c in text) if __name__ == "__main__": - import doctest \ No newline at end of file + import doctest + doctest.testmod() \ No newline at end of file diff --git a/test/test_affine.py b/test/test_affine.py new file mode 100644 index 0000000..83d9090 --- /dev/null +++ b/test/test_affine.py @@ -0,0 +1,59 @@ +import unittest +import string + +from cipher.affine import * +from support.utilities import * + +class AffineTest(unittest.TestCase): + + def test_encipher_letter(self): + for p, c in zip( + string.ascii_letters, + 'hknqtwzcfiloruxadgjmpsvybeHKNQTWZCFILORUXADGJMPSVYBE'): + self.assertEqual(affine_encipher_letter(p, 3, 5, True), c) + + for p, c in zip( + string.ascii_letters, + 'filoruxadgjmpsvybehknqtwzcFILORUXADGJMPSVYBEHKNQTWZC'): + self.assertEqual(affine_encipher_letter(p, 3, 5, False), c) + + + def test_decipher_letter(self): + for p, c in zip( + string.ascii_letters, + 'hknqtwzcfiloruxadgjmpsvybeHKNQTWZCFILORUXADGJMPSVYBE'): + self.assertEqual(affine_decipher_letter(c, 3, 5, True), p) + + for p, c in zip( + string.ascii_letters, + 'filoruxadgjmpsvybehknqtwzcFILORUXADGJMPSVYBEHKNQTWZC'): + self.assertEqual(affine_decipher_letter(c, 3, 5, False), p) + + def test_encipher_message(self): + self.assertEqual(affine_encipher( + 'hours passed during which jerico tried every trick he could think of', + 15, 22, True), + 'lmyfu bkuusd dyfaxw claol psfaom jfasd snsfg jfaoe ls omytd jlaxe mh') + + + def test_decipher_message(self): + self.assertEqual(affine_decipher('lmyfu bkuusd dyfaxw claol psfaom jfasd snsfg jfaoe ls omytd jlaxe mh', + 15, 22, True), + 'hours passed during which jerico tried every trick he could think of') + + + def test_break(self): + ciphertext = '''lmyfu bkuusd dyfaxw claol psfaom jfasd snsfg jfaoe ls + omytd jlaxe mh jm bfmibj umis hfsul axubafkjamx. ls kffkxwsd jls + ofgbjmwfkiu olfmxmtmwaokttg jlsx ls kffkxwsd jlsi zg tsxwjl. jlsx + ls umfjsd jlsi zg hfsqysxog. ls dmmdtsd mx jls bats mh bkbsf. ls + bfmctsd kfmyxd jls lyj, mztanamyu xmc jm clm cku tmmeaxw kj lai + kxd clm ckuxj.''' + expected_key = (15, 22, True) + expected_score = -340.6011819 + actual_key, actual_score = affine_break(ciphertext) + self.assertEqual(expected_key, actual_key) + self.assertAlmostEqual(expected_score, actual_score) + +if __name__ == '__main__': + unittest.main()