mirror of https://github.com/python/cpython
bpo-46361: Fix "small" `int` caching (GH-30583)
This commit is contained in:
parent
09087b8519
commit
5cd9a162cd
|
@ -2552,6 +2552,13 @@ class PythonAPItests(unittest.TestCase):
|
|||
self.assertRaises(OverflowError, int, Decimal('inf'))
|
||||
self.assertRaises(OverflowError, int, Decimal('-inf'))
|
||||
|
||||
@cpython_only
|
||||
def test_small_ints(self):
|
||||
Decimal = self.decimal.Decimal
|
||||
# bpo-46361
|
||||
for x in range(-5, 257):
|
||||
self.assertIs(int(Decimal(x)), x)
|
||||
|
||||
def test_trunc(self):
|
||||
Decimal = self.decimal.Decimal
|
||||
|
||||
|
|
|
@ -1471,6 +1471,13 @@ class LongTest(unittest.TestCase):
|
|||
self.assertEqual(i, 1)
|
||||
self.assertEqual(getattr(i, 'foo', 'none'), 'bar')
|
||||
|
||||
@support.cpython_only
|
||||
def test_from_bytes_small(self):
|
||||
# bpo-46361
|
||||
for i in range(-5, 257):
|
||||
b = i.to_bytes(2, signed=True)
|
||||
self.assertIs(int.from_bytes(b, signed=True), i)
|
||||
|
||||
def test_access_to_nonexistent_digit_0(self):
|
||||
# http://bugs.python.org/issue14630: A bug in _PyLong_Copy meant that
|
||||
# ob_digit[0] was being incorrectly accessed for instances of a
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Ensure that "small" integers created by :meth:`int.from_bytes` and
|
||||
:class:`decimal.Decimal` are properly cached.
|
|
@ -3394,6 +3394,13 @@ dec_as_long(PyObject *dec, PyObject *context, int round)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (n == 1) {
|
||||
sdigit val = mpd_arith_sign(x) * ob_digit[0];
|
||||
mpd_free(ob_digit);
|
||||
mpd_del(x);
|
||||
return PyLong_FromLong(val);
|
||||
}
|
||||
|
||||
assert(n > 0);
|
||||
pylong = _PyLong_New(n);
|
||||
if (pylong == NULL) {
|
||||
|
|
|
@ -911,7 +911,7 @@ _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
|
|||
}
|
||||
|
||||
Py_SET_SIZE(v, is_signed ? -idigit : idigit);
|
||||
return (PyObject *)long_normalize(v);
|
||||
return (PyObject *)maybe_small_long(long_normalize(v));
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue