1+ import unittest
2+ from pactus .utils import utils
3+
4+
5+ class TestEvaluatePolynomial (unittest .TestCase ):
6+ def test_empty_coefficients (self ):
7+ self .assertIsNone (utils .evaluate_polynomial ([], 2 , 7 ))
8+
9+ def test_single_coefficient (self ):
10+ self .assertEqual (utils .evaluate_polynomial ([5 ], 10 , 7 ), 5 )
11+
12+ def test_x_zero (self ):
13+ # f(0) = c[0] % mod
14+ self .assertEqual (utils .evaluate_polynomial ([3 , 2 , 1 ], 0 , 5 ), 3 % 5 )
15+
16+ def test_x_one (self ):
17+ # f(1) = sum(c) % mod
18+ self .assertEqual (utils .evaluate_polynomial ([1 , 2 , 3 ], 1 , 7 ), (1 + 2 + 3 ) % 7 )
19+
20+ def test_multiple_coefficients (self ):
21+ # f(2) = 1 + 2*2 + 3*2^2 = 1 + 4 + 12 = 17 % 5 = 2
22+ self .assertEqual (utils .evaluate_polynomial ([1 , 2 , 3 ], 2 , 5 ), 2 )
23+
24+ def test_negative_coefficients (self ):
25+ # f(2) = -1 + 2*2 + (-3)*2^2 = -1 + 4 - 12 = -9 % 7 = 5
26+ self .assertEqual (utils .evaluate_polynomial ([- 1 , 2 , - 3 ], 2 , 7 ), 5 )
27+
28+ def test_negative_x (self ):
29+ # f(-1) = 2 + 3*(-1) + 4*(-1)^2 = 2 - 3 + 4 = 3 % 6 = 3
30+ self .assertEqual (utils .evaluate_polynomial ([2 , 3 , 4 ], - 1 , 6 ), 3 )
31+
32+ def test_large_modulus (self ):
33+ # f(3) = 2 + 4*3 + 5*9 = 2 + 12 + 45 = 59 % 1000 = 59
34+ self .assertEqual (utils .evaluate_polynomial ([2 , 4 , 5 ], 3 , 1000 ), 59 )
35+
36+ def test_modulus_one (self ):
37+ # Any value mod 1 is 0
38+ self .assertEqual (utils .evaluate_polynomial ([1 , 2 , 3 ], 5 , 1 ), 0 )
39+
40+ def test_wikipedia_example (self ):
41+ # https://en.wikipedia.org/wiki/Shamir%27s_secret_sharing
42+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 1 , 2 ** 127 - 1 ), 1494 )
43+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 2 , 2 ** 127 - 1 ), 1942 )
44+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 3 , 2 ** 127 - 1 ), 2578 )
45+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 4 , 2 ** 127 - 1 ), 3402 )
46+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 5 , 2 ** 127 - 1 ), 4414 )
47+ self .assertEqual (utils .evaluate_polynomial ([1234 , 166 , 94 ], 6 , 2 ** 127 - 1 ), 5614 )
48+
49+
50+ if __name__ == "__main__" :
51+ unittest .main ()
0 commit comments