-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_prime.py
More file actions
41 lines (40 loc) · 1.55 KB
/
Copy pathtest_prime.py
File metadata and controls
41 lines (40 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import unittest
import random
import prime
class Tests(unittest.TestCase):
def test_isPrime(self):
self.assertTrue(prime.isPrime(2))
self.assertTrue(prime.isPrime(3))
self.assertFalse(prime.isPrime(4))
self.assertFalse(prime.isPrime(49))
self.assertFalse(prime.isPrime(179426547))
self.assertTrue(prime.isPrime(179426549))
def test_getRandPrime(self):
for i in range(100):
n = prime.getRandPrime(10 + i)
self.assertTrue(prime.isPrime(n))
def test_inv(self):
r = random.SystemRandom()
for p in [prime.getRandPrime(10 + i) for i in range(10)]:
self.assertEqual(prime.inv(1, p) % p, 1)
self.assertEqual(prime.inv(p - 1, p) * (p - 1) % p, 1)
for i in range(10):
a = r.randint(1, p-1)
self.assertEqual(prime.inv(a, p) * a % p, 1)
def test_expmod(self):
self.assertEqual(prime.expmod(5, 10, 11), 1)
self.assertEqual(prime.expmod(15, 22, 23), 1)
self.assertEqual(prime.expmod(24, 36, 37), 1)
self.assertEqual(prime.expmod(35, 52, 53), 1)
self.assertEqual(prime.expmod(50, 66, 67), 1)
def test_sqrtmod(self):
r = random.SystemRandom()
for i in range(10):
p = prime.getRandPrime(20)
while p < 10:
p = prime.getRandPrime(10)
for j in range(100):
a = r.randint(1, p - 1)
x = prime.sqrtmod(a, p)
if x:
self.assertTrue(x * x % p == a)