From 32ef3a3517caa79f5d2237dbed8078e7fa79c742 Mon Sep 17 00:00:00 2001 From: Damien George Date: Thu, 4 Dec 2014 15:46:14 +0000 Subject: py: Allow bytes/bytearray/array to be init'd by buffer protocol objects. Behaviour of array initialisation is subtly different for bytes, bytearray and array.array when argument has buffer protocol. This patch gets us CPython conformant (except we allow initialisation of array.array by buffer with length not a multiple of typecode). --- tests/basics/array_construct.py | 18 ++++++++++++++++++ tests/basics/bytearray_construct.py | 14 ++++++++++++++ tests/basics/bytes_construct.py | 14 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 tests/basics/array_construct.py create mode 100644 tests/basics/bytearray_construct.py create mode 100644 tests/basics/bytes_construct.py (limited to 'tests/basics') diff --git a/tests/basics/array_construct.py b/tests/basics/array_construct.py new file mode 100644 index 000000000..e050f3003 --- /dev/null +++ b/tests/basics/array_construct.py @@ -0,0 +1,18 @@ +# test construction of array.array from different objects + +from array import array + +# tuple, list +print(array('b', (1, 2))) +print(array('h', [1, 2])) + +# raw copy from bytes, bytearray +print(array('h', b'12')) +print(array('h', bytearray(2))) +print(array('i', bytearray(4))) + +# convert from other arrays +print(array('H', array('b', [1, 2]))) +print(array('f', array('h', [1, 2]))) +print(array('b', array('I', [1, 2]))) +print(array('d', array('f', [1, 2]))) diff --git a/tests/basics/bytearray_construct.py b/tests/basics/bytearray_construct.py new file mode 100644 index 000000000..0a7097d55 --- /dev/null +++ b/tests/basics/bytearray_construct.py @@ -0,0 +1,14 @@ +# test construction of bytearray from different objects + +from array import array + +# bytes, tuple, list +print(bytearray(b'123')) +print(bytearray((1, 2))) +print(bytearray([1, 2])) + +# arrays +print(bytearray(array('b', [1, 2]))) +print(bytearray(array('h', [1, 2]))) +print(bytearray(array('I', [1, 2]))) +print(bytearray(array('f', [1, 2.3]))) diff --git a/tests/basics/bytes_construct.py b/tests/basics/bytes_construct.py new file mode 100644 index 000000000..1eb6d3e48 --- /dev/null +++ b/tests/basics/bytes_construct.py @@ -0,0 +1,14 @@ +# test construction of bytes from different objects + +from array import array + +# tuple, list, bytearray +print(bytes((1, 2))) +print(bytes([1, 2])) +print(bytes(bytearray(4))) + +# arrays +print(bytes(array('b', [1, 2]))) +print(bytes(array('h', [1, 2]))) +print(bytes(array('I', [1, 2]))) +print(bytes(array('f', [1, 2.3]))) -- cgit v1.2.3