diff options
Diffstat (limited to 'tests/run/py_unicode_strings.pyx')
-rw-r--r-- | tests/run/py_unicode_strings.pyx | 39 |
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 |