mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #22486: Added the math.gcd() function. The fractions.gcd() function now is
deprecated. Based on patch by Mark Dickinson.
This commit is contained in:
parent
f0eeedf0d8
commit
48e47aaa28
9 changed files with 342 additions and 13 deletions
|
@ -175,6 +175,14 @@ def parse_testfile(fname):
|
|||
flags
|
||||
)
|
||||
|
||||
# Class providing an __index__ method.
|
||||
class MyIndexable(object):
|
||||
def __init__(self, value):
|
||||
self.value = value
|
||||
|
||||
def __index__(self):
|
||||
return self.value
|
||||
|
||||
class MathTests(unittest.TestCase):
|
||||
|
||||
def ftest(self, name, value, expected):
|
||||
|
@ -595,6 +603,49 @@ class MathTests(unittest.TestCase):
|
|||
s = msum(vals)
|
||||
self.assertEqual(msum(vals), math.fsum(vals))
|
||||
|
||||
def testGcd(self):
|
||||
gcd = math.gcd
|
||||
self.assertEqual(gcd(0, 0), 0)
|
||||
self.assertEqual(gcd(1, 0), 1)
|
||||
self.assertEqual(gcd(-1, 0), 1)
|
||||
self.assertEqual(gcd(0, 1), 1)
|
||||
self.assertEqual(gcd(0, -1), 1)
|
||||
self.assertEqual(gcd(7, 1), 1)
|
||||
self.assertEqual(gcd(7, -1), 1)
|
||||
self.assertEqual(gcd(-23, 15), 1)
|
||||
self.assertEqual(gcd(120, 84), 12)
|
||||
self.assertEqual(gcd(84, -120), 12)
|
||||
self.assertEqual(gcd(1216342683557601535506311712,
|
||||
436522681849110124616458784), 32)
|
||||
c = 652560
|
||||
x = 434610456570399902378880679233098819019853229470286994367836600566
|
||||
y = 1064502245825115327754847244914921553977
|
||||
a = x * c
|
||||
b = y * c
|
||||
self.assertEqual(gcd(a, b), c)
|
||||
self.assertEqual(gcd(b, a), c)
|
||||
self.assertEqual(gcd(-a, b), c)
|
||||
self.assertEqual(gcd(b, -a), c)
|
||||
self.assertEqual(gcd(a, -b), c)
|
||||
self.assertEqual(gcd(-b, a), c)
|
||||
self.assertEqual(gcd(-a, -b), c)
|
||||
self.assertEqual(gcd(-b, -a), c)
|
||||
c = 576559230871654959816130551884856912003141446781646602790216406874
|
||||
a = x * c
|
||||
b = y * c
|
||||
self.assertEqual(gcd(a, b), c)
|
||||
self.assertEqual(gcd(b, a), c)
|
||||
self.assertEqual(gcd(-a, b), c)
|
||||
self.assertEqual(gcd(b, -a), c)
|
||||
self.assertEqual(gcd(a, -b), c)
|
||||
self.assertEqual(gcd(-b, a), c)
|
||||
self.assertEqual(gcd(-a, -b), c)
|
||||
self.assertEqual(gcd(-b, -a), c)
|
||||
|
||||
self.assertRaises(TypeError, gcd, 120.0, 84)
|
||||
self.assertRaises(TypeError, gcd, 120, 84.0)
|
||||
self.assertEqual(gcd(MyIndexable(120), MyIndexable(84)), 12)
|
||||
|
||||
def testHypot(self):
|
||||
self.assertRaises(TypeError, math.hypot)
|
||||
self.ftest('hypot(0,0)', math.hypot(0,0), 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue