[Python-checkins] gh-93884: Improve test coverage of `PyNumber_ToBase` (GH-93932)
miss-islington
webhook-mailer at python.org
Sun Sep 4 06:37:19 EDT 2022
https://github.com/python/cpython/commit/9b9394df5fa808f9a125e3e472e7df4c24aea5a1
commit: 9b9394df5fa808f9a125e3e472e7df4c24aea5a1
branch: main
author: Charlie Zhao <zhaoyu_hit at qq.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2022-09-04T03:37:04-07:00
summary:
gh-93884: Improve test coverage of `PyNumber_ToBase` (GH-93932)
Link to #93884
* Test with some large negative and positive values(out of range of a longlong,i.e.[-2\*\*63, 2\*\*63-1])
* Test with objects of non-int type
Automerge-Triggered-By: GH:mdickinson
files:
A Misc/NEWS.d/next/Tests/2022-06-17-13-27-21.gh-issue-93884.5pvPvl.rst
M Lib/test/test_capi.py
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index d0c4811cad19..94f080978b03 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -753,14 +753,30 @@ def meth(self):
def test_pynumber_tobase(self):
from _testcapi import pynumber_tobase
- self.assertEqual(pynumber_tobase(123, 2), '0b1111011')
- self.assertEqual(pynumber_tobase(123, 8), '0o173')
- self.assertEqual(pynumber_tobase(123, 10), '123')
- self.assertEqual(pynumber_tobase(123, 16), '0x7b')
- self.assertEqual(pynumber_tobase(-123, 2), '-0b1111011')
- self.assertEqual(pynumber_tobase(-123, 8), '-0o173')
- self.assertEqual(pynumber_tobase(-123, 10), '-123')
- self.assertEqual(pynumber_tobase(-123, 16), '-0x7b')
+ small_number = 123
+ large_number = 2**64
+ class IDX:
+ def __init__(self, val):
+ self.val = val
+ def __index__(self):
+ return self.val
+
+ test_cases = ((2, '0b1111011', '0b10000000000000000000000000000000000000000000000000000000000000000'),
+ (8, '0o173', '0o2000000000000000000000'),
+ (10, '123', '18446744073709551616'),
+ (16, '0x7b', '0x10000000000000000'))
+ for base, small_target, large_target in test_cases:
+ with self.subTest(base=base, st=small_target, lt=large_target):
+ # Test for small number
+ self.assertEqual(pynumber_tobase(small_number, base), small_target)
+ self.assertEqual(pynumber_tobase(-small_number, base), '-' + small_target)
+ self.assertEqual(pynumber_tobase(IDX(small_number), base), small_target)
+ # Test for large number(out of range of a longlong,i.e.[-2**63, 2**63-1])
+ self.assertEqual(pynumber_tobase(large_number, base), large_target)
+ self.assertEqual(pynumber_tobase(-large_number, base), '-' + large_target)
+ self.assertEqual(pynumber_tobase(IDX(large_number), base), large_target)
+ self.assertRaises(TypeError, pynumber_tobase, IDX(123.0), 10)
+ self.assertRaises(TypeError, pynumber_tobase, IDX('123'), 10)
self.assertRaises(TypeError, pynumber_tobase, 123.0, 10)
self.assertRaises(TypeError, pynumber_tobase, '123', 10)
self.assertRaises(SystemError, pynumber_tobase, 123, 0)
diff --git a/Misc/NEWS.d/next/Tests/2022-06-17-13-27-21.gh-issue-93884.5pvPvl.rst b/Misc/NEWS.d/next/Tests/2022-06-17-13-27-21.gh-issue-93884.5pvPvl.rst
new file mode 100644
index 000000000000..ce389149aaae
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2022-06-17-13-27-21.gh-issue-93884.5pvPvl.rst
@@ -0,0 +1 @@
+Add test cases for :c:func:`PyNumber_ToBase` that take a large number or a non-int object as parameter.
More information about the Python-checkins
mailing list