mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-22 21:32:31 +00:00
Make numerous improvements
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
This commit is contained in:
parent
fa7b4f5bd1
commit
39bf41f4eb
806 changed files with 77494 additions and 63859 deletions
99
third_party/python/Lib/test/test_fstring.py
vendored
99
third_party/python/Lib/test/test_fstring.py
vendored
|
@ -599,14 +599,13 @@ non-important content
|
|||
self.assertEqual(f'{2}\U00000394{3}', '2\u03943')
|
||||
self.assertEqual(f'\U00000394{3}', '\u03943')
|
||||
|
||||
# # TODO(jart): pycomp.com needs \N thing
|
||||
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}', '\u0394')
|
||||
# self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
|
||||
# self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}{3}', '2\u03943')
|
||||
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}{3}', '\u03943')
|
||||
# self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
|
||||
# self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}3', '2\u03943')
|
||||
# self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}3', '\u03943')
|
||||
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}', '\u0394')
|
||||
self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
|
||||
self.assertEqual(f'{2}\N{GREEK CAPITAL LETTER DELTA}{3}', '2\u03943')
|
||||
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}{3}', '\u03943')
|
||||
self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}', '2\u0394')
|
||||
self.assertEqual(f'2\N{GREEK CAPITAL LETTER DELTA}3', '2\u03943')
|
||||
self.assertEqual(f'\N{GREEK CAPITAL LETTER DELTA}3', '\u03943')
|
||||
|
||||
self.assertEqual(f'\x20', ' ')
|
||||
self.assertEqual(r'\x20', '\\x20')
|
||||
|
@ -625,53 +624,49 @@ non-important content
|
|||
self.assertEqual(f'\\{6*7}', '\\42')
|
||||
self.assertEqual(fr'\{6*7}', '\\42')
|
||||
|
||||
# # TODO(jart): pycomp.com needs \N thing
|
||||
# AMPERSAND = 'spam'
|
||||
# # Get the right unicode character (&), or pick up local variable
|
||||
# # depending on the number of backslashes.
|
||||
# self.assertEqual(f'\N{AMPERSAND}', '&')
|
||||
# self.assertEqual(f'\\N{AMPERSAND}', '\\Nspam')
|
||||
# self.assertEqual(fr'\N{AMPERSAND}', '\\Nspam')
|
||||
# self.assertEqual(f'\\\N{AMPERSAND}', '\\&')
|
||||
AMPERSAND = 'spam'
|
||||
# Get the right unicode character (&), or pick up local variable
|
||||
# depending on the number of backslashes.
|
||||
self.assertEqual(f'\N{AMPERSAND}', '&')
|
||||
self.assertEqual(f'\\N{AMPERSAND}', '\\Nspam')
|
||||
self.assertEqual(fr'\N{AMPERSAND}', '\\Nspam')
|
||||
self.assertEqual(f'\\\N{AMPERSAND}', '\\&')
|
||||
|
||||
# # TODO(jart): pycomp.com needs \N thing
|
||||
# def test_misformed_unicode_character_name(self):
|
||||
# # These test are needed because unicode names are parsed
|
||||
# # differently inside f-strings.
|
||||
# self.assertAllRaise(SyntaxError, r"\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape",
|
||||
# [r"f'\N'",
|
||||
# r"f'\N{'",
|
||||
# r"f'\N{GREEK CAPITAL LETTER DELTA'",
|
||||
# # Here are the non-f-string versions,
|
||||
# # which should give the same errors.
|
||||
# r"'\N'",
|
||||
# r"'\N{'",
|
||||
# r"'\N{GREEK CAPITAL LETTER DELTA'",
|
||||
# ])
|
||||
def test_misformed_unicode_character_name(self):
|
||||
# These test are needed because unicode names are parsed
|
||||
# differently inside f-strings.
|
||||
self.assertAllRaise(SyntaxError, r"\(unicode error\) 'unicodeescape' codec can't decode bytes in position .*: malformed \\N character escape",
|
||||
[r"f'\N'",
|
||||
r"f'\N{'",
|
||||
r"f'\N{GREEK CAPITAL LETTER DELTA'",
|
||||
# Here are the non-f-string versions,
|
||||
# which should give the same errors.
|
||||
r"'\N'",
|
||||
r"'\N{'",
|
||||
r"'\N{GREEK CAPITAL LETTER DELTA'",
|
||||
])
|
||||
|
||||
# # TODO(jart): pycomp.com needs \N thing
|
||||
# def test_no_backslashes_in_expression_part(self):
|
||||
# self.assertAllRaise(SyntaxError, 'f-string expression part cannot include a backslash',
|
||||
# [r"f'{\'a\'}'",
|
||||
# r"f'{\t3}'",
|
||||
# r"f'{\}'",
|
||||
# r"rf'{\'a\'}'",
|
||||
# r"rf'{\t3}'",
|
||||
# r"rf'{\}'",
|
||||
# r"""rf'{"\N{LEFT CURLY BRACKET}"}'""",
|
||||
# r"f'{\n}'",
|
||||
# ])
|
||||
def test_no_backslashes_in_expression_part(self):
|
||||
self.assertAllRaise(SyntaxError, 'f-string expression part cannot include a backslash',
|
||||
[r"f'{\'a\'}'",
|
||||
r"f'{\t3}'",
|
||||
r"f'{\}'",
|
||||
r"rf'{\'a\'}'",
|
||||
r"rf'{\t3}'",
|
||||
r"rf'{\}'",
|
||||
r"""rf'{"\N{LEFT CURLY BRACKET}"}'""",
|
||||
r"f'{\n}'",
|
||||
])
|
||||
|
||||
# # TODO(jart): pycomp.com needs \N thing
|
||||
# def test_no_escapes_for_braces(self):
|
||||
# """
|
||||
# Only literal curly braces begin an expression.
|
||||
# """
|
||||
# # \x7b is '{'.
|
||||
# self.assertEqual(f'\x7b1+1}}', '{1+1}')
|
||||
# self.assertEqual(f'\x7b1+1', '{1+1')
|
||||
# self.assertEqual(f'\u007b1+1', '{1+1')
|
||||
# self.assertEqual(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}')
|
||||
def test_no_escapes_for_braces(self):
|
||||
"""
|
||||
Only literal curly braces begin an expression.
|
||||
"""
|
||||
# \x7b is '{'.
|
||||
self.assertEqual(f'\x7b1+1}}', '{1+1}')
|
||||
self.assertEqual(f'\x7b1+1', '{1+1')
|
||||
self.assertEqual(f'\u007b1+1', '{1+1')
|
||||
self.assertEqual(f'\N{LEFT CURLY BRACKET}1+1\N{RIGHT CURLY BRACKET}', '{1+1}')
|
||||
|
||||
def test_newlines_in_expressions(self):
|
||||
self.assertEqual(f'{0}', '0')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue