mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
Get rid of all METH_OLDARGS & PyArg_Parse.
Fix floating point exception if mpz.powm(10, 1, 0) (modulus == 0). Add a test.
This commit is contained in:
parent
496563a514
commit
02098fa56b
2 changed files with 125 additions and 43 deletions
90
Lib/test/test_mpz.py
Normal file
90
Lib/test/test_mpz.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
|
||||
import mpz
|
||||
from test_support import vereq
|
||||
|
||||
def check_conversion(num):
|
||||
mpz_num = mpz.mpz(num)
|
||||
vereq(int(mpz_num), num)
|
||||
vereq(long(mpz_num), num)
|
||||
vereq(str(mpz_num), 'mpz(%s)' % `int(num)`)
|
||||
|
||||
check_conversion(10)
|
||||
check_conversion(10L)
|
||||
# FIXME: should check strings, but I'm not sure it works, this seems odd:
|
||||
# mpz.mpz('10') == mpz(12337)
|
||||
|
||||
vereq(mpz.divm(100, 200, 3), 2)
|
||||
vereq(mpz.divm(100L, 200, 3), 2)
|
||||
vereq(mpz.divm(100, 200L, 3), 2)
|
||||
vereq(mpz.divm(100L, 200L, 3), 2)
|
||||
|
||||
vereq(mpz.gcd(100, 200), 100)
|
||||
vereq(mpz.gcd(100L, 200), 100)
|
||||
vereq(mpz.gcd(100, 200L), 100)
|
||||
vereq(mpz.gcd(100L, 200L), 100)
|
||||
|
||||
vereq(mpz.gcdext(100, 200), (100, 1, 0))
|
||||
vereq(mpz.gcdext(100L, 200), (100, 1, 0))
|
||||
vereq(mpz.gcdext(100, 200L), (100, 1, 0))
|
||||
vereq(mpz.gcdext(100L, 200L), (100, 1, 0))
|
||||
|
||||
vereq(mpz.powm(100, 0, 3), 1)
|
||||
vereq(mpz.powm(100L, 0, 3), 1)
|
||||
vereq(mpz.powm(100, 0L, 3), 1)
|
||||
vereq(mpz.powm(100L, 0L, 3), 1)
|
||||
|
||||
vereq(mpz.powm(101, 5, 3333), 1616)
|
||||
vereq(mpz.powm(101L, 5, 3333), 1616)
|
||||
vereq(mpz.powm(101, 5L, 3333), 1616)
|
||||
vereq(mpz.powm(101L, 5L, 3333), 1616)
|
||||
|
||||
vereq(mpz.sqrt(100), 10)
|
||||
vereq(mpz.sqrt(100L), 10)
|
||||
vereq(mpz.sqrt(200), 14)
|
||||
vereq(mpz.sqrt(200L), 14)
|
||||
|
||||
vereq(mpz.sqrtrem(100), (10, 0))
|
||||
vereq(mpz.sqrtrem(100L), (10, 0))
|
||||
vereq(mpz.sqrtrem(200), (14, 4))
|
||||
vereq(mpz.sqrtrem(200L), (14, 4))
|
||||
|
||||
try: mpz.mpz(10.)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'mpz(10.) should raise a TypeError'
|
||||
|
||||
try: mpz.powm(10.)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'powm(10.) should raise a TypeError'
|
||||
|
||||
try: mpz.powm(100, 1, 0)
|
||||
except ValueError: pass
|
||||
else: raise TestFailed, 'powm(100, 1, 0) should raise a ValueError'
|
||||
|
||||
try: mpz.divm(10, 10)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'divm(10, 10) should raise a TypeError'
|
||||
|
||||
try: mpz.divm(10, 10, 10.)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'divm(10, 10, 10.) should raise a TypeError'
|
||||
|
||||
try: mpz.gcd(10)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'gcd(10) should raise a TypeError'
|
||||
|
||||
try: mpz.gcd(10, 10.)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'gcd(10, 10.) should raise a TypeError'
|
||||
|
||||
try: mpz.gcdext(10)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'gcdext(10) should raise a TypeError'
|
||||
|
||||
try: mpz.gcdext(10, 10.)
|
||||
except TypeError: pass
|
||||
else: raise TestFailed, 'gcdext(10, 10.) should raise a TypeError'
|
||||
|
||||
try: mpz.mpz(-10).binary()
|
||||
except ValueError: pass
|
||||
else: raise TestFailed, 'mpz(-10).binary() should raise a ValueError'
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue