|
Packit |
562c7a |
# mode: run
|
|
Packit |
562c7a |
# tag: cpp, werror
|
|
Packit |
562c7a |
# cython: c_string_encoding=ascii, c_string_type=str
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cimport cython
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
from libcpp.string cimport string
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
b_asdf = b'asdf'
|
|
Packit |
562c7a |
u_asdf = u'asdf'
|
|
Packit |
562c7a |
s_asdf = 'asdf'
|
|
Packit |
562c7a |
s_s = 's'
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_conversion(py_obj):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_conversion(b_asdf) == s_asdf or test_conversion(b_asdf)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_conversion(u_asdf) == s_asdf or test_conversion(u_asdf)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_conversion(123) # doctest: +ELLIPSIS
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
TypeError: expected ..., int found
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = py_obj
|
|
Packit |
562c7a |
assert <size_t>len(py_obj) == s.length(), '%d != %d' % (len(py_obj), s.length())
|
|
Packit |
562c7a |
return s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_empty(py_obj):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_empty('')
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_empty('abc')
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
>>> test_empty(u_asdf[:0])
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_empty(u_asdf)
|
|
Packit |
562c7a |
False
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string a = py_obj
|
|
Packit |
562c7a |
return a.empty()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_push_back(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_push_back(b_asdf) == s_asdf + s_s
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_push_back(u_asdf) == s_asdf + s_s
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
s.push_back(<char>ord('s'))
|
|
Packit |
562c7a |
return s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_clear(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_clear(u_asdf) == s_s[:0]
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> test_clear(b_asdf) == s_s[:0]
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
s.clear()
|
|
Packit |
562c7a |
return s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_assign(char *a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_assign(b_asdf) == 'ggg'
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = string(a)
|
|
Packit |
562c7a |
s.assign(<char *>"ggg")
|
|
Packit |
562c7a |
return s.c_str()
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_bytes_cast(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> b = test_bytes_cast(b'abc')
|
|
Packit |
562c7a |
>>> isinstance(b, bytes)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> print(b.decode('ascii'))
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
>>> b = test_bytes_cast(b'abc\\xe4\\xfc')
|
|
Packit |
562c7a |
>>> isinstance(b, bytes)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> len(b)
|
|
Packit |
562c7a |
5
|
|
Packit |
562c7a |
>>> print(b[:3].decode('ascii'))
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
>>> print(ord(b[3:4]))
|
|
Packit |
562c7a |
228
|
|
Packit |
562c7a |
>>> print(ord(b[4:5]))
|
|
Packit |
562c7a |
252
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
assert s.length() == <size_t>len(a), "%d != %d" % (s.length(), len(a))
|
|
Packit |
562c7a |
return <bytes>s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_bytearray_cast(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> b = test_bytearray_cast(b'abc')
|
|
Packit |
562c7a |
>>> isinstance(b, bytearray)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> print(b.decode('ascii'))
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
>>> b = test_bytearray_cast(b'abc\\xe4\\xfc')
|
|
Packit |
562c7a |
>>> isinstance(b, bytearray)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> len(b)
|
|
Packit |
562c7a |
5
|
|
Packit |
562c7a |
>>> print(b[:3].decode('ascii'))
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
>>> print(ord(b[3:4]))
|
|
Packit |
562c7a |
228
|
|
Packit |
562c7a |
>>> print(ord(b[4:5]))
|
|
Packit |
562c7a |
252
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
assert s.length() == <size_t>len(a), "%d != %d" % (s.length(), len(a))
|
|
Packit |
562c7a |
return <bytearray>s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_unicode_cast(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> u = test_unicode_cast(b'abc')
|
|
Packit |
562c7a |
>>> type(u) is type(u_asdf) or type(u)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> print(u)
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
assert s.length() == <size_t>len(a), "%d != %d" % (s.length(), len(a))
|
|
Packit |
562c7a |
return <unicode>s
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_str_cast(a):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> s = test_str_cast(b'abc')
|
|
Packit |
562c7a |
>>> type(s) is type(s_asdf) or type(s)
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> print(s)
|
|
Packit |
562c7a |
abc
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
cdef string s = a
|
|
Packit |
562c7a |
assert s.length() == <size_t>len(a), "%d != %d" % (s.length(), len(a))
|
|
Packit |
562c7a |
return <str>s
|