Blame tests/run/for_in_string.pyx

Packit 562c7a
cimport cython
Packit 562c7a
Packit 562c7a
bytes_abc = b'abc'
Packit 562c7a
bytes_ABC = b'ABC'
Packit 562c7a
bytes_abc_null = b'a\0b\0c'
Packit 562c7a
bytes_ABC_null = b'A\0B\0C'
Packit 562c7a
Packit 562c7a
unicode_abc = u'abc'
Packit 562c7a
unicode_ABC = u'ABC'
Packit 562c7a
unicode_abc_null = u'a\0b\0c'
Packit 562c7a
unicode_ABC_null = u'A\0B\0C'
Packit 562c7a
Packit 562c7a
Packit 562c7a
def for_in_bytes(bytes s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_in_bytes(bytes_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_in_bytes(bytes_ABC)
Packit 562c7a
    'C'
Packit 562c7a
    >>> for_in_bytes(bytes_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_in_bytes(bytes_ABC_null)
Packit 562c7a
    'C'
Packit 562c7a
    """
Packit 562c7a
    for c in s:
Packit 562c7a
        # Py2/Py3
Packit 562c7a
        if c == b'C' or c == c'C':
Packit 562c7a
            return 'C'
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_char_in_bytes(bytes s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_char_in_bytes(bytes_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_bytes(bytes_ABC)
Packit 562c7a
    'C'
Packit 562c7a
    >>> for_char_in_bytes(bytes_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_bytes(bytes_ABC_null)
Packit 562c7a
    'C'
Packit 562c7a
    """
Packit 562c7a
    cdef char c
Packit 562c7a
    for c in s:
Packit 562c7a
        if c == b'C':
Packit 562c7a
            return 'C'
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
#### Py2 and Py3 behave differently here: Py2->bytes, Py3->integer
Packit 562c7a
##
Packit 562c7a
## @cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
## @cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
## def for_obj_in_bytes_slice(bytes s):
Packit 562c7a
##     """
Packit 562c7a
##     >>> for_obj_in_bytes_slice(bytes_abc)
Packit 562c7a
##     'X'
Packit 562c7a
##     >>> for_obj_in_bytes_slice(bytes_ABC)
Packit 562c7a
##     'B'
Packit 562c7a
##     >>> for_obj_in_bytes_slice(bytes_abc_null)
Packit 562c7a
##     'X'
Packit 562c7a
##     >>> for_obj_in_bytes_slice(bytes_ABC_null)
Packit 562c7a
##     'B'
Packit 562c7a
##     """
Packit 562c7a
##     for c in s[1:-1]:
Packit 562c7a
##         if c == b'B':
Packit 562c7a
##             return 'B'
Packit 562c7a
##     else:
Packit 562c7a
##         return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_char_in_bytes_slice(bytes s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_char_in_bytes_slice(bytes_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_bytes_slice(bytes_ABC)
Packit 562c7a
    'B'
Packit 562c7a
    >>> for_char_in_bytes_slice(bytes_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_bytes_slice(bytes_ABC_null)
Packit 562c7a
    'B'
Packit 562c7a
    """
Packit 562c7a
    cdef char c
Packit 562c7a
    for c in s[1:-1]:
Packit 562c7a
        if c == c'B':
Packit 562c7a
            return 'B'
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_char_in_enumerate_bytes(bytes s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_char_in_enumerate_bytes(bytes_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_enumerate_bytes(bytes_ABC)
Packit 562c7a
    2
Packit 562c7a
    >>> for_char_in_enumerate_bytes(bytes_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_char_in_enumerate_bytes(bytes_ABC_null)
Packit 562c7a
    4
Packit 562c7a
    """
Packit 562c7a
    cdef char c
Packit 562c7a
    cdef Py_ssize_t i
Packit 562c7a
    for i, c in enumerate(s):
Packit 562c7a
        if c == b'C':
Packit 562c7a
            return i
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
#### Py2 and Py3 behave differently here: Py2->bytes, Py3->integer
Packit 562c7a
##
Packit 562c7a
## @cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
## @cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
## def for_pyvar_in_char_ptr(char* c_string):
Packit 562c7a
##     """
Packit 562c7a
##     >>> for_pyvar_in_char_ptr( (bytes_abc+bytes_ABC) * 2 )
Packit 562c7a
##     [True, True, True, False, False, False, True, True, True, False]
Packit 562c7a
##     >>> for_pyvar_in_char_ptr( bytes_abc_null * 2 )
Packit 562c7a
##     [True, False, True, False, True, True, False, True, False, True]
Packit 562c7a
##     """
Packit 562c7a
##     in_test = []
Packit 562c7a
##     cdef object c
Packit 562c7a
##     for c in c_string[:10]:
Packit 562c7a
##         in_test.append( c in b'abc' )
Packit 562c7a
##     return in_test
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_char_in_char_ptr(char* c_string):
Packit 562c7a
    """
Packit 562c7a
    >>> for_char_in_char_ptr( (bytes_abc+bytes_ABC) * 2 )
Packit 562c7a
    [True, True, True, False, False, False, True, True, True, False]
Packit 562c7a
    >>> for_char_in_char_ptr( bytes_abc_null * 2 )
Packit 562c7a
    [True, False, True, False, True, True, False, True, False, True]
Packit 562c7a
    """
Packit 562c7a
    in_test = []
Packit 562c7a
    cdef char c
Packit 562c7a
    for c in c_string[:10]:
Packit 562c7a
        in_test.append( c in b'abc' )
Packit 562c7a
    return in_test
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_pyunicode_in_unicode(unicode s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_pyunicode_in_unicode(unicode_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyunicode_in_unicode(unicode_ABC)
Packit 562c7a
    'C'
Packit 562c7a
    >>> for_pyunicode_in_unicode(unicode_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyunicode_in_unicode(unicode_ABC_null)
Packit 562c7a
    'C'
Packit 562c7a
    """
Packit 562c7a
    cdef Py_UNICODE c
Packit 562c7a
    for c in s:
Packit 562c7a
        if c == u'C':
Packit 562c7a
            return 'C'
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_pyunicode_in_enumerate_unicode(unicode s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_pyunicode_in_enumerate_unicode(unicode_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyunicode_in_enumerate_unicode(unicode_ABC)
Packit 562c7a
    2
Packit 562c7a
    >>> for_pyunicode_in_enumerate_unicode(unicode_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyunicode_in_enumerate_unicode(unicode_ABC_null)
Packit 562c7a
    4
Packit 562c7a
    """
Packit 562c7a
    cdef Py_UNICODE c
Packit 562c7a
    cdef Py_ssize_t i
Packit 562c7a
    for i, c in enumerate(s):
Packit 562c7a
        if c == u'C':
Packit 562c7a
            return i
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_pyucs4_in_unicode(unicode s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_pyucs4_in_unicode(unicode_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyucs4_in_unicode(unicode_ABC)
Packit 562c7a
    'C'
Packit 562c7a
    >>> for_pyucs4_in_unicode(unicode_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyucs4_in_unicode(unicode_ABC_null)
Packit 562c7a
    'C'
Packit 562c7a
    """
Packit 562c7a
    cdef Py_UCS4 c
Packit 562c7a
    for c in s:
Packit 562c7a
        if c == u'C':
Packit 562c7a
            return 'C'
Packit 562c7a
    else:
Packit 562c7a
        return 'X'
Packit 562c7a
Packit 562c7a
@cython.test_assert_path_exists("//ForFromStatNode")
Packit 562c7a
@cython.test_fail_if_path_exists("//ForInStatNode")
Packit 562c7a
def for_pyucs4_in_enumerate_unicode(unicode s):
Packit 562c7a
    """
Packit 562c7a
    >>> for_pyucs4_in_enumerate_unicode(unicode_abc)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyucs4_in_enumerate_unicode(unicode_ABC)
Packit 562c7a
    2
Packit 562c7a
    >>> for_pyucs4_in_enumerate_unicode(unicode_abc_null)
Packit 562c7a
    'X'
Packit 562c7a
    >>> for_pyucs4_in_enumerate_unicode(unicode_ABC_null)
Packit 562c7a
    4
Packit 562c7a
    """
Packit 562c7a
    cdef Py_UCS4 c
Packit 562c7a
    cdef Py_ssize_t i
Packit 562c7a
    for i, c in enumerate(s):
Packit 562c7a
        if c == u'C':
Packit 562c7a
            return i
Packit 562c7a
    else:
Packit 562c7a
        return 'X'