1 2cimport cython 3 4cdef bytes b12345 = b'12345' 5 6def index_literal(int i): 7 """ 8 Python 3 returns integer values on indexing, Py2 returns byte 9 string literals... 10 11 >>> index_literal(0) in (ord('1'), '1') 12 True 13 >>> index_literal(-5) in (ord('1'), '1') 14 True 15 >>> index_literal(2) in (ord('3'), '3') 16 True 17 >>> index_literal(4) in (ord('5'), '5') 18 True 19 """ 20 return b"12345"[i] 21 22 23@cython.test_assert_path_exists("//PythonCapiCallNode") 24@cython.test_fail_if_path_exists("//IndexNode", 25 "//CoerceFromPyTypeNode") 26def index_literal_char_cast(int i): 27 """ 28 >>> index_literal_char_cast(0) == ord('1') 29 True 30 >>> index_literal_char_cast(-5) == ord('1') 31 True 32 >>> index_literal_char_cast(2) == ord('3') 33 True 34 >>> index_literal_char_cast(4) == ord('5') 35 True 36 >>> index_literal_char_cast(6) 37 Traceback (most recent call last): 38 IndexError: string index out of range 39 """ 40 return <char>(b"12345"[i]) 41 42 43@cython.test_assert_path_exists("//PythonCapiCallNode") 44@cython.test_fail_if_path_exists("//IndexNode", 45 "//CoerceFromPyTypeNode") 46def index_nonliteral_char_cast(int i): 47 """ 48 >>> index_nonliteral_char_cast(0) == ord('1') 49 True 50 >>> index_nonliteral_char_cast(-5) == ord('1') 51 True 52 >>> index_nonliteral_char_cast(2) == ord('3') 53 True 54 >>> index_nonliteral_char_cast(4) == ord('5') 55 True 56 >>> index_nonliteral_char_cast(6) 57 Traceback (most recent call last): 58 IndexError: string index out of range 59 """ 60 return <char>(b12345[i]) 61 62 63@cython.test_assert_path_exists("//PythonCapiCallNode") 64@cython.test_fail_if_path_exists("//IndexNode", 65 "//CoerceFromPyTypeNode") 66def index_literal_uchar_cast(int i): 67 """ 68 >>> index_literal_uchar_cast(0) == ord('1') 69 True 70 >>> index_literal_uchar_cast(-5) == ord('1') 71 True 72 >>> index_literal_uchar_cast(2) == ord('3') 73 True 74 >>> index_literal_uchar_cast(4) == ord('5') 75 True 76 >>> index_literal_uchar_cast(6) 77 Traceback (most recent call last): 78 IndexError: string index out of range 79 """ 80 return <unsigned char>(b"12345"[i]) 81 82 83@cython.test_assert_path_exists("//PythonCapiCallNode") 84@cython.test_fail_if_path_exists("//IndexNode", 85 "//CoerceFromPyTypeNode") 86def index_nonliteral_uchar_cast(int i): 87 """ 88 >>> index_nonliteral_uchar_cast(0) == ord('1') 89 True 90 >>> index_nonliteral_uchar_cast(-5) == ord('1') 91 True 92 >>> index_nonliteral_uchar_cast(2) == ord('3') 93 True 94 >>> index_nonliteral_uchar_cast(4) == ord('5') 95 True 96 >>> index_nonliteral_uchar_cast(6) 97 Traceback (most recent call last): 98 IndexError: string index out of range 99 """ 100 return <unsigned char>(b12345[i]) 101 102 103@cython.test_assert_path_exists("//PythonCapiCallNode") 104@cython.test_fail_if_path_exists("//IndexNode", 105 "//CoerceFromPyTypeNode") 106def index_literal_char_coerce(int i): 107 """ 108 >>> index_literal_char_coerce(0) == ord('1') 109 True 110 >>> index_literal_char_coerce(-5) == ord('1') 111 True 112 >>> index_literal_char_coerce(2) == ord('3') 113 True 114 >>> index_literal_char_coerce(4) == ord('5') 115 True 116 >>> index_literal_char_coerce(6) 117 Traceback (most recent call last): 118 IndexError: string index out of range 119 """ 120 cdef char result = b"12345"[i] 121 return result 122 123 124@cython.test_assert_path_exists("//PythonCapiCallNode") 125@cython.test_fail_if_path_exists("//IndexNode", 126 "//CoerceFromPyTypeNode") 127def index_nonliteral_char_coerce(int i): 128 """ 129 >>> index_nonliteral_char_coerce(0) == ord('1') 130 True 131 >>> index_nonliteral_char_coerce(-5) == ord('1') 132 True 133 >>> index_nonliteral_char_coerce(2) == ord('3') 134 True 135 >>> index_nonliteral_char_coerce(4) == ord('5') 136 True 137 >>> index_nonliteral_char_coerce(6) 138 Traceback (most recent call last): 139 IndexError: string index out of range 140 """ 141 cdef char result = b12345[i] 142 return result 143 144 145@cython.test_assert_path_exists("//PythonCapiCallNode") 146@cython.test_fail_if_path_exists("//IndexNode", 147 "//CoerceFromPyTypeNode") 148@cython.boundscheck(False) 149def index_literal_char_coerce_no_check(int i): 150 """ 151 >>> index_literal_char_coerce_no_check(0) == ord('1') 152 True 153 >>> index_literal_char_coerce_no_check(-5) == ord('1') 154 True 155 >>> index_literal_char_coerce_no_check(2) == ord('3') 156 True 157 >>> index_literal_char_coerce_no_check(4) == ord('5') 158 True 159 """ 160 cdef char result = b"12345"[i] 161 return result 162 163 164@cython.test_assert_path_exists("//PythonCapiCallNode") 165@cython.test_fail_if_path_exists("//IndexNode", 166 "//CoerceFromPyTypeNode") 167@cython.boundscheck(False) 168def index_nonliteral_char_coerce_no_check(int i): 169 """ 170 >>> index_nonliteral_char_coerce_no_check(0) == ord('1') 171 True 172 >>> index_nonliteral_char_coerce_no_check(-5) == ord('1') 173 True 174 >>> index_nonliteral_char_coerce_no_check(2) == ord('3') 175 True 176 >>> index_nonliteral_char_coerce_no_check(4) == ord('5') 177 True 178 """ 179 cdef char result = b12345[i] 180 return result 181