1 # PyOS_ascii_formatd is deprecated and not called from anywhere in
2 # Python itself. So this module is the only place it gets tested.
3 # Test that it works, and test that it's deprecated.
6 from test_support
import check_warnings
, run_unittest
, cpython_only
9 class FormatDeprecationTests(unittest
.TestCase
):
12 def testFormatDeprecation(self
):
13 # delay importing ctypes until we know we're in CPython
14 from ctypes
import (pythonapi
, create_string_buffer
, sizeof
, byref
,
16 PyOS_ascii_formatd
= pythonapi
.PyOS_ascii_formatd
17 buf
= create_string_buffer(' ' * 100)
19 with
check_warnings() as w
:
20 PyOS_ascii_formatd(byref(buf
), sizeof(buf
), '%+.10f',
22 self
.assertEqual(buf
.value
, '+10.0000000000')
24 self
.assertEqual(w
.category
, DeprecationWarning)
26 class FormatTests(unittest
.TestCase
):
27 # ensure that, for the restricted set of format codes,
28 # %-formatting returns the same values os PyOS_ascii_formatd
31 # delay importing ctypes until we know we're in CPython
32 from ctypes
import (pythonapi
, create_string_buffer
, sizeof
, byref
,
34 PyOS_ascii_formatd
= pythonapi
.PyOS_ascii_formatd
35 buf
= create_string_buffer(' ' * 100)
43 ('%#.2g', 1.234567e200
),
50 with
check_warnings():
51 for format
, val
in tests
:
52 PyOS_ascii_formatd(byref(buf
), sizeof(buf
), format
,
54 self
.assertEqual(buf
.value
, format
% val
)
58 run_unittest(FormatDeprecationTests
, FormatTests
)
60 if __name__
== '__main__':