17
'\x03g\xf8\uf8d2S\xf8k ik'
27
# The output of surrogate pairs differs between 16/32bit Unicode runtimes.
32
'S\xf8k ik\xfc\xd6\xe4abc'
35
""".decode("ASCII") + b"""
62
>>> sys.maxunicode >= 65535
64
>>> sys.maxunicode == 65535 and 1 or len(wide_literal) # test for wide build
66
>>> sys.maxunicode > 65535 and 2 or len(wide_literal) # test for narrow build
68
""".decode("ASCII") + u"""
77
>>> e == '\x03\x67\xf8\uf8d2Søk ik' # unescaped by Cython
79
>>> e == '\\x03\\x67\\xf8\\uf8d2Søk ik' # unescaped by Python
81
>>> f == '\xf8' # unescaped by Cython
83
>>> f == '\\xf8' # unescaped by Python
85
>>> g == '\\udc00' # unescaped by Python (required by doctest)
87
>>> h == '\\ud800' # unescaped by Python (required by doctest)
89
>>> p == (u'\\ud800\\udc00' if sys.maxunicode == 1114111 else '\\U00010000') or p # unescaped by Python (required by doctest)
91
>>> q == '\\udc00\\ud800' or q # unescaped by Python (required by doctest)
93
>>> k == '\\N{SNOWMAN}' == '\\u2603' or k
95
>>> m == 'abc\\\\xf8\\\\t\\u00f8\\U000000f8' or m # unescaped by Python (required by doctest)
97
>>> add == 'Søk ik' + 'üÖä' + 'abc' or add
99
>>> null == '\\x00' # unescaped by Python (required by doctest)
101
>>> wide_literal == '\\U00101234' # unescaped by Python
103
>>> ustring_in_constant_tuple == ('a', 'abc', '\\N{SNOWMAN}', 'x' * 3, '\\N{SNOWMAN}' * 4 + 'O') or ustring_in_constant_tuple # unescaped by Python
106
>>> expected = '\U00101234' # unescaped by Cython
107
>>> if wide_literal == expected: print(True)
108
... else: print(repr(wide_literal), repr(expected), sys.maxunicode)
118
e = u'\x03\x67\xf8\uf8d2Søk ik'
120
g = u'\udc00' # lone trail surrogate
121
h = u'\ud800' # lone lead surrogate
123
m = ur'abc\xf8\t\u00f8\U000000f8'
124
p = u'\ud800\udc00' # surrogate pair
125
q = u'\udc00\ud800' # reversed surrogate pair
127
add = u'Søk ik' + u'üÖä' + u'abc'
130
wide_literal = u'\U00101234'
132
ustring_in_constant_tuple = ('a', u'abc', u'\N{SNOWMAN}', u'x' * 3, u'\N{SNOWMAN}' * 4 + u'O')