]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-86069: Add more PyNumber_InPlacePower() tests (GH-130111) (GH-130211)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 17 Feb 2025 08:24:59 +0000 (09:24 +0100)
committerGitHub <noreply@github.com>
Mon, 17 Feb 2025 08:24:59 +0000 (10:24 +0200)
Test it with the third argument.
(cherry picked from commit cfe41037eb5293a051846ddc0b4afdb7a5f60540)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/test/test_capi/test_number.py

index 3c1f0f248c37cbe04c8d26f6cc51cedd20af55fc..ca3494e8a5092a480014a6f704aa6a0dda44fd72 100644 (file)
@@ -205,8 +205,9 @@ class CAPITest(unittest.TestCase):
         self.assertRaises(MemoryError, inplacemultiply, [1, 2], PY_SSIZE_T_MAX//2 + 1)
 
     def test_misc_power(self):
-        # PyNumber_Power()
+        # PyNumber_Power(), PyNumber_InPlacePower()
         power = _testcapi.number_power
+        inplacepower = _testcapi.number_inplacepower
 
         class HasPow(WithDunder):
             methname = '__pow__'
@@ -216,6 +217,39 @@ class CAPITest(unittest.TestCase):
         self.assertRaises(TypeError, power, 4, 11, 1.25)
         self.assertRaises(TypeError, power, 4, 11, HasPow.with_val(NotImplemented))
         self.assertRaises(TypeError, power, 4, 11, object())
+        self.assertEqual(inplacepower(4, 11, 5), pow(4, 11, 5))
+        self.assertRaises(TypeError, inplacepower, 4, 11, 1.25)
+        self.assertRaises(TypeError, inplacepower, 4, 11, object())
+
+        class X:
+            def __pow__(*args):
+                return args
+
+        x = X()
+        self.assertEqual(power(x, 11), (x, 11))
+        self.assertEqual(inplacepower(x, 11), (x, 11))
+        self.assertEqual(power(x, 11, 5), (x, 11, 5))
+        self.assertEqual(inplacepower(x, 11, 5), (x, 11, 5))
+
+        class X:
+            def __rpow__(*args):
+                return args
+
+        x = X()
+        self.assertEqual(power(4, x), (x, 4))
+        self.assertEqual(inplacepower(4, x), (x, 4))
+        # XXX: Three-arg power doesn't use __rpow__.
+        self.assertRaises(TypeError, power, 4, x, 5)
+        self.assertRaises(TypeError, inplacepower, 4, x, 5)
+
+        class X:
+            def __ipow__(*args):
+                return args
+
+        x = X()
+        self.assertEqual(inplacepower(x, 11), (x, 11))
+        # XXX: In-place power doesn't pass the third arg to __ipow__.
+        self.assertEqual(inplacepower(x, 11, 5), (x, 11))
 
     @cpython_only
     def test_rshift_print(self):