Author: Manuel Jacob
Branch: py3k-memoryview
Changeset: r71665:6f1e8a720ef2
Date: 2014-05-22 04:17 +0200
http://bitbucket.org/pypy/pypy/changeset/6f1e8a720ef2/
Log: Test and fix memoryview's setslice to support itemsize != 1.
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
@@ -100,13 +100,10 @@
if step not in (0, 1):
raise oefmt(space.w_NotImplementedError, "")
value = space.buffer_w(w_obj, space.BUF_CONTIG_RO)
- if value.getlength() != size:
+ if value.getlength() != size * self.buf.itemsize:
raise oefmt(space.w_ValueError,
"cannot modify size of memoryview object")
- if step == 0: # index only
- self.buf.setitem(start, value.getitem(0))
- elif step == 1:
- self.buf.setslice(start, value.as_str())
+ self.buf.setslice(start * self.buf.itemsize, value.as_str())
def descr_len(self, space):
self._check_released(space)
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
@@ -127,3 +127,12 @@
assert cm is v
raises(ValueError, bytes, v)
assert "released memory" in repr(v)
+
+ def test_int_array_buffer(self):
+ import array
+ m = memoryview(array.array('i', list(range(10))))
+ assert len(m) == 10
+ assert len(m.tobytes()) == 40
+ assert m[0] == b'\x00\x00\x00\x00'
+ m[0] = b'\x00\x00\x00\x01'
+ assert m[0] == b'\x00\x00\x00\x01'
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit