Author: Richard Plangger <[email protected]>
Branch: py3.5-memoryview
Changeset: r86700:520a2f63f5ec
Date: 2016-08-29 16:00 +0200
http://bitbucket.org/pypy/pypy/changeset/520a2f63f5ec/
Log: comment, test simplifiactions, added missing tests not included by
merge
diff --git a/pypy/objspace/std/memoryobject.py
b/pypy/objspace/std/memoryobject.py
--- a/pypy/objspace/std/memoryobject.py
+++ b/pypy/objspace/std/memoryobject.py
@@ -32,6 +32,7 @@
assert isinstance(buf, Buffer)
self.buf = buf
self._hash = -1
+ # private copies of format, shape, itemsize, ... on this class
self.format = format
self.itemsize = itemsize
self.shape = shape
@@ -495,7 +496,7 @@
if not newfmt:
raise oefmt(space.w_RuntimeError,
"memoryview: internal error")
- self.setformat(newfmt)
+ self.format = newfmt
self.itemsize = itemsize
self.ndim = 1
self.shape = [buf.getlength() // buf.getitemsize()]
diff --git a/pypy/objspace/std/test/test_memoryobject.py
b/pypy/objspace/std/test/test_memoryobject.py
--- a/pypy/objspace/std/test/test_memoryobject.py
+++ b/pypy/objspace/std/test/test_memoryobject.py
@@ -179,6 +179,54 @@
def test_hex(self):
assert memoryview(b"abc").hex() == u'616263'
+ def test_memoryview_cast(self):
+ m1 = memoryview(b'abcdefgh')
+ m2 = m1.cast('I')
+ m3 = m1.cast('h')
+ assert list(m1) == [97, 98, 99, 100, 101, 102, 103, 104]
+ assert list(m2) == [1684234849, 1751606885]
+ assert list(m3) == [25185, 25699, 26213, 26727]
+ assert m1[1] == 98
+ assert m2[1] == 1751606885
+ assert m3[1] == 25699
+ assert list(m3[1:3]) == [25699, 26213]
+ assert m3[1:3].tobytes() == b'cdef'
+ assert len(m2) == 2
+ assert len(m3) == 4
+ assert (m2[-2], m2[-1]) == (1684234849, 1751606885)
+ raises(IndexError, "m2[2]")
+ raises(IndexError, "m2[-3]")
+ assert list(m3[-99:3]) == [25185, 25699, 26213]
+ assert list(m3[1:99]) == [25699, 26213, 26727]
+ raises(IndexError, "m1[8]")
+ raises(IndexError, "m1[-9]")
+ assert m1[-8] == 97
+
+ def test_memoryview_cast_extended_slicing(self):
+ m1 = memoryview(b'abcdefgh')
+ m3 = m1.cast('h')
+ assert m3[1::2].tobytes() == b'cdgh'
+ assert m3[::2].tobytes() == b'abef'
+ assert m3[:2:2].tobytes() == b'ab'
+
+ def test_memoryview_cast_setitem(self):
+ data = bytearray(b'abcdefgh')
+ m1 = memoryview(data)
+ m2 = m1.cast('I')
+ m3 = m1.cast('h')
+ m1[2] = ord(b'C')
+ assert m2[0] == 1682137697
+ m3[1] = -9999
+ assert data == bytearray(bytes([97, 98, 241, 216, 101, 102, 103, 104]))
+ m3[1:3] = memoryview(b"pqrs").cast('h')
+ assert data == bytearray(b'abpqrsgh')
+
+ def test_memoryview_cast_setitem_extended_slicing(self):
+ data = bytearray(b'abcdefghij')
+ m3 = memoryview(data).cast('h')
+ m3[1:5:2] = memoryview(b"xyXY").cast('h')
+ assert data == bytearray(b'abxyefXYij')
+
class MockBuffer(Buffer):
def __init__(self, space, w_arr, w_dim, w_fmt, \
w_itemsize, w_strides, w_shape):
@@ -277,15 +325,8 @@
assert view[-1,-1] == 11
assert view[-3,-4] == 0
- try:
- view.__getitem__((2**63-1,0))
- assert False, "must not succeed"
- except IndexError: pass
-
- try:
- view.__getitem__((0, 0, 0))
- assert False, "must not succeed"
- except TypeError: pass
+ raises(IndexError, "view.__getitem__((2**63-1,0))")
+ raises(TypeError, "view.__getitem__((0, 0, 0))")
def test_tuple_indexing_int(self):
content = self.MockArray([ [[1],[2],[3]], [[4],[5],[6]] ],
@@ -298,6 +339,7 @@
def test_cast_non_byte(self):
empty = self.MockArray([], dim=1, fmt='i', size=4, strides=[1],
shape=[1])
view = memoryview(empty)
+ raises(TypeError, "view.cast('l')")
try:
view.cast('l')
assert False, "i -> l not possible. buffer must be byte format"
@@ -313,14 +355,10 @@
assert view.format == 'b'
assert cview.format == 'i'
#
- #assert cview.cast('i').cast('b').cast('i').tolist() == []
+ assert cview.cast('i').cast('b').cast('i').tolist() == []
#
assert cview.format == 'i'
- try:
- cview.cast('i')
- assert False, "cast must fail"
- except TypeError:
- pass
+ raises(TypeError, "cview.cast('i')")
def test_cast_with_shape(self):
empty = self.MockArray([1,0,2,0,3,0],
@@ -342,9 +380,4 @@
view = memoryview(bytes)
v = view.cast('h', shape=(3,2))
assert v.tolist() == [[2,3],[4,5],[6,7]]
- try:
- v = view.cast('h', shape=(3,3))
- assert False, "shape is too big for bytes"
- except TypeError:
- pass
-
+ raises(TypeError, "view.cast('h', shape=(3,3))")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit