Commit 31f2903e authored by Stefan Behnel's avatar Stefan Behnel

extended test case

parent 26257b35
...@@ -40,6 +40,26 @@ def index_literal_char_cast(int i): ...@@ -40,6 +40,26 @@ def index_literal_char_cast(int i):
return <char>(b"12345"[i]) return <char>(b"12345"[i])
@cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode")
def index_nonliteral_char_cast(int i):
"""
>>> index_nonliteral_char_cast(0) == ord('1')
True
>>> index_nonliteral_char_cast(-5) == ord('1')
True
>>> index_nonliteral_char_cast(2) == ord('3')
True
>>> index_nonliteral_char_cast(4) == ord('5')
True
>>> index_nonliteral_char_cast(6)
Traceback (most recent call last):
IndexError: string index out of range
"""
return <char>(b12345[i])
@cython.test_assert_path_exists("//PythonCapiCallNode") @cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode", @cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode") "//CoerceFromPyTypeNode")
...@@ -60,6 +80,26 @@ def index_literal_uchar_cast(int i): ...@@ -60,6 +80,26 @@ def index_literal_uchar_cast(int i):
return <unsigned char>(b"12345"[i]) return <unsigned char>(b"12345"[i])
@cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode")
def index_nonliteral_uchar_cast(int i):
"""
>>> index_nonliteral_uchar_cast(0) == ord('1')
True
>>> index_nonliteral_uchar_cast(-5) == ord('1')
True
>>> index_nonliteral_uchar_cast(2) == ord('3')
True
>>> index_nonliteral_uchar_cast(4) == ord('5')
True
>>> index_nonliteral_uchar_cast(6)
Traceback (most recent call last):
IndexError: string index out of range
"""
return <unsigned char>(b12345[i])
@cython.test_assert_path_exists("//PythonCapiCallNode") @cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode", @cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode") "//CoerceFromPyTypeNode")
...@@ -81,6 +121,27 @@ def index_literal_char_coerce(int i): ...@@ -81,6 +121,27 @@ def index_literal_char_coerce(int i):
return result return result
@cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode")
def index_nonliteral_char_coerce(int i):
"""
>>> index_nonliteral_char_coerce(0) == ord('1')
True
>>> index_nonliteral_char_coerce(-5) == ord('1')
True
>>> index_nonliteral_char_coerce(2) == ord('3')
True
>>> index_nonliteral_char_coerce(4) == ord('5')
True
>>> index_nonliteral_char_coerce(6)
Traceback (most recent call last):
IndexError: string index out of range
"""
cdef char result = b12345[i]
return result
@cython.test_assert_path_exists("//PythonCapiCallNode") @cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode", @cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode") "//CoerceFromPyTypeNode")
...@@ -98,3 +159,22 @@ def index_literal_char_coerce_no_check(int i): ...@@ -98,3 +159,22 @@ def index_literal_char_coerce_no_check(int i):
""" """
cdef char result = b"12345"[i] cdef char result = b"12345"[i]
return result return result
@cython.test_assert_path_exists("//PythonCapiCallNode")
@cython.test_fail_if_path_exists("//IndexNode",
"//CoerceFromPyTypeNode")
@cython.boundscheck(False)
def index_nonliteral_char_coerce_no_check(int i):
"""
>>> index_nonliteral_char_coerce_no_check(0) == ord('1')
True
>>> index_nonliteral_char_coerce_no_check(-5) == ord('1')
True
>>> index_nonliteral_char_coerce_no_check(2) == ord('3')
True
>>> index_nonliteral_char_coerce_no_check(4) == ord('5')
True
"""
cdef char result = b12345[i]
return result
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment