# PyOS_ascii_formatd is deprecated and not called from anywhere in # Python itself. So this module is the only place it gets tested. # Test that it works, and test that it's deprecated. import unittest from test.test_support import check_warnings, run_unittest, import_module # Skip tests if _ctypes module does not exist import_module('_ctypes') from ctypes import pythonapi, create_string_buffer, sizeof, byref, c_double PyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd class FormatDeprecationTests(unittest.TestCase): def test_format_deprecation(self): buf = create_string_buffer(' ' * 100) with check_warnings(('PyOS_ascii_formatd is deprecated', DeprecationWarning)): PyOS_ascii_formatd(byref(buf), sizeof(buf), '%+.10f', c_double(10.0)) self.assertEqual(buf.value, '+10.0000000000') class FormatTests(unittest.TestCase): # ensure that, for the restricted set of format codes, # %-formatting returns the same values os PyOS_ascii_formatd def test_format(self): buf = create_string_buffer(' ' * 100) tests = [ ('%f', 100.0), ('%g', 100.0), ('%#g', 100.0), ('%#.2g', 100.0), ('%#.2g', 123.4567), ('%#.2g', 1.234567e200), ('%e', 1.234567e200), ('%e', 1.234), ('%+e', 1.234), ('%-e', 1.234), ] with check_warnings(('PyOS_ascii_formatd is deprecated', DeprecationWarning)): for format, val in tests: PyOS_ascii_formatd(byref(buf), sizeof(buf), format, c_double(val)) self.assertEqual(buf.value, format % val) def test_main(): run_unittest(FormatDeprecationTests, FormatTests) if __name__ == '__main__': test_main()