1068f06568be288b8628a4e24118503e4d9b7af1bEric Smith# PyOS_ascii_formatd is deprecated and not called from anywhere in 2068f06568be288b8628a4e24118503e4d9b7af1bEric Smith# Python itself. So this module is the only place it gets tested. 3068f06568be288b8628a4e24118503e4d9b7af1bEric Smith# Test that it works, and test that it's deprecated. 4068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 5068f06568be288b8628a4e24118503e4d9b7af1bEric Smithimport unittest 627e024023cca704e44b0d5f577415d061f89f7d7Florent Xiclunafrom test.test_support import check_warnings, run_unittest, import_module 727e024023cca704e44b0d5f577415d061f89f7d7Florent Xicluna 827e024023cca704e44b0d5f577415d061f89f7d7Florent Xicluna# Skip tests if _ctypes module does not exist 927e024023cca704e44b0d5f577415d061f89f7d7Florent Xiclunaimport_module('_ctypes') 1027e024023cca704e44b0d5f577415d061f89f7d7Florent Xicluna 1127e024023cca704e44b0d5f577415d061f89f7d7Florent Xiclunafrom ctypes import pythonapi, create_string_buffer, sizeof, byref, c_double 1227e024023cca704e44b0d5f577415d061f89f7d7Florent XiclunaPyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd 13068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 14068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 15068f06568be288b8628a4e24118503e4d9b7af1bEric Smithclass FormatDeprecationTests(unittest.TestCase): 16068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 17875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna def test_format_deprecation(self): 18068f06568be288b8628a4e24118503e4d9b7af1bEric Smith buf = create_string_buffer(' ' * 100) 19068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 20875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna with check_warnings(('PyOS_ascii_formatd is deprecated', 21875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna DeprecationWarning)): 22068f06568be288b8628a4e24118503e4d9b7af1bEric Smith PyOS_ascii_formatd(byref(buf), sizeof(buf), '%+.10f', 23068f06568be288b8628a4e24118503e4d9b7af1bEric Smith c_double(10.0)) 24068f06568be288b8628a4e24118503e4d9b7af1bEric Smith self.assertEqual(buf.value, '+10.0000000000') 25068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 26875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna 27068f06568be288b8628a4e24118503e4d9b7af1bEric Smithclass FormatTests(unittest.TestCase): 28068f06568be288b8628a4e24118503e4d9b7af1bEric Smith # ensure that, for the restricted set of format codes, 29068f06568be288b8628a4e24118503e4d9b7af1bEric Smith # %-formatting returns the same values os PyOS_ascii_formatd 30875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna def test_format(self): 31068f06568be288b8628a4e24118503e4d9b7af1bEric Smith buf = create_string_buffer(' ' * 100) 32068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 33068f06568be288b8628a4e24118503e4d9b7af1bEric Smith tests = [ 34068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%f', 100.0), 35068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%g', 100.0), 36068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%#g', 100.0), 37068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%#.2g', 100.0), 38068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%#.2g', 123.4567), 39068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%#.2g', 1.234567e200), 40068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%e', 1.234567e200), 41068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%e', 1.234), 42068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%+e', 1.234), 43068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ('%-e', 1.234), 44068f06568be288b8628a4e24118503e4d9b7af1bEric Smith ] 45068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 46875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna with check_warnings(('PyOS_ascii_formatd is deprecated', 47875bdf731c27c1bc0dd46ee4da0b4407d1c45ae7Florent Xicluna DeprecationWarning)): 48068f06568be288b8628a4e24118503e4d9b7af1bEric Smith for format, val in tests: 49068f06568be288b8628a4e24118503e4d9b7af1bEric Smith PyOS_ascii_formatd(byref(buf), sizeof(buf), format, 50068f06568be288b8628a4e24118503e4d9b7af1bEric Smith c_double(val)) 51068f06568be288b8628a4e24118503e4d9b7af1bEric Smith self.assertEqual(buf.value, format % val) 52068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 53068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 54068f06568be288b8628a4e24118503e4d9b7af1bEric Smithdef test_main(): 55068f06568be288b8628a4e24118503e4d9b7af1bEric Smith run_unittest(FormatDeprecationTests, FormatTests) 56068f06568be288b8628a4e24118503e4d9b7af1bEric Smith 57068f06568be288b8628a4e24118503e4d9b7af1bEric Smithif __name__ == '__main__': 58068f06568be288b8628a4e24118503e4d9b7af1bEric Smith test_main() 59