[pypy-commit] pypy py3k: kill the buffer() builtin; the internal implementation is still used by memoryview. Also, refactor the buffer tests to use memoryview when possible. test_buffer passes with -A

antocuni noreply at buildbot.pypy.org
Wed Mar 21 11:24:27 CET 2012


Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: py3k
Changeset: r53851:6ba48a9e546e
Date: 2012-03-21 10:54 +0100
http://bitbucket.org/pypy/pypy/changeset/6ba48a9e546e/

Log:	kill the buffer() builtin; the internal implementation is still used
	by memoryview. Also, refactor the buffer tests to use memoryview
	when possible. test_buffer passes with -A

diff --git a/pypy/module/__builtin__/__init__.py b/pypy/module/__builtin__/__init__.py
--- a/pypy/module/__builtin__/__init__.py
+++ b/pypy/module/__builtin__/__init__.py
@@ -38,7 +38,6 @@
         '__debug__'     : '(space.w_True)',      # XXX
         'type'          : '(space.w_type)',
         'object'        : '(space.w_object)',
-        'buffer'        : 'interp_memoryview.W_Buffer',
         'memoryview'    : 'interp_memoryview.W_MemoryView',
 
         'open'          : 'state.get(space).w_open',
diff --git a/pypy/module/__builtin__/interp_memoryview.py b/pypy/module/__builtin__/interp_memoryview.py
--- a/pypy/module/__builtin__/interp_memoryview.py
+++ b/pypy/module/__builtin__/interp_memoryview.py
@@ -8,9 +8,6 @@
 from pypy.interpreter.error import OperationError
 import operator
 
