mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #25928: Add Decimal.as_integer_ratio(). Python parts and docs by
Mark Dickinson.
This commit is contained in:
parent
ac1e7f6983
commit
53f2e0ad45
7 changed files with 213 additions and 3 deletions
|
@ -2047,6 +2047,39 @@ class UsabilityTest(unittest.TestCase):
|
|||
d = Decimal( (1, (0, 2, 7, 1), 'F') )
|
||||
self.assertEqual(d.as_tuple(), (1, (0,), 'F'))
|
||||
|
||||
def test_as_integer_ratio(self):
|
||||
Decimal = self.decimal.Decimal
|
||||
|
||||
# exceptional cases
|
||||
self.assertRaises(OverflowError,
|
||||
Decimal.as_integer_ratio, Decimal('inf'))
|
||||
self.assertRaises(OverflowError,
|
||||
Decimal.as_integer_ratio, Decimal('-inf'))
|
||||
self.assertRaises(ValueError,
|
||||
Decimal.as_integer_ratio, Decimal('-nan'))
|
||||
self.assertRaises(ValueError,
|
||||
Decimal.as_integer_ratio, Decimal('snan123'))
|
||||
|
||||
for exp in range(-4, 2):
|
||||
for coeff in range(1000):
|
||||
for sign in '+', '-':
|
||||
d = Decimal('%s%dE%d' % (sign, coeff, exp))
|
||||
pq = d.as_integer_ratio()
|
||||
p, q = pq
|
||||
|
||||
# check return type
|
||||
self.assertIsInstance(pq, tuple)
|
||||
self.assertIsInstance(p, int)
|
||||
self.assertIsInstance(q, int)
|
||||
|
||||
# check normalization: q should be positive;
|
||||
# p should be relatively prime to q.
|
||||
self.assertGreater(q, 0)
|
||||
self.assertEqual(math.gcd(p, q), 1)
|
||||
|
||||
# check that p/q actually gives the correct value
|
||||
self.assertEqual(Decimal(p) / Decimal(q), d)
|
||||
|
||||
def test_subclassing(self):
|
||||
# Different behaviours when subclassing Decimal
|
||||
Decimal = self.decimal.Decimal
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue