aboutsummaryrefslogtreecommitdiff
path: root/test/ec/test_op.py
blob: 13efc53ac9a4f0597212fde143b33325671ecd3b (plain)
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
from ast import parse
from unittest import TestCase

from parameterized import parameterized

from pyecsca.ec.mod import Mod
from pyecsca.ec.op import CodeOp


class OpTests(TestCase):

    @parameterized.expand([
        ("add", "x = a+b", "x = a+b"),
        ("sub", "x = a-b", "x = a-b"),
        ("mul", "y = a*b", "y = a*b"),
        ("div", "z = a/b", "z = a/b"),
        ("pow", "b = a**d", "b = a^d")
    ])
    def test_str(self, name, module, result):
        code = parse(module, mode="exec")
        op = CodeOp(code)
        self.assertEqual(str(op), result)

    @parameterized.expand([
        ("add", "x = a+b", {"a": Mod(5, 21), "b": Mod(7, 21)}, Mod(12, 21)),
        ("sub", "x = a-b", {"a": Mod(7, 21), "b": Mod(5, 21)}, Mod(2, 21))
    ])
    def test_call(self, name, module, locals, result):
        code = parse(module, mode="exec")
        op = CodeOp(code)
        res = op(**locals)
        self.assertEqual(res, result)