extended test case
authorStefan Behnel <scoder@users.berlios.de>
Mon, 26 Apr 2010 06:38:34 +0000 (08:38 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Mon, 26 Apr 2010 06:38:34 +0000 (08:38 +0200)
tests/run/bytes_indexing.pyx

index eeba85c0d24f060f4f52ccffa69b3d8c84c48bd0..cb4ea3a15a1db8630e1081e1465380773603bd8b 100644 (file)
@@ -40,6 +40,26 @@ def index_literal_char_cast(int 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_fail_if_path_exists("//IndexNode",
                                  "//CoerceFromPyTypeNode")
@@ -60,6 +80,26 @@ def index_literal_uchar_cast(int 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_fail_if_path_exists("//IndexNode",
                                  "//CoerceFromPyTypeNode")
@@ -81,6 +121,27 @@ def index_literal_char_coerce(int i):
     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_fail_if_path_exists("//IndexNode",
                                  "//CoerceFromPyTypeNode")
@@ -98,3 +159,22 @@ def index_literal_char_coerce_no_check(int i):
     """
     cdef char result = b"12345"[i]
     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