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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
from unittest import TestCase
from pyecsca.ec.mod import Mod, gcd, extgcd, Undefined
class ModTests(TestCase):
def test_gcd(self):
self.assertEqual(gcd(15, 20), 5)
self.assertEqual(extgcd(15, 0), (1, 0, 15))
self.assertEqual(extgcd(15, 20), (-1, 1, 5))
def test_wrong_mod(self):
a = Mod(5, 7)
b = Mod(4, 11)
with self.assertRaises(ValueError):
a + b
def test_wrong_pow(self):
a = Mod(5, 7)
c = Mod(4, 11)
with self.assertRaises(TypeError):
a**c
def test_other(self):
a = Mod(5, 7)
b = Mod(3, 7)
self.assertEqual(int(-a), 2)
self.assertEqual(str(a), "5")
self.assertEqual(6 - a, Mod(1, 7))
self.assertNotEqual(a, b)
self.assertEqual(a / b, Mod(4, 7))
self.assertEqual(a // b, Mod(4, 7))
self.assertEqual(5 / b, Mod(4, 7))
self.assertEqual(5 // b, Mod(4, 7))
self.assertEqual(a / 3, Mod(4, 7))
self.assertEqual(a // 3, Mod(4, 7))
self.assertEqual(divmod(a, b), (Mod(1, 7), Mod(2, 7)))
self.assertEqual(a + b, Mod(1, 7))
self.assertEqual(5 + b, Mod(1, 7))
self.assertEqual(a + 3, Mod(1, 7))
self.assertNotEqual(a, 6)
def test_undefined(self):
u = Undefined()
for k, meth in u.__class__.__dict__.items():
if k in ("__module__", "__init__", "__doc__", "__hash__"):
continue
args = [5 for _ in range(meth.__code__.co_argcount - 1)]
if k == "__repr__":
self.assertEqual(meth(u), "Undefined")
elif k in ("__eq__", "__ne__"):
assert not meth(u, *args)
else:
with self.assertRaises(NotImplementedError):
meth(u, *args)
|