aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_long.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_long.py')
-rw-r--r--Lib/test/test_long.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index 3c8e9e22e17..f2a622b5868 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -1502,6 +1502,17 @@ class LongTest(unittest.TestCase):
self.assertEqual(type(numerator), int)
self.assertEqual(type(denominator), int)
+ def test_square(self):
+ # Multiplication makes a special case of multiplying an int with
+ # itself, using a special, faster algorithm. This test is mostly
+ # to ensure that no asserts in the implementation trigger, in
+ # cases with a maximal amount of carries.
+ for bitlen in range(1, 400):
+ n = (1 << bitlen) - 1 # solid string of 1 bits
+ with self.subTest(bitlen=bitlen, n=n):
+ # (2**i - 1)**2 = 2**(2*i) - 2*2**i + 1
+ self.assertEqual(n**2,
+ (1 << (2 * bitlen)) - (1 << (bitlen + 1)) + 1)
if __name__ == "__main__":
unittest.main()