Author: Richard Plangger <planri...@gmail.com>
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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to