---
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.append('../')
|
||||
from functions import extended_gcd
|
||||
|
||||
from sympy import prevprime
|
||||
import random
|
||||
|
||||
|
||||
class TestExtendedEuclideanAlgorithm(unittest.TestCase):
|
||||
|
||||
def test_positive_numbers(self):
|
||||
gcd, x, y = extended_gcd(240, 46)
|
||||
self.assertEqual(gcd, 2)
|
||||
self.assertEqual(240 * x + 46 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(123456, 789012)
|
||||
self.assertEqual(gcd, 12)
|
||||
self.assertEqual(123456 * x + 789012 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(65345, 323160)
|
||||
self.assertEqual(gcd, 5)
|
||||
self.assertEqual(65345 * x + 323160 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(2330646462, 3044333)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(2330646462 * x + 3044333 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(926467262, 6430314335)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(926467262 * x + 6430314335 * y, gcd)
|
||||
|
||||
def test_one_zero(self):
|
||||
gcd, x, y = extended_gcd(7, 0)
|
||||
self.assertEqual(gcd, 7)
|
||||
self.assertEqual(7 * x + 0 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(0, 239402839)
|
||||
self.assertEqual(gcd, 239402839)
|
||||
self.assertEqual(0 * x + 239402839 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(0, 29342093849283409283984234)
|
||||
self.assertEqual(gcd, 29342093849283409283984234)
|
||||
self.assertEqual(0 * x + 29342093849283409283984234 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(888888888888888888888888, 0)
|
||||
self.assertEqual(gcd, 888888888888888888888888)
|
||||
self.assertEqual(888888888888888888888888 * x + 0 * y, gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(10**100, 0)
|
||||
self.assertEqual(gcd, 10**100)
|
||||
self.assertEqual(10**100 * x + 0 * y, gcd)
|
||||
|
||||
def test_both_zeros(self):
|
||||
gcd, x, y = extended_gcd(0, 0)
|
||||
self.assertEqual(gcd, 0)
|
||||
self.assertEqual(0 * x + 0 * y, gcd)
|
||||
|
||||
def test_negative_numbers(self):
|
||||
gcd, x, y = extended_gcd(-120, 23)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-120) * x + 23 * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-120, 23)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-120) * x + 23 * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-15, 4)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-15) * x + 4 * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-123456, 78901)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-123456) * x + 78901 * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(101, -50)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs(101 * x + (-50) * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(100000, -45000)
|
||||
self.assertEqual(gcd, 5000)
|
||||
self.assertEqual(abs(100000 * x + (-45000) * y), gcd)
|
||||
|
||||
def test_both_negatives(self):
|
||||
gcd, x, y = extended_gcd(-10, -25)
|
||||
self.assertEqual(gcd, 5)
|
||||
self.assertEqual(abs((-10) * x + (-25) * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-120, -360)
|
||||
self.assertEqual(gcd, 120)
|
||||
self.assertEqual(abs((-120) * x + (-360) * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-123456, -789012)
|
||||
self.assertEqual(gcd, 12)
|
||||
self.assertEqual(abs((-123456) * x + (-789012) * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-101, -103)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-101) * x + (-103) * y), gcd)
|
||||
|
||||
gcd, x, y = extended_gcd(-1001, -997)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(abs((-1001) * x + (-997) * y), gcd)
|
||||
|
||||
def test_very_large_numbers(self):
|
||||
large_prime_1 = prevprime(10**50)
|
||||
large_prime_2 = prevprime(10**100)
|
||||
gcd, x, y = extended_gcd(large_prime_1, large_prime_2)
|
||||
self.assertEqual(gcd, 1)
|
||||
self.assertEqual(large_prime_1 * x + large_prime_2 * y, gcd)
|
||||
|
||||
random_num = random.randint(1, 10**50)
|
||||
gcd, x, y = extended_gcd(random_num, random_num * large_prime_2)
|
||||
self.assertEqual(gcd, random_num)
|
||||
self.assertEqual(random_num * x + random_num * large_prime_2 * y, gcd)
|
||||
|
||||
random_num = random.randint(1, 10**50)
|
||||
large_prime_2 = prevprime(10**500)
|
||||
gcd, x, y = extended_gcd(random_num, random_num * large_prime_2)
|
||||
self.assertEqual(gcd, random_num)
|
||||
self.assertEqual(random_num * x + random_num * large_prime_2 * y, gcd)
|
||||
|
||||
random_num = random.randint(1, 10**50)
|
||||
large_prime_2 = prevprime(10**750)
|
||||
gcd, x, y = extended_gcd(random_num, random_num * large_prime_2)
|
||||
self.assertEqual(gcd, random_num)
|
||||
self.assertEqual(random_num * x + random_num * large_prime_2 * y, gcd)
|
||||
|
||||
random_num = random.randint(1, 10**50)
|
||||
large_prime_2 = prevprime(10**1000)
|
||||
gcd, x, y = extended_gcd(random_num, random_num * large_prime_2)
|
||||
self.assertEqual(gcd, random_num)
|
||||
self.assertEqual(random_num * x + random_num * large_prime_2 * y, gcd)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -0,0 +1,31 @@
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.append('../../')
|
||||
from generate import generate
|
||||
from encrypt import encrypt
|
||||
from decrypt import decrypt
|
||||
|
||||
|
||||
class TestEncryptDecrypt(unittest.TestCase):
|
||||
|
||||
def test_encrypt_decrypt(self):
|
||||
test_strings = [
|
||||
"Manifesto of the Communist Party A spectre is haunting Europe — the spectre of communism. All the powers of old Europe have entered into a holy alliance to exorcise this spectre: Pope and Tsar, Metternich and Guizot, French Radicals and German police-spies.", # 257-character string
|
||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
|
||||
'没有共产党就没有新中国',
|
||||
'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän kymmenen',
|
||||
'Jag förstår inte.',
|
||||
'12 апреля 1961 года Юрий Гагарин стал первым человеком в мировой истории, совершившим полёт в космическое пространство.'
|
||||
]
|
||||
for ORIGINAL_STRING in test_strings:
|
||||
(n, e, d) = generate()
|
||||
encrypted = encrypt(ORIGINAL_STRING, n, e)
|
||||
self.assertNotEqual(ORIGINAL_STRING, encrypted, 'The encrypted string is not the same as the original string.')
|
||||
self.assertIsInstance(encrypted, str, 'The result of the encryption is indeed a string.')
|
||||
decrypted = decrypt(encrypted, d, n)
|
||||
self.assertEqual(ORIGINAL_STRING, decrypted, 'The decrypted string matches the original string.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -0,0 +1,20 @@
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.append('../../')
|
||||
from generate import generate
|
||||
from functions import primality_test
|
||||
|
||||
|
||||
class TestGenerator(unittest.TestCase):
|
||||
|
||||
def test_generate(self):
|
||||
(n, e, d) = generate()
|
||||
self.assertIsInstance(n, int, 'n is correctly returned as an integer.')
|
||||
self.assertIsInstance(e, int, 'e is correctly returned as an integer.')
|
||||
self.assertIsInstance(d, int, 'd is correctly returned as an integer.')
|
||||
self.assertFalse(primality_test(n), 'n is not a prime number.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -0,0 +1,70 @@
|
||||
import sys
|
||||
import unittest
|
||||
import random
|
||||
|
||||
sys.path.append('../')
|
||||
from functions import primality_test
|
||||
|
||||
|
||||
class TestPrimalityTest(unittest.TestCase):
|
||||
|
||||
def test_prime_number(self):
|
||||
self.assertTrue(primality_test(5), msg='5 is a prime number.')
|
||||
self.assertTrue(primality_test(7), msg='7 is a prime number.')
|
||||
self.assertTrue(primality_test(29), msg='29 is a prime number.')
|
||||
self.assertTrue(primality_test(34841), msg='34841 is a prime number.')
|
||||
self.assertTrue(primality_test(8328989), msg='8328989 is a prime number.')
|
||||
|
||||
large_prime = (2**32 + 1) // 641
|
||||
self.assertTrue(primality_test(large_prime), msg=f'{large_prime} is a prime number.')
|
||||
|
||||
large_prime = (10**18 + 1) // 1000001
|
||||
self.assertTrue(primality_test(large_prime), msg=f'{large_prime} is a prime number.')
|
||||
|
||||
large_prime = 170141183460469231731687303715884105727
|
||||
self.assertTrue(primality_test(large_prime), msg=f'{large_prime} is a prime number.')
|
||||
|
||||
large_prime = 180 * large_prime**2 + 1
|
||||
self.assertTrue(primality_test(large_prime), msg=f'{large_prime} is a prime number.')
|
||||
|
||||
large_prime = 531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127
|
||||
self.assertTrue(primality_test(large_prime), msg=f'{large_prime} is a prime number.')
|
||||
|
||||
def test_non_prime_number(self):
|
||||
self.assertFalse(primality_test(4), msg='4 is not a prime number.')
|
||||
self.assertFalse(primality_test(6), msg='6 is not a prime number.')
|
||||
self.assertFalse(primality_test(8), msg='8 is not a prime number.')
|
||||
self.assertFalse(primality_test(17650839), msg='17650839 is not a prime number.')
|
||||
|
||||
large_non_prime = 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 + 1
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
large_prime = (2**64 + 1) // 274177
|
||||
large_prime_2 = (2 * 32 + 1) // 641
|
||||
large_non_prime = large_prime * large_prime_2
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
large_non_prime = large_prime * random.randint(1, 10**1000)
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
large_non_prime = large_prime_2 * random.randint(1, 7**750)
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
large_non_prime = random.randint(1, 10**1000) * random.randint(1, 10**1000)
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
large_prime = 531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127
|
||||
large_prime_2 = (2**64 + 1) // 274177
|
||||
large_non_prime = large_prime * large_prime_2
|
||||
self.assertFalse(primality_test(large_non_prime), msg=f'{large_non_prime} is not a prime number.')
|
||||
|
||||
def test_edge_cases(self):
|
||||
self.assertFalse(primality_test(0), msg='0 is not a prime number.')
|
||||
self.assertFalse(primality_test(1), msg='1 is not a prime number.')
|
||||
self.assertTrue(primality_test(2), msg='2 is a prime number.')
|
||||
self.assertTrue(primality_test(3), msg='3 is a prime number.')
|
||||
self.assertTrue(primality_test(5), msg='5 is a prime number.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user