summaryrefslogtreecommitdiff
path: root/tests/run/py_unicode_strings.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/py_unicode_strings.pyx')
-rw-r--r--tests/run/py_unicode_strings.pyx39
1 files changed, 20 insertions, 19 deletions
diff --git a/tests/run/py_unicode_strings.pyx b/tests/run/py_unicode_strings.pyx
index 09ccebc3c..ba4df1087 100644
--- a/tests/run/py_unicode_strings.pyx
+++ b/tests/run/py_unicode_strings.pyx
@@ -1,15 +1,15 @@
+# mode: run
# tag: py_unicode_strings
import sys
-cimport cython
-from libc.string cimport memcpy, strcpy
+from libc.string cimport memcpy
-cdef bint Py_UNICODE_equal(const Py_UNICODE* u1, const Py_UNICODE* u2):
- while u1[0] != 0 and u2[0] != 0 and u1[0] == u2[0]:
- u1 += 1
- u2 += 1
- return u1[0] == u2[0]
+cdef assert_Py_UNICODE_equal(const Py_UNICODE* u1, const Py_UNICODE* u2):
+ cdef size_t i = 0
+ while u1[i] != 0 and u2[i] != 0 and u1[i] == u2[i]:
+ i += 1
+ assert u1[i] == u2[i], f"Mismatch at position {i}: {<long>u1[i]} != {<long>u2[i]} ({u1!r} != {u2!r})"
ctypedef Py_UNICODE* LPWSTR
@@ -48,9 +48,10 @@ def test_c_to_python():
assert c_pu_str[1:7] == uobj[1:7]
assert c_wstr[1:7] == uobj[1:7]
- assert c_pu_arr[1] == uobj[1]
- assert c_pu_str[1] == uobj[1]
- assert c_wstr[1] == uobj[1]
+ cdef Py_UNICODE ch = uobj[1] # Py_UCS4 is unsigned, Py_UNICODE is usually signed.
+ assert c_pu_arr[1] == ch
+ assert c_pu_str[1] == ch
+ assert c_wstr[1] == ch
assert len(c_pu_str) == 8
assert len(c_pu_arr) == 8
@@ -81,20 +82,20 @@ def test_python_to_c():
"""
cdef unicode u
- assert Py_UNICODE_equal(c_pu_arr, uobj)
- assert Py_UNICODE_equal(c_pu_str, uobj)
- assert Py_UNICODE_equal(c_pu_str, <LPWSTR>uobj)
+ assert_Py_UNICODE_equal(c_pu_arr, uobj)
+ assert_Py_UNICODE_equal(c_pu_str, uobj)
+ assert_Py_UNICODE_equal(c_pu_str, <LPWSTR>uobj)
u = uobj[1:]
- assert Py_UNICODE_equal(c_pu_str + 1, u)
- assert Py_UNICODE_equal(c_wstr + 1, u)
+ assert_Py_UNICODE_equal(c_pu_str + 1, u)
+ assert_Py_UNICODE_equal(c_wstr + 1, u)
u = uobj[:1]
- assert Py_UNICODE_equal(<Py_UNICODE*>u"u", u)
+ assert_Py_UNICODE_equal(<Py_UNICODE*>u"u", u)
u = uobj[1:7]
- assert Py_UNICODE_equal(<Py_UNICODE*>u"nicode", u)
+ assert_Py_UNICODE_equal(<Py_UNICODE*>u"nicode", u)
u = uobj[1]
- assert Py_UNICODE_equal(<Py_UNICODE*>u"n", u)
+ assert_Py_UNICODE_equal(<Py_UNICODE*>u"n", u)
- assert Py_UNICODE_equal(uwide_literal, <Py_UNICODE*>c_pu_wide_literal)
+ assert_Py_UNICODE_equal(uwide_literal, <Py_UNICODE*>c_pu_wide_literal)
assert len(u"abc\0") == 4
assert len(<Py_UNICODE*>u"abc\0") == 3