[pypy-commit] pypy py3.6: test, fix for non-byte n-d setitem

mattip pypy.commits at gmail.com
Tue Jun 25 06:27:50 EDT 2019


Author: Matti Picus <matti.picus at gmail.com>
Branch: py3.6
Changeset: r96851:6c4d7cc5d649
Date: 2019-06-25 13:27 +0300
http://bitbucket.org/pypy/pypy/changeset/6c4d7cc5d649/

Log:	test, fix for non-byte n-d setitem

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
@@ -179,9 +179,8 @@
                     length, ndim)
 
         start = self._start_from_tuple(space, w_index)
-        itemsize = self.getitemsize()
         val = self.view.bytes_from_value(space, w_obj)
-        self.view.setbytes(start * itemsize, val)
+        self.view.setbytes(start, val)
 
     def _decode_index(self, space, w_index, is_slice):
         shape = self.getshape()
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
@@ -289,20 +289,19 @@
         assert m2.shape == m1.shape
 
     def test_2d(self):
-        m = memoryview(bytearray(b'1234123412341234'))
-        assert m[3] == ord('4')
-        m[3] = ord('z')
-        assert m[3] == ord('z')
-        m = m.cast('B', shape=(4, 4))
-        assert m[2, 3] == ord('4')
-        m[2, 3] = ord('a')
-        assert m[2, 3] == ord('a') 
-        raises(TypeError, m.__setitem__, (2, 3), bytearray(b'12'))
+        import struct
+        a = list(range(16))
+        ba = bytearray(struct.pack("%di" % len(a), *a))
+        m = memoryview(ba).cast("i", shape=(4, 4))
+        assert m[2, 3] == 11
+        m[2, 3] = -1
+        assert m[2, 3] == -1
+        raises(TypeError, m.__setitem__, (2, 3), 'a')
         # slices in 2d memoryviews are not supported at all
         raises(TypeError, m.__getitem__, (slice(None), 3))
-        raises(TypeError, m.__setitem__, (slice(None), 3), ord('a'))
+        raises(TypeError, m.__setitem__, (slice(None), 3), 123)
         raises(NotImplementedError, m.__getitem__, (slice(0,1,1), slice(0,1,2)))
-        raises(NotImplementedError, m.__setitem__, (slice(0,1,1), slice(0,1,2)), ord('a'))
+        raises(NotImplementedError, m.__setitem__, (slice(0,1,1), slice(0,1,2)), 123)
 
 class AppTestCtypes(object):
     spaceconfig = dict(usemodules=['sys', '_rawffi'])


More information about the pypy-commit mailing list