Optimization to stop creating new small longs and use the
one previously stored. Issue 2417.
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index b00f736..c475878 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -805,6 +805,24 @@
self.assertRaises(ZeroDivisionError, eval, zero, namespace)
+ def test_small_ints(self):
+ for i in range(-5, 257):
+ self.assertTrue(i is i + 0)
+ self.assertTrue(i is i * 1)
+ self.assertTrue(i is i - 0)
+ self.assertTrue(i is i // 1)
+ self.assertTrue(i is i & -1)
+ self.assertTrue(i is i | 0)
+ self.assertTrue(i is i ^ 0)
+ self.assertTrue(i is ~~i)
+ self.assertTrue(i is i**1)
+ self.assertTrue(i is int(str(i)))
+ self.assertTrue(i is i<<2>>2, str(i))
+ # corner cases
+ i = 1 << 70
+ self.assertTrue(i - i is 0)
+ self.assertTrue(0 * i is 0)
+
def test_main():
support.run_unittest(LongTest)