From bd7c4a31743d91fcf9aad0c9c2237f7145cded51 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Mon, 9 Aug 2021 15:01:58 +0800 Subject: [PATCH 1/8] [mypyc] Add bytes index primitives --- mypyc/lib-rt/CPy.h | 3 ++ mypyc/lib-rt/bytes_ops.c | 65 ++++++++++++++++++++++++++++++ mypyc/primitives/bytes_ops.py | 37 ++++++++++++++--- mypyc/test-data/fixtures/ir.py | 2 + mypyc/test-data/irbuild-bytes.test | 15 ++++--- mypyc/test-data/run-bytes.test | 41 +++++++++++++++++-- 6 files changed, 149 insertions(+), 14 deletions(-) diff --git a/mypyc/lib-rt/CPy.h b/mypyc/lib-rt/CPy.h index 739e46057d5fc..efce688c096da 100644 --- a/mypyc/lib-rt/CPy.h +++ b/mypyc/lib-rt/CPy.h @@ -400,6 +400,9 @@ Py_ssize_t CPyStr_Size_size_t(PyObject *str); // Bytes operations +CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index); +CPyTagged CPyBytes_GetItemShort(PyObject *o, CPyTagged index); +bool CPyByteArray_SetItem(PyObject *o, CPyTagged index, CPyTagged num); PyObject *CPyBytes_Concat(PyObject *a, PyObject *b); PyObject *CPyBytes_Join(PyObject *sep, PyObject *iter); diff --git a/mypyc/lib-rt/bytes_ops.c b/mypyc/lib-rt/bytes_ops.c index 9147dcbe0ec11..18c96b317bf22 100644 --- a/mypyc/lib-rt/bytes_ops.c +++ b/mypyc/lib-rt/bytes_ops.c @@ -5,6 +5,71 @@ #include #include "CPy.h" +CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index) { + if (CPyTagged_CheckShort(index)) { + Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); + Py_ssize_t size = ((PyVarObject *)o)->ob_size; + if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { + PyErr_SetString(PyExc_IndexError, "index out of range"); + return CPY_INT_TAG; + } + if (n < 0) + n += size; + int num = PyBytes_Check(o) ? ((PyBytesObject *)o)->ob_sval[n] + : ((PyByteArrayObject *)o)->ob_bytes[n]; + if (num < 0) + num += 256; + return num << 1; + } else { + PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); + return CPY_INT_TAG; + } +} + +CPyTagged CPyBytes_GetItemShort(PyObject *o, CPyTagged index) { + Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); + Py_ssize_t size = ((PyVarObject *)o)->ob_size; + if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { + PyErr_SetString(PyExc_IndexError, "index out of range"); + return CPY_INT_TAG; + } + if (n < 0) + n += size; + int num = PyBytes_Check(o) ? ((PyBytesObject *)o)->ob_sval[n] + : ((PyByteArrayObject *)o)->ob_bytes[n]; + if (num < 0) + num += 256; + return num << 1; +} + +bool CPyByteArray_SetItem(PyObject *o, CPyTagged index, CPyTagged num) { + if (PyByteArray_Check(o)) { + if (CPyTagged_CheckShort(index) && CPyTagged_CheckShort(num)) { + Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); + Py_ssize_t size = ((PyVarObject *)o)->ob_size; + if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { + PyErr_SetString(PyExc_IndexError, "index out of range"); + return false; + } + if (n < 0) + n += size; + Py_ssize_t num = CPyTagged_ShortAsSsize_t(index); + if (num < 0 || n > 255) { + PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); + return false; + } + ((PyByteArrayObject *)o)->ob_bytes[n] = num; + return true; + } else { + PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); + return false; + } + } else { + PyErr_SetString(PyExc_TypeError, "'bytes' object does not support item assignment"); + return false; + } +} + PyObject *CPyBytes_Concat(PyObject *a, PyObject *b) { if (PyBytes_Check(a) && PyBytes_Check(b)) { Py_ssize_t a_len = ((PyVarObject *)a)->ob_size; diff --git a/mypyc/primitives/bytes_ops.py b/mypyc/primitives/bytes_ops.py index a95a7da3fa190..03937c5acd92a 100644 --- a/mypyc/primitives/bytes_ops.py +++ b/mypyc/primitives/bytes_ops.py @@ -1,12 +1,12 @@ """Primitive bytes ops.""" -from mypyc.ir.ops import ERR_MAGIC +from mypyc.ir.ops import ERR_MAGIC, ERR_FALSE from mypyc.ir.rtypes import ( object_rprimitive, bytes_rprimitive, list_rprimitive, dict_rprimitive, - str_rprimitive, RUnion + str_rprimitive, RUnion, int_rprimitive, bit_rprimitive, short_int_rprimitive ) from mypyc.primitives.registry import ( - load_address_op, function_op, method_op, binary_op + load_address_op, function_op, method_op, binary_op, ERR_NEG_INT ) # Get the 'bytes' type object. @@ -41,11 +41,38 @@ error_kind=ERR_MAGIC, steals=[True, False]) +# bytes[index] +# bytearray[index] +method_op( + name='__getitem__', + arg_types=[bytes_rprimitive, int_rprimitive], + return_type=int_rprimitive, + c_function_name='CPyBytes_GetItem', + error_kind=ERR_MAGIC) + +# bytes[index] +# bytearray[index] +method_op( + name='__getitem__', + arg_types=[bytes_rprimitive, short_int_rprimitive], + return_type=int_rprimitive, + c_function_name='CPyBytes_GetItemShort', + error_kind=ERR_MAGIC, + priority=2) + +# bytearray[index] = int +method_op( + name='__setitem__', + arg_types=[bytes_rprimitive, int_rprimitive, int_rprimitive], + return_type=bit_rprimitive, + c_function_name='CPyByteArray_SetItem', + error_kind=ERR_FALSE, + priority=2) + # bytes.join(obj) method_op( name='join', arg_types=[bytes_rprimitive, object_rprimitive], return_type=bytes_rprimitive, c_function_name='CPyBytes_Join', - error_kind=ERR_MAGIC -) + error_kind=ERR_MAGIC) diff --git a/mypyc/test-data/fixtures/ir.py b/mypyc/test-data/fixtures/ir.py index f64db578c868b..7fe7d42173977 100644 --- a/mypyc/test-data/fixtures/ir.py +++ b/mypyc/test-data/fixtures/ir.py @@ -116,6 +116,8 @@ def __init__(self, x: object) -> None: pass @overload def __init__(self, string: str, encoding: str, err: str = ...) -> None: pass def __add__(self, s: bytes) -> bytearray: ... + def __setitem__(self, i: int, o: int) -> None: ... + def __getitem__(self, i: int) -> int: ... class bool(int): def __init__(self, o: object = ...) -> None: ... diff --git a/mypyc/test-data/irbuild-bytes.test b/mypyc/test-data/irbuild-bytes.test index d86dc3227b4a3..c71c5910ddc77 100644 --- a/mypyc/test-data/irbuild-bytes.test +++ b/mypyc/test-data/irbuild-bytes.test @@ -62,14 +62,17 @@ L0: c = r6 return 1 -[case testBytesConcat] -def f1(a: bytes, b: bytes) -> bytes: - return a + b +[case testBytesIndex] +def f(a: bytes, i: int) -> int: + return a[i] [out] -def f1(a, b): - a, b, r0 :: bytes +def f(a, i): + a :: bytes + i, r0 :: int + r1 :: bit L0: - r0 = CPyBytes_Concat(a, b) + r0 = CPyBytes_GetItem(a, i) + r1 = r0 >= 0 :: signed return r0 [case testBytesJoin] diff --git a/mypyc/test-data/run-bytes.test b/mypyc/test-data/run-bytes.test index 01fd6c45c3f9d..20daee1b195b8 100644 --- a/mypyc/test-data/run-bytes.test +++ b/mypyc/test-data/run-bytes.test @@ -43,6 +43,8 @@ def test_bytes_init() -> None: pass [case testBytesOps] +from testutil import assertRaises + def test_indexing() -> None: # Use bytes() to avoid constant folding b = b'asdf' + bytes() @@ -50,9 +52,15 @@ def test_indexing() -> None: assert b[1] == 115 assert b[3] == 102 assert b[-1] == 102 - b = b'\xfe\x15' + bytes() - assert b[0] == 254 - assert b[1] == 21 + b = b'\xae\x80\xfe\x15' + bytes() + assert b[0] == 174 + assert b[1] == 128 + assert b[2] == 254 + assert b[3] == 21 + with assertRaises(IndexError, "index out of range"): + b[4] + with assertRaises(IndexError, "index out of range"): + b[-5] def test_concat() -> None: b1 = b'123' + bytes() @@ -100,6 +108,7 @@ def test_len() -> None: [case testBytearrayBasics] from typing import Any +from testutil import assertRaises def test_basics() -> None: brr1: bytes = bytearray(3) @@ -126,6 +135,32 @@ def test_bytearray_passed_into_bytes() -> None: brr1: Any = bytearray() assert f(brr1) +def get_item(b: bytes, i: int) -> int: + return b[i] + +def test_bytearray_indexing() -> None: + b = bytearray(b'\xae\x80\xfe\x15') + assert b[0] == 174 + assert b[1] == 128 + assert get_item(b, 2) == 254 + assert get_item(b, 3) == 21 + with assertRaises(IndexError, "index out of range"): + get_item(b, 4) + with assertRaises(IndexError, "index out of range"): + get_item(b, -5) + b[0] = 175 + b[1] = 255 + b[2] = 128 + b[-1] = 22 + assert b[0] == 175 + assert b[1] == 255 + assert b[-1] == 22 + assert b[2] == 128 + with assertRaises(ValueError, "byte must be in range(0, 256)"): + b[0] = -1 + with assertRaises(ValueError, "byte must be in range(0, 256)"): + b[0] = 256 + [case testBytesJoin] from typing import Any from testutil import assertRaises From 87218ad29cc2a48ef1b89749bc2be63713ea7c69 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Mon, 9 Aug 2021 16:04:15 +0800 Subject: [PATCH 2/8] Use CPyTagged --- mypyc/primitives/bytes_ops.py | 2 +- mypyc/test-data/irbuild-bytes.test | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/mypyc/primitives/bytes_ops.py b/mypyc/primitives/bytes_ops.py index 03937c5acd92a..57bb5dd0f264b 100644 --- a/mypyc/primitives/bytes_ops.py +++ b/mypyc/primitives/bytes_ops.py @@ -6,7 +6,7 @@ str_rprimitive, RUnion, int_rprimitive, bit_rprimitive, short_int_rprimitive ) from mypyc.primitives.registry import ( - load_address_op, function_op, method_op, binary_op, ERR_NEG_INT + load_address_op, function_op, method_op, binary_op ) # Get the 'bytes' type object. diff --git a/mypyc/test-data/irbuild-bytes.test b/mypyc/test-data/irbuild-bytes.test index c71c5910ddc77..9eb8552ee05b1 100644 --- a/mypyc/test-data/irbuild-bytes.test +++ b/mypyc/test-data/irbuild-bytes.test @@ -69,10 +69,8 @@ def f(a: bytes, i: int) -> int: def f(a, i): a :: bytes i, r0 :: int - r1 :: bit L0: r0 = CPyBytes_GetItem(a, i) - r1 = r0 >= 0 :: signed return r0 [case testBytesJoin] From 7e16789a265cb85997d6ccfb4d669101a4c65b8f Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Mon, 9 Aug 2021 18:56:46 +0800 Subject: [PATCH 3/8] Discard setitem --- mypyc/lib-rt/CPy.h | 2 -- mypyc/lib-rt/bytes_ops.c | 46 +--------------------------------------- 2 files changed, 1 insertion(+), 47 deletions(-) diff --git a/mypyc/lib-rt/CPy.h b/mypyc/lib-rt/CPy.h index efce688c096da..fdbf5e1e59edc 100644 --- a/mypyc/lib-rt/CPy.h +++ b/mypyc/lib-rt/CPy.h @@ -401,8 +401,6 @@ Py_ssize_t CPyStr_Size_size_t(PyObject *str); CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index); -CPyTagged CPyBytes_GetItemShort(PyObject *o, CPyTagged index); -bool CPyByteArray_SetItem(PyObject *o, CPyTagged index, CPyTagged num); PyObject *CPyBytes_Concat(PyObject *a, PyObject *b); PyObject *CPyBytes_Join(PyObject *sep, PyObject *iter); diff --git a/mypyc/lib-rt/bytes_ops.c b/mypyc/lib-rt/bytes_ops.c index 18c96b317bf22..99ce941a6572c 100644 --- a/mypyc/lib-rt/bytes_ops.c +++ b/mypyc/lib-rt/bytes_ops.c @@ -22,51 +22,7 @@ CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index) { return num << 1; } else { PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); - return CPY_INT_TAG; - } -} - -CPyTagged CPyBytes_GetItemShort(PyObject *o, CPyTagged index) { - Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); - Py_ssize_t size = ((PyVarObject *)o)->ob_size; - if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { - PyErr_SetString(PyExc_IndexError, "index out of range"); - return CPY_INT_TAG; - } - if (n < 0) - n += size; - int num = PyBytes_Check(o) ? ((PyBytesObject *)o)->ob_sval[n] - : ((PyByteArrayObject *)o)->ob_bytes[n]; - if (num < 0) - num += 256; - return num << 1; -} - -bool CPyByteArray_SetItem(PyObject *o, CPyTagged index, CPyTagged num) { - if (PyByteArray_Check(o)) { - if (CPyTagged_CheckShort(index) && CPyTagged_CheckShort(num)) { - Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); - Py_ssize_t size = ((PyVarObject *)o)->ob_size; - if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { - PyErr_SetString(PyExc_IndexError, "index out of range"); - return false; - } - if (n < 0) - n += size; - Py_ssize_t num = CPyTagged_ShortAsSsize_t(index); - if (num < 0 || n > 255) { - PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); - return false; - } - ((PyByteArrayObject *)o)->ob_bytes[n] = num; - return true; - } else { - PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); - return false; - } - } else { - PyErr_SetString(PyExc_TypeError, "'bytes' object does not support item assignment"); - return false; + return -1; } } From e75bba92ad57920734fead952b2c7eb2cf5e9550 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Mon, 9 Aug 2021 18:59:05 +0800 Subject: [PATCH 4/8] Add --- mypyc/lib-rt/bytes_ops.c | 2 +- mypyc/primitives/bytes_ops.py | 23 ++--------------------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/mypyc/lib-rt/bytes_ops.c b/mypyc/lib-rt/bytes_ops.c index 99ce941a6572c..0ef4becaf96c8 100644 --- a/mypyc/lib-rt/bytes_ops.c +++ b/mypyc/lib-rt/bytes_ops.c @@ -22,7 +22,7 @@ CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index) { return num << 1; } else { PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); - return -1; + return CPY_INT_TAG; } } diff --git a/mypyc/primitives/bytes_ops.py b/mypyc/primitives/bytes_ops.py index 57bb5dd0f264b..3fa0300cad255 100644 --- a/mypyc/primitives/bytes_ops.py +++ b/mypyc/primitives/bytes_ops.py @@ -1,9 +1,9 @@ """Primitive bytes ops.""" -from mypyc.ir.ops import ERR_MAGIC, ERR_FALSE +from mypyc.ir.ops import ERR_MAGIC from mypyc.ir.rtypes import ( object_rprimitive, bytes_rprimitive, list_rprimitive, dict_rprimitive, - str_rprimitive, RUnion, int_rprimitive, bit_rprimitive, short_int_rprimitive + str_rprimitive, RUnion, int_rprimitive ) from mypyc.primitives.registry import ( load_address_op, function_op, method_op, binary_op @@ -50,25 +50,6 @@ c_function_name='CPyBytes_GetItem', error_kind=ERR_MAGIC) -# bytes[index] -# bytearray[index] -method_op( - name='__getitem__', - arg_types=[bytes_rprimitive, short_int_rprimitive], - return_type=int_rprimitive, - c_function_name='CPyBytes_GetItemShort', - error_kind=ERR_MAGIC, - priority=2) - -# bytearray[index] = int -method_op( - name='__setitem__', - arg_types=[bytes_rprimitive, int_rprimitive, int_rprimitive], - return_type=bit_rprimitive, - c_function_name='CPyByteArray_SetItem', - error_kind=ERR_FALSE, - priority=2) - # bytes.join(obj) method_op( name='join', From e42f34e52b1e96022e55acda6dccd90146315012 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Mon, 9 Aug 2021 20:13:32 +0800 Subject: [PATCH 5/8] Revert --- mypyc/test-data/irbuild-bytes.test | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mypyc/test-data/irbuild-bytes.test b/mypyc/test-data/irbuild-bytes.test index 9eb8552ee05b1..630e1b2441d12 100644 --- a/mypyc/test-data/irbuild-bytes.test +++ b/mypyc/test-data/irbuild-bytes.test @@ -73,6 +73,16 @@ L0: r0 = CPyBytes_GetItem(a, i) return r0 +[case testBytesConcat] +def f(a: bytes, b: bytes) -> bytes: + return a + b +[out] +def f(a, b): + a, b, r0 :: bytes +L0: + r0 = CPyBytes_Concat(a, b) + return r0 + [case testBytesJoin] from typing import List def f(b: List[bytes]) -> bytes: From 8b31a6aca33491ef0a6626e30f3cd211d2973547 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Tue, 10 Aug 2021 17:50:44 +0800 Subject: [PATCH 6/8] Fix tests --- mypyc/lib-rt/bytes_ops.c | 12 +++++------- mypyc/test-data/run-bytes.test | 34 ++++++++++++++++------------------ 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/mypyc/lib-rt/bytes_ops.c b/mypyc/lib-rt/bytes_ops.c index 0ef4becaf96c8..abfd68c3bd850 100644 --- a/mypyc/lib-rt/bytes_ops.c +++ b/mypyc/lib-rt/bytes_ops.c @@ -9,16 +9,14 @@ CPyTagged CPyBytes_GetItem(PyObject *o, CPyTagged index) { if (CPyTagged_CheckShort(index)) { Py_ssize_t n = CPyTagged_ShortAsSsize_t(index); Py_ssize_t size = ((PyVarObject *)o)->ob_size; - if ((n >= 0 && n >= size) || (n < 0 && n + size < 0)) { + if (n < 0) + n += size; + if (n < 0 || n >= size) { PyErr_SetString(PyExc_IndexError, "index out of range"); return CPY_INT_TAG; } - if (n < 0) - n += size; - int num = PyBytes_Check(o) ? ((PyBytesObject *)o)->ob_sval[n] - : ((PyByteArrayObject *)o)->ob_bytes[n]; - if (num < 0) - num += 256; + unsigned char num = PyBytes_Check(o) ? ((PyBytesObject *)o)->ob_sval[n] + : ((PyByteArrayObject *)o)->ob_bytes[n]; return num << 1; } else { PyErr_SetString(PyExc_OverflowError, CPYTHON_LARGE_INT_ERRMSG); diff --git a/mypyc/test-data/run-bytes.test b/mypyc/test-data/run-bytes.test index 20daee1b195b8..ecc692b02cf64 100644 --- a/mypyc/test-data/run-bytes.test +++ b/mypyc/test-data/run-bytes.test @@ -57,10 +57,13 @@ def test_indexing() -> None: assert b[1] == 128 assert b[2] == 254 assert b[3] == 21 + assert b[-4] == 174 with assertRaises(IndexError, "index out of range"): b[4] with assertRaises(IndexError, "index out of range"): b[-5] + with assertRaises(IndexError, "index out of range"): + b[2**56] def test_concat() -> None: b1 = b'123' + bytes() @@ -135,31 +138,26 @@ def test_bytearray_passed_into_bytes() -> None: brr1: Any = bytearray() assert f(brr1) -def get_item(b: bytes, i: int) -> int: - return b[i] - def test_bytearray_indexing() -> None: - b = bytearray(b'\xae\x80\xfe\x15') + b: bytes = bytearray(b'\xae\x80\xfe\x15') assert b[0] == 174 assert b[1] == 128 - assert get_item(b, 2) == 254 - assert get_item(b, 3) == 21 + assert b[2] == 254 + assert b[3] == 21 + assert b[-4] == 174 with assertRaises(IndexError, "index out of range"): - get_item(b, 4) + b[4] with assertRaises(IndexError, "index out of range"): - get_item(b, -5) - b[0] = 175 - b[1] = 255 - b[2] = 128 - b[-1] = 22 - assert b[0] == 175 - assert b[1] == 255 - assert b[-1] == 22 - assert b[2] == 128 + b[-5] + b2 = bytearray([175, 255, 128, 22]) + assert b2[0] == 175 + assert b2[1] == 255 + assert b2[-1] == 22 + assert b2[2] == 128 with assertRaises(ValueError, "byte must be in range(0, 256)"): - b[0] = -1 + b2[0] = -1 with assertRaises(ValueError, "byte must be in range(0, 256)"): - b[0] = 256 + b2[0] = 256 [case testBytesJoin] from typing import Any From cda86c8b919d885474c179dea94be1144673ee64 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Tue, 10 Aug 2021 22:38:44 +0800 Subject: [PATCH 7/8] Test --- mypyc/test-data/run-bytes.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mypyc/test-data/run-bytes.test b/mypyc/test-data/run-bytes.test index ecc692b02cf64..38b28ff9801c9 100644 --- a/mypyc/test-data/run-bytes.test +++ b/mypyc/test-data/run-bytes.test @@ -62,8 +62,8 @@ def test_indexing() -> None: b[4] with assertRaises(IndexError, "index out of range"): b[-5] - with assertRaises(IndexError, "index out of range"): - b[2**56] + b[2**26] + b[2**56] def test_concat() -> None: b1 = b'123' + bytes() From 4637e1e3bd2e41fa70a2eb3a40f18d21013837b8 Mon Sep 17 00:00:00 2001 From: Jingchen Ye <97littleleaf11@gmail.com> Date: Wed, 11 Aug 2021 02:36:55 +0800 Subject: [PATCH 8/8] Fix --- mypyc/test-data/run-bytes.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mypyc/test-data/run-bytes.test b/mypyc/test-data/run-bytes.test index 38b28ff9801c9..46402fe8fe253 100644 --- a/mypyc/test-data/run-bytes.test +++ b/mypyc/test-data/run-bytes.test @@ -62,8 +62,8 @@ def test_indexing() -> None: b[4] with assertRaises(IndexError, "index out of range"): b[-5] - b[2**26] - b[2**56] + with assertRaises(IndexError, "index out of range"): + b[2**26] def test_concat() -> None: b1 = b'123' + bytes()