summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/whatsnew/3.8.rst4
-rw-r--r--Lib/test/test_long.py34
-rw-r--r--Objects/longobject.c7
3 files changed, 9 insertions, 36 deletions
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index e522add..93dd24a 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -91,8 +91,8 @@ Other Language Changes
was lifted.
(Contributed by Serhiy Storchaka in :issue:`32489`.)
-* The ``int`` type now has a new ``as_integer_ratio`` method compatible
- with the existing ``float.as_integer_ratio`` method.
+* The :class:`int` type now has a new :meth:`~int.as_integer_ratio` method
+ compatible with the existing :meth:`float.as_integer_ratio` method.
(Contributed by Lisa Roach in :issue:`33073`.)
* Added support of ``\N{name}`` escapes in :mod:`regular expressions <re>`.
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index 5b860dd..53101b3 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -3,7 +3,6 @@ from test import support
import sys
-import enum
import random
import math
import array
@@ -1354,35 +1353,14 @@ class LongTest(unittest.TestCase):
self.assertEqual(type(value >> shift), int)
def test_as_integer_ratio(self):
- tests = [10, 0, -10, 1]
+ class myint(int):
+ pass
+ tests = [10, 0, -10, 1, sys.maxsize + 1, True, False, myint(42)]
for value in tests:
numerator, denominator = value.as_integer_ratio()
- self.assertEqual((numerator, denominator), (value, 1))
- self.assertIsInstance(numerator, int)
- self.assertIsInstance(denominator, int)
-
- def test_as_integer_ratio_maxint(self):
- x = sys.maxsize + 1
- self.assertEqual(x.as_integer_ratio()[0], x)
-
- def test_as_integer_ratio_bool(self):
- self.assertEqual(True.as_integer_ratio(), (1, 1))
- self.assertEqual(False.as_integer_ratio(), (0, 1))
- self.assertEqual(type(True.as_integer_ratio()[0]), int)
- self.assertEqual(type(False.as_integer_ratio()[0]), int)
-
- def test_as_integer_ratio_int_enum(self):
- class Foo(enum.IntEnum):
- X = 42
- self.assertEqual(Foo.X.as_integer_ratio(), (42, 1))
- self.assertEqual(type(Foo.X.as_integer_ratio()[0]), int)
-
- def test_as_integer_ratio_int_flag(self):
- class Foo(enum.IntFlag):
- R = 1 << 2
- self.assertEqual(Foo.R.as_integer_ratio(), (4, 1))
- self.assertEqual(type(Foo.R.as_integer_ratio()[0]), int)
-
+ self.assertEqual((numerator, denominator), (int(value), 1))
+ self.assertEqual(type(numerator), int)
+ self.assertEqual(type(denominator), int)
if __name__ == "__main__":
diff --git a/Objects/longobject.c b/Objects/longobject.c
index ae3a98c..6f7fe33 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -5280,13 +5280,8 @@ static PyObject *
int_as_integer_ratio_impl(PyObject *self)
/*[clinic end generated code: output=e60803ae1cc8621a input=55ce3058e15de393]*/
{
- PyObject *numerator;
PyObject *ratio_tuple;
-
- if (PyLong_CheckExact(self)) {
- return PyTuple_Pack(2, self, _PyLong_One);
- }
- numerator = _PyLong_Copy((PyLongObject *) self);
+ PyObject *numerator = long_long(self);
if (numerator == NULL) {
return NULL;
}