Author: Richard Plangger <planri...@gmail.com> Branch: py3.5-ssl Changeset: r88812:429efb9740ad Date: 2016-12-02 11:15 +0100 http://bitbucket.org/pypy/pypy/changeset/429efb9740ad/
Log: extended test to support the correct indexing of a reveresed memoryview (test passes partly) 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 @@ -212,12 +212,11 @@ while dim < length: w_obj = w_tuple.getitem(space, dim) index = space.getindex_w(w_obj, space.w_IndexError) - start = self.lookup_dimension(space, start, dim, index) + start = self.lookup_dimension(space, self.buf, start, dim, index) dim += 1 return start - def lookup_dimension(self, space, start, dim, index): - view = self.buf + def lookup_dimension(self, space, view, start, dim, index): shape = view.getshape() strides = view.getstrides() nitems = shape[dim] @@ -264,9 +263,16 @@ # ^^^ for a non-slice index, this returns (index, 0, 0, 1) if step == 0: # index only itemsize = self.getitemsize() + dim = self.getndim() if itemsize == 1: - ch = self.buf.getitem(start) - return space.newint(ord(ch)) + if dim == 0: + raise oefmt(space.w_TypeError, "invalid indexing of 0-dim memory") + elif dim == 1: + idx = self.lookup_dimension(space, self, 0, 0, start) + ch = self.buf.getitem(idx) + return space.newint(ord(ch)) + else: + raise oefmt(space.w_NotImplementedError, "multi-dimensional sub-views are not implemented") else: # TODO: this probably isn't very fast buf = SubBuffer(self.buf, start*itemsize, itemsize) @@ -292,7 +298,7 @@ shape = self.getshape()[:] itemsize = self.getitemsize() dim = 0 - self.buf = SubBuffer(self.buf, strides[dim] * start, size*step*itemsize) + self.buf = SubBuffer(self.buf, strides[dim] * start, itemsize) shape[dim] = size strides[dim] = strides[dim] * step self.strides = strides 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 @@ -411,8 +411,16 @@ raises(TypeError, "view.cast('h', shape=(3,3))") def test_reversed(self): - bytes = b"\x01\x00\x02\x00\x03\x00" + bytes = b"\x01\x01\x02\x02\x03\x03" view = memoryview(bytes) revlist = list(reversed(view.tolist())) + assert view[::-1][0] == 3 + assert view[::-1][1] == 3 + assert view[::-1][2] == 2 + assert view[::-1][3] == 2 + assert view[::-1][4] == 1 + assert view[::-1][5] == 1 + assert view[::-1][-1] == 1 + assert view[::-1][-2] == 1 assert list(reversed(view)) == revlist assert list(reversed(view)) == view[::-1].tolist() _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit