From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 17 Feb 2025 08:24:59 +0000 (+0100) Subject: [3.13] gh-86069: Add more PyNumber_InPlacePower() tests (GH-130111) (GH-130211) X-Git-Tag: v3.13.3~264 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=30ed4523c08bb7860552455e3143401cffda9235;p=thirdparty%2FPython%2Fcpython.git [3.13] gh-86069: Add more PyNumber_InPlacePower() tests (GH-130111) (GH-130211) Test it with the third argument. (cherry picked from commit cfe41037eb5293a051846ddc0b4afdb7a5f60540) Co-authored-by: Serhiy Storchaka --- diff --git a/Lib/test/test_capi/test_number.py b/Lib/test/test_capi/test_number.py index 3c1f0f248c37..ca3494e8a509 100644 --- a/Lib/test/test_capi/test_number.py +++ b/Lib/test/test_capi/test_number.py @@ -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):