-W_Buffer = buffer.Buffer      # actually implemented in pypy.interpreter.buffer
-
-
 class W_MemoryView(Wrappable):
     """Implement the built-in 'memoryview' type as a thin wrapper around
     an interp-level buffer.
diff --git a/pypy/module/__builtin__/test/test_buffer.py b/pypy/module/__builtin__/test/test_buffer.py
--- a/pypy/module/__builtin__/test/test_buffer.py
+++ b/pypy/module/__builtin__/test/test_buffer.py
@@ -3,188 +3,64 @@
 import autopath
 from pypy.conftest import gettestobjspace
 
-class AppTestBuffer:
+class AppTestMemoryView:
+
     spaceconfig = dict(usemodules=['array'])
 
-    def test_unicode_buffer(self):
-        import sys
-        b = buffer(u"ab")
-        if sys.maxunicode == 65535: # UCS2 build
-            assert len(b) == 4
-            if sys.byteorder == "big":
-                assert b[0:4] == b"\x00a\x00b"
-            else:
-                assert b[0:4] == b"a\x00b\x00"
-        else: # UCS4 build
-            assert len(b) == 8
-            if sys.byteorder == "big":
-                assert b[0:8] == b"\x00\x00\x00a\x00\x00\x00b"
-            else:
-                assert b[0:8] == b"a\x00\x00\x00b\x00\x00\x00"
-
-    def test_array_buffer(self):
-        import array
-        b = buffer(array.array("B", [1, 2, 3]))
-        assert len(b) == 3
-        assert b[0:3] == b"\x01\x02\x03"
-
-    def test_nonzero(self):
-        assert buffer('\x00')
-        assert not buffer('')
-        import array
-        assert buffer(array.array("B", [0]))
-        assert not buffer(array.array("B", []))
-
-    def test_str(self):
-        assert str(buffer(b'hello')) == 'hello'
-
-    def test_repr(self):
-        # from 2.5.2 lib tests
-        assert repr(buffer(b'hello')).startswith('<read-only buffer for 0x')
-
-    def test_add(self):
-        assert buffer(b'abc') + b'def' == b'abcdef'
-        import array
-        assert buffer(b'abc') + array.array('b', b'def') == b'abcdef'
-
-    def test_cmp(self):
-        assert buffer(b'ab') != b'ab'
-        assert not (b'ab' == buffer(b'ab'))
-        assert buffer(b'ab') == buffer(b'ab')
-        assert not (buffer(b'ab') != buffer(b'ab'))
-        assert not (buffer(b'ab') <  buffer(b'ab'))
-        assert buffer(b'ab') <= buffer(b'ab')
-        assert not (buffer(b'ab') >  buffer(b'ab'))
-        assert buffer(b'ab') >= buffer(b'ab')
-        assert buffer(b'ab') != buffer(b'abc')
-        assert buffer(b'ab') <  buffer(b'abc')
-        assert buffer(b'ab') <= buffer(b'ab')
-        assert buffer(b'ab') >  buffer(b'aa')
-        assert buffer(b'ab') >= buffer(b'ab')
-
-    def test_hash(self):
-        assert hash(buffer(b'hello')) == hash(b'hello')
-
-    def test_mul(self):
-        assert buffer(b'ab') * 5 == b'ababababab'
-        assert buffer(b'ab') * (-2) == b''
-        assert 5 * buffer(b'ab') == b'ababababab'
-        assert (-2) * buffer(b'ab') == b''
-
-    def test_offset_size(self):
-        b = buffer(b'hello world', 6)
-        assert len(b) == 5
-        assert b[0] == b'w'
-        assert b[:] == b'world'
-        raises(IndexError, 'b[5]')
-        b = buffer(b, 2)
-        assert len(b) == 3
-        assert b[0] == b'r'
-        assert b[:] == b'rld'
-        raises(IndexError, 'b[3]')
-        b = buffer(b'hello world', 1, 8)
-        assert len(b) == 8
-        assert b[0] == b'e'
-        assert b[:] == b'ello wor'
-        raises(IndexError, 'b[8]')
-        b = buffer(b, 2, 3)
-        assert len(b) == 3
-        assert b[2] == b' '
-        assert b[:] == b'lo '
-        raises(IndexError, 'b[3]')
-        b = buffer('hello world', 55)
-        assert len(b) == 0
-        assert b[:] == b''
-        b = buffer(b'hello world', 6, 999)
-        assert len(b) == 5
-        assert b[:] == b'world'
-
-        raises(ValueError, buffer, "abc", -1)
-        raises(ValueError, buffer, "abc", 0, -2)
-
-    def test_rw_offset_size(self):
-        import array
-
-        a = array.array("b", b'hello world')
-        b = buffer(a, 6)
-        assert len(b) == 5
-        assert b[0] == b'w'
-        assert b[:] == b'world'
-        raises(IndexError, 'b[5]')
-        b[0] = b'W'
-        assert str(b) == b'World'
-        assert a.tostring() == b'hello World'
-        b[:] = b'12345'
-        assert a.tostring() == b'hello 12345'
-        raises(IndexError, 'b[5] = "."')
-
-        b = buffer(b, 2)
-        assert len(b) == 3
-        assert b[0] == '3'
-        assert b[:] == '345'
-        raises(IndexError, 'b[3]')
-        b[1] = 'X'
-        assert a.tostring() == 'hello 123X5'
-        raises(IndexError, 'b[3] = "."')
-
-        a = array.array("c", 'hello world')
-        b = buffer(a, 1, 8)
-        assert len(b) == 8
-        assert b[0] == 'e'
-        assert b[:] == 'ello wor'
-        raises(IndexError, 'b[8]')
-        b[0] = 'E'
-        assert str(b) == 'Ello wor'
-        assert a.tostring() == 'hEllo world'
-        b[:] = '12345678'
-        assert a.tostring() == 'h12345678ld'
-        raises(IndexError, 'b[8] = "."')
-
-        b = buffer(b, 2, 3)
-        assert len(b) == 3
-        assert b[2] == '5'
-        assert b[:] == '345'
-        raises(IndexError, 'b[3]')
-        b[1] = 'X'
-        assert a.tostring() == 'h123X5678ld'
-        raises(IndexError, 'b[3] = "."')
-
-        b = buffer(a, 55)
-        assert len(b) == 0
-        assert b[:] == ''
-        b = buffer(a, 6, 999)
-        assert len(b) == 5
-        assert b[:] == '678ld'
-
-        raises(ValueError, buffer, a, -1)
-        raises(ValueError, buffer, a, 0, -2)
-
-    def test_slice(self):
-        # Test extended slicing by comparing with list slicing.
-        s = bytes(c for c in list(range(255, -1, -1)))
-        b = buffer(s)
-        indices = (0, None, 1, 3, 19, 300, -1, -2, -31, -300)
-        for start in indices:
-            for stop in indices:
-                # Skip step 0 (invalid)
-                for step in indices[1:]:
-                    assert b[start:stop:step] == s[start:stop:step]
-
-class AppTestMemoryView:
     def test_basic(self):
         v = memoryview(b"abc")
         assert v.tobytes() == b"abc"
         assert len(v) == 3
-        assert list(v) == ['a', 'b', 'c']
+        assert list(v) == [b'a', b'b', b'c']
         assert v.tolist() == [97, 98, 99]
-        assert v[1] == "b"
-        assert v[-1] == "c"
+        assert v[1] == b"b"
+        assert v[-1] == b"c"
         raises(TypeError, "v[1] = 'x'")
         assert v.readonly is True
         w = v[1:234]
         assert isinstance(w, memoryview)
         assert len(w) == 2
 
+    def test_array_buffer(self):
+        import array
+        b = memoryview(array.array("B", [1, 2, 3]))
+        assert len(b) == 3
+        assert b[0:3] == b"\x01\x02\x03"
+
+    def test_nonzero(self):
+        assert memoryview(b'\x00')
+        assert not memoryview(b'')
+        import array
+        assert memoryview(array.array("B", [0]))
+        assert not memoryview(array.array("B", []))
+
+    def test_bytes(self):
+        assert bytes(memoryview(b'hello')) == b'hello'
+
+    def test_repr(self):
+        assert repr(memoryview(b'hello')).startswith('<memory at 0x')
+
+    def test_compare(self):
+        assert memoryview(b"abc") == bytearray(b"abc")
+        assert memoryview(b"abc") != 3
+        assert memoryview(b'ab') == b'ab'
+        assert b'ab' == memoryview(b'ab')
+        assert not (memoryview(b'ab') != b'ab')
+        assert memoryview(b'ab') == memoryview(b'ab')
+        assert not (memoryview(b'ab') != memoryview(b'ab'))
+        assert memoryview(b'ab') != memoryview(b'abc')
+        raises(TypeError, "memoryview(b'ab') <  memoryview(b'ab')")
+        raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
+        raises(TypeError, "memoryview(b'ab') >  memoryview(b'ab')")
+        raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
+        raises(TypeError, "memoryview(b'ab') <  memoryview(b'abc')")
+        raises(TypeError, "memoryview(b'ab') <= memoryview(b'ab')")
+        raises(TypeError, "memoryview(b'ab') >  memoryview(b'aa')")
+        raises(TypeError, "memoryview(b'ab') >= memoryview(b'ab')")
+
+    def test_hash(self):
+        raises(TypeError, "hash(memoryview(b'hello'))")
+
     def test_rw(self):
         data = bytearray(b'abcefg')
         v = memoryview(data)
@@ -206,11 +82,3 @@
     def test_suboffsets(self):
         v = memoryview(b"a"*100)
         assert v.suboffsets == None
-        v = memoryview(buffer(b"a"*100, 2))
-        assert v.shape == (98,)
-        assert v.suboffsets == None
-
-    def test_compare(self):
-        assert memoryview(b"abc") == b"abc"
-        assert memoryview(b"abc") == bytearray(b"abc")
-        assert memoryview(b"abc") != 3


More information about the pypy-commit mailing list