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(str(w
.message
), 'PyOS_ascii_formatd is deprecated, '
25 'use PyOS_double_to_string instead')
27 class FormatTests(unittest
.TestCase
):
28 # ensure that, for the restricted set of format codes,
29 # %-formatting returns the same values os PyOS_ascii_formatd
32 # delay importing ctypes until we know we're in CPython
33 from ctypes
import (pythonapi
, create_string_buffer
, sizeof
, byref
,
35 PyOS_ascii_formatd
= pythonapi
.PyOS_ascii_formatd
36 buf
= create_string_buffer(' ' * 100)
44 ('%#.2g', 1.234567e200
),
51 with
check_warnings():
52 for format
, val
in tests
:
53 PyOS_ascii_formatd(byref(buf
), sizeof(buf
), format
,
55 self
.assertEqual(buf
.value
, format
% val
)
59 run_unittest(FormatDeprecationTests
, FormatTests
)
61 if __name__
== '__main__':