Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: py3k
Changeset: r48222:1c7672de6deb
Date: 2011-10-19 00:57 +0200
http://bitbucket.org/pypy/pypy/changeset/1c7672de6deb/

Log:    Various fixes for the array module

diff --git a/pypy/module/_rawffi/interp_rawffi.py 
b/pypy/module/_rawffi/interp_rawffi.py
--- a/pypy/module/_rawffi/interp_rawffi.py
+++ b/pypy/module/_rawffi/interp_rawffi.py
@@ -487,7 +487,7 @@
         s = rffi.charp2str(charp_addr)
     else:
         s = rffi.charp2strn(charp_addr, maxlength)
-    return space.wrap(s)
+    return space.wrapbytes(s)
 
 @unwrap_spec(address=r_uint, maxlength=int)
 def wcharp2unicode(space, address, maxlength=-1):
@@ -505,7 +505,7 @@
     if maxlength == -1:
         return charp2string(space, address)
     s = rffi.charpsize2str(rffi.cast(rffi.CCHARP, address), maxlength)
-    return space.wrap(s)
+    return space.wrapbytes(s)
 
 @unwrap_spec(address=r_uint, maxlength=int)
 def wcharp2rawunicode(space, address, maxlength=-1):
diff --git a/pypy/module/array/interp_array.py 
b/pypy/module/array/interp_array.py
--- a/pypy/module/array/interp_array.py
+++ b/pypy/module/array/interp_array.py
@@ -36,15 +36,15 @@
 
             if len(__args__.arguments_w) > 0:
                 w_initializer = __args__.arguments_w[0]
-                if space.type(w_initializer) is space.w_str:
-                    a.fromstring(space.str_w(w_initializer))
+                if space.type(w_initializer) is space.w_bytes:
+                    a.fromstring(space.bytes_w(w_initializer))
                 elif space.type(w_initializer) is space.w_list:
                     a.fromlist(w_initializer)
                 else:
                     a.extend(w_initializer, True)
             break
     else:
-        msg = 'bad typecode (must be c, b, B, u, h, H, i, I, l, L, f or d)'
+        msg = 'bad typecode (must be b, B, u, h, H, i, I, l, L, f or d)'
         raise OperationError(space.w_ValueError, space.wrap(msg))
 
     return a
@@ -63,6 +63,7 @@
 array_tolist = SMM('tolist', 1)
 array_fromlist = SMM('fromlist', 2)
 array_tostring = SMM('tostring', 1)
+array_tobytes = SMM('tobytes', 1)
 array_fromstring = SMM('fromstring', 2)
 array_tounicode = SMM('tounicode', 1)
 array_fromunicode = SMM('fromunicode', 2)
@@ -123,7 +124,6 @@
         return True
 
 types = {
-    'c': TypeCode(lltype.Char,        'str_w'),
     'u': TypeCode(lltype.UniChar,     'unicode_w'),
     'b': TypeCode(rffi.SIGNEDCHAR,    'int_w', True, True),
     'B': TypeCode(rffi.UCHAR,         'int_w', True),
@@ -513,16 +513,18 @@
         self.fromlist(w_lst)
 
     def array_fromstring__Array_ANY(space, self, w_s):
-        self.fromstring(space.str_w(w_s))
+        self.fromstring(space.bytes_w(w_s))
+
+    def array_tobytes__Array(space, self):
+        cbuf = self.charbuf()
+        return self.space.wrapbytes(rffi.charpsize2str(cbuf, self.len * 
mytype.bytes))
 
     def array_tostring__Array(space, self):
-        cbuf = self.charbuf()
-        return self.space.wrap(rffi.charpsize2str(cbuf, self.len * 
mytype.bytes))
+        space.warn("tostring() is deprecated. Use tobytes() instead.",
+                   space.w_DeprecationWarning)
+        return array_tobytes__Array(space, self)
 
     def array_fromfile__Array_ANY_ANY(space, self, w_f, w_n):
-        if not isinstance(w_f, W_File):
-            msg = "arg1 must be open file"
-            raise OperationError(space.w_TypeError, space.wrap(msg))
         n = space.int_w(w_n)
 
         try:
@@ -530,23 +532,20 @@
         except OverflowError:
             raise MemoryError
         w_item = space.call_method(w_f, 'read', space.wrap(size))
-        item = space.str_w(w_item)
+        item = space.bytes_w(w_item)
         if len(item) < size:
             n = len(item) % self.itemsize
             elems = max(0, len(item) - (len(item) % self.itemsize))
             if n != 0:
                 item = item[0:elems]
-            w_item = space.wrap(item)
+            w_item = space.wrapbytes(item)
             array_fromstring__Array_ANY(space, self, w_item)
             msg = "not enough items in file"
             raise OperationError(space.w_EOFError, space.wrap(msg))
         array_fromstring__Array_ANY(space, self, w_item)
 
     def array_tofile__Array_ANY(space, self, w_f):
-        if not isinstance(w_f, W_File):
-            msg = "arg1 must be open file"
-            raise OperationError(space.w_TypeError, space.wrap(msg))
-        w_s = array_tostring__Array(space, self)
+        w_s = array_tobytes__Array(space, self)
         space.call_method(w_f, 'write', w_s)
 
     if mytype.typecode == 'u':
@@ -593,7 +592,7 @@
 
     def array_reduce__Array(space, self):
         if self.len > 0:
-            w_s = array_tostring__Array(space, self)
+            w_s = array_tobytes__Array(space, self)
             args = [space.wrap(mytype.typecode), w_s]
         else:
             args = [space.wrap(mytype.typecode)]
@@ -631,10 +630,6 @@
     def repr__Array(space, self):
         if self.len == 0:
             return space.wrap("array('%s')" % self.typecode)
-        elif self.typecode == "c":
-            r = space.repr(array_tostring__Array(space, self))
-            s = "array('%s', %s)" % (self.typecode, space.str_w(r))
-            return space.wrap(s)
         elif self.typecode == "u":
             r = space.repr(array_tounicode__Array(space, self))
             s = "array('%s', %s)" % (self.typecode, space.str_w(r))
diff --git a/pypy/module/array/test/test_array.py 
b/pypy/module/array/test/test_array.py
--- a/pypy/module/array/test/test_array.py
+++ b/pypy/module/array/test/test_array.py
@@ -22,40 +22,20 @@
 
     
     def test_ctor(self):
-        assert len(self.array('c')) == 0
         assert len(self.array('i')) == 0
 
         raises(TypeError, self.array, 'hi')
         raises(TypeError, self.array, 1)
         raises(ValueError, self.array, 'q')
 
-        a = self.array('c')
+        a = self.array('u')
         raises(TypeError, a.append, 7)
-        raises(TypeError, a.append, 'hi')
+        raises(TypeError, a.append, u'hi')
         a.append('h')
         assert a[0] == 'h'
         assert type(a[0]) is str
         assert len(a) == 1
 
-        a = self.array('u')
-        raises(TypeError, a.append, 7)
-        raises(TypeError, a.append, u'hi')
-        a.append(unicode('h'))
-        assert a[0] == unicode('h')
-        assert type(a[0]) is unicode
-        assert len(a) == 1
-
-        a = self.array('c', ('a', 'b', 'c'))
-        assert a[0] == 'a'
-        assert a[1] == 'b'
-        assert a[2] == 'c'
-        assert len(a) == 3
-
-        b = self.array('c', a)
-        assert len(b) == 3
-        assert a == b
-        raises(TypeError, self.array, 'i', a)
-
         a = self.array('i', (1, 2, 3))
         b = self.array('h', (1, 2, 3))
         assert a == b
@@ -85,7 +65,7 @@
                            ('H', (     0, 56783, 65535),  int),
                            ('i', (-32768, 30535, 32767),  int),
                            ('I', (     0, 56783, 65535), long),
-                           ('l', (-2 ** 32 / 2, 34, 2 ** 32 / 2 - 1),  int),
+                           ('l', (-2 ** 32 // 2, 34, 2 ** 32 // 2 - 1),  int),
                            ('L', (0, 3523532, 2 ** 32 - 1), long),
                            ):
             a = self.array(tc, ok)
@@ -122,7 +102,7 @@
             assert a.tolist() == vals
 
             a = self.array(tc.lower())
-            vals = [-1 * (2 ** a.itemsize) / 2,  (2 ** a.itemsize) / 2 - 1]
+            vals = [-1 * (2 ** a.itemsize) // 2,  (2 ** a.itemsize) // 2 - 1]
             a.fromlist(vals)
             assert a.tolist() == vals
 
@@ -141,7 +121,7 @@
             assert len(a) == len(values)
 
     def test_itemsize(self):
-        for t in 'cbB':
+        for t in 'bB':
             assert(self.array(t).itemsize >= 1)
         for t in 'uhHiI':
             assert(self.array(t).itemsize >= 2)
@@ -154,11 +134,11 @@
         for t in inttypes:
             a = self.array(t, [1, 2, 3])
             b = a.itemsize
-            for v in (-2 ** (8 * b) / 2, 2 ** (8 * b) / 2 - 1):
+            for v in (-2 ** (8 * b) // 2, 2 ** (8 * b) // 2 - 1):
                 a[1] = v
                 assert a[0] == 1 and a[1] == v and a[2] == 3
-            raises(OverflowError, a.append, -2 ** (8 * b) / 2 - 1)
-            raises(OverflowError, a.append, 2 ** (8 * b) / 2)
+            raises(OverflowError, a.append, -2 ** (8 * b) // 2 - 1)
+            raises(OverflowError, a.append, 2 ** (8 * b) // 2)
 
             a = self.array(t.upper(), [1, 2, 3])
             b = a.itemsize
@@ -169,20 +149,16 @@
             raises(OverflowError, a.append, 2 ** (8 * b))
 
     def test_fromstring(self):
-        a = self.array('c')
-        a.fromstring('Hi!')
-        assert a[0] == 'H' and a[1] == 'i' and a[2] == '!' and len(a) == 3
-
         for t in 'bBhHiIlLfd':
             a = self.array(t)
-            a.fromstring('\x00' * a.itemsize * 2)
+            a.fromstring(b'\x00' * a.itemsize * 2)
             assert len(a) == 2 and a[0] == 0 and a[1] == 0
             if a.itemsize > 1:
-                raises(ValueError, a.fromstring, '\x00' * (a.itemsize - 1))
-                raises(ValueError, a.fromstring, '\x00' * (a.itemsize + 1))
-                raises(ValueError, a.fromstring, '\x00' * (2 * a.itemsize - 1))
-                raises(ValueError, a.fromstring, '\x00' * (2 * a.itemsize + 1))
-            b = self.array(t, '\x00' * a.itemsize * 2)
+                raises(ValueError, a.fromstring, b'\x00' * (a.itemsize - 1))
+                raises(ValueError, a.fromstring, b'\x00' * (a.itemsize + 1))
+                raises(ValueError, a.fromstring, b'\x00' * (2 * a.itemsize - 
1))
+                raises(ValueError, a.fromstring, b'\x00' * (2 * a.itemsize + 
1))
+            b = self.array(t, b'\x00' * a.itemsize * 2)
             assert len(b) == 2 and b[0] == 0 and b[1] == 0
 
     def test_fromfile(self):
@@ -194,28 +170,28 @@
         ##     def read(self,n):
         ##         return self.c*min(n,self.s)
         def myfile(c, s):
-            f = open(self.tempfile, 'w')
+            f = open(self.tempfile, 'wb')
             f.write(c * s)
             f.close()
-            return open(self.tempfile, 'r')
+            return open(self.tempfile, 'rb')
 
-        f = myfile('\x00', 100)
+        f = myfile(b'\x00', 100)
         for t in 'bBhHiIlLfd':
             a = self.array(t)
             a.fromfile(f, 2)
             assert len(a) == 2 and a[0] == 0 and a[1] == 0
 
         a = self.array('b')
-        a.fromfile(myfile('\x01', 20), 2)
+        a.fromfile(myfile(b'\x01', 20), 2)
         assert len(a) == 2 and a[0] == 1 and a[1] == 1
 
         a = self.array('h')
-        a.fromfile(myfile('\x01', 20), 2)
+        a.fromfile(myfile(b'\x01', 20), 2)
         assert len(a) == 2 and a[0] == 257 and a[1] == 257
 
         for i in (0, 1):
             a = self.array('h')
-            raises(EOFError, a.fromfile, myfile('\x01', 2 + i), 2)
+            raises(EOFError, a.fromfile, myfile(b'\x01', 2 + i), 2)
             assert len(a) == 1 and a[0] == 257
 
     def test_fromlist(self):
@@ -255,12 +231,12 @@
         assert repr(a) == "array('b', [1, 2, 1, 2])"
 
     def test_fromunicode(self):
-        raises(ValueError, self.array('i').fromunicode, unicode('hi'))
+        raises(ValueError, self.array('i').fromunicode, 'hi')
         a = self.array('u')
-        a.fromunicode(unicode('hi'))
+        a.fromunicode('hi')
         assert len(a) == 2 and a[0] == 'h' and a[1] == 'i'
 
-        b = self.array('u', unicode('hi'))
+        b = self.array('u', 'hi')
         assert len(b) == 2 and b[0] == 'h' and b[1] == 'i'
 
     def test_sequence(self):
@@ -380,24 +356,23 @@
         assert type(l) is list and len(l) == 3
         assert a[0] == 1 and a[1] == 2 and a[2] == 3
 
-        b = self.array('i', a.tostring())
+        b = self.array('i', a.tobytes())
         assert len(b) == 3 and b[0] == 1 and b[1] == 2 and b[2] == 3
 
-        assert self.array('c', ('h', 'i')).tostring() == 'hi'
         a = self.array('i', [0, 0, 0])
-        assert a.tostring() == '\x00' * 3 * a.itemsize
+        assert a.tobytes() == b'\x00' * 3 * a.itemsize
 
-        s = self.array('i', [1, 2, 3]).tostring()
-        assert '\x00' in s
-        assert '\x01' in s
-        assert '\x02' in s
-        assert '\x03' in s
+        s = self.array('i', [1, 2, 3]).tobytes()
+        assert 0x00 in s
+        assert 0x01 in s
+        assert 0x02 in s
+        assert 0x03 in s
         a = self.array('i', s)
         assert a[0] == 1 and a[1] == 2 and a[2] == 3
 
         from struct import unpack
         values = (-129, 128, -128, 127, 0, 255, -1, 256, -32760, 32760)
-        s = self.array('i', values).tostring()
+        s = self.array('i', values).tobytes()
         fmt = 'i' * len(values)
         a = unpack(fmt, s)
         assert a == values
@@ -406,28 +381,27 @@
                                ('BHILfd', (127, 0, 1, 7, 255, 169)),
                                ('hilHILfd', (32760, 30123, 3422, 23244))):
             for tc in tcodes:
-                values += ((2 ** self.array(tc).itemsize) / 2 - 1, )
-                s = self.array(tc, values).tostring()
+                values += ((2 ** self.array(tc).itemsize) // 2 - 1, )
+                s = self.array(tc, values).tobytes()
                 a = unpack(tc * len(values), s)
                 assert a == values
 
-        f = open(self.tempfile, 'w')
-        self.array('c', ('h', 'i')).tofile(f)
+        f = open(self.tempfile, 'wb')
+        self.array('b', (ord('h'), ord('i'))).tofile(f)
         f.close()
-        assert open(self.tempfile, 'r').readline() == 'hi'
+        assert open(self.tempfile, 'rb').readline() == b'hi'
 
-        a = self.array('c')
-        a.fromfile(open(self.tempfile, 'r'), 2)
-        assert repr(a) == "array('c', 'hi')"
+        a = self.array('b')
+        a.fromfile(open(self.tempfile, 'rb'), 2)
+        assert repr(a) == "array('b', [104, 105])"
 
         raises(ValueError, self.array('i').tounicode)
-        assert self.array('u', unicode('hello')).tounicode() == \
-               unicode('hello')
+        assert self.array('u', 'hello').tounicode() == 'hello'
 
     def test_buffer(self):
-        a = self.array('h', 'Hi')
+        a = self.array('h', b'Hi')
         buf = buffer(a)
-        assert buf[1] == 'i'
+        assert buf[1] == b'i'
         #raises(TypeError, buf.__setitem__, 1, 'o')
 
     def test_list_methods(self):
@@ -482,8 +456,7 @@
             pass
         
         for v1, v2, tt in (([1, 2, 3], [1, 3, 2], 'bhilBHIL'),
-                         ('abc', 'acb', 'c'),
-                         (unicode('abc'), unicode('acb'), 'u')):
+                         ('abc', 'acb', 'u')):
             for t in tt:
                 a = self.array(t, v1)
                 b = self.array(t, v1)
@@ -677,7 +650,7 @@
             def __len__(self):
                 return 3
 
-            def next(self):
+            def __next__(self):
                 self.n -= 1
                 if self.n < 0:
                     raise StopIteration
@@ -697,7 +670,7 @@
         assert repr(a) == "array('i', [4, 3, 2, 1, 0])"
 
     def test_type(self):
-        for t in 'bBhHiIlLfdcu':
+        for t in 'bBhHiIlLfdu':
             assert type(self.array(t)) is self.array
             assert isinstance(self.array(t), self.array)
 
@@ -727,7 +700,8 @@
                 self.height = height
                 return self
 
-            def _index(self, (x,y)):
+            def _index(self, xy):
+                x, y = xy
                 x = min(max(x, 0), self.width-1)
                 y = min(max(y, 0), self.height-1)
                 return y * self.width + x
@@ -755,7 +729,7 @@
                 self.append(7)
 
             def fromstring(self, lst):
-                self.append('8')
+                self.append(8)
 
             def fromunicode(self, lst):
                 self.append(u'9')
@@ -763,8 +737,7 @@
             def extend(self, lst):
                 self.append(10)
 
-        assert repr(mya('c', 'hi')) == "array('c', 'hi')"
-        assert repr(mya('u', u'hi')) == "array('u', u'hi')"
+        assert repr(mya('u', u'hi')) == "array('u', 'hi')"
         assert repr(mya('i', [1, 2, 3])) == "array('i', [1, 2, 3])"
         assert repr(mya('i', (1, 2, 3))) == "array('i', [1, 2, 3])"
 
@@ -772,13 +745,13 @@
         a.fromlist([1, 2, 3])
         assert repr(a) == "array('i', [7])"
 
-        a = mya('c')
-        a.fromstring('hi')
-        assert repr(a) == "array('c', '8')"
+        a = mya('b')
+        a.fromstring(b'hi')
+        assert repr(a) == "array('b', [8])"
 
         a = mya('u')
         a.fromunicode(u'hi')
-        assert repr(a) == "array('u', u'9')"
+        assert repr(a) == "array('u', '9')"
 
         a = mya('i')
         a.extend([1, 2, 3])
@@ -789,34 +762,33 @@
             def tolist(self):
                 return 'list'
 
-            def tostring(self):
+            def tobytes(self):
                 return 'str'
 
             def tounicode(self):
                 return 'unicode'
 
         assert mya('i', [1, 2, 3]).tolist() == 'list'
-        assert mya('c', 'hi').tostring() == 'str'
-        assert mya('u', u'hi').tounicode() == 'unicode'
+        assert mya('u', 'hi').tobytes() == 'str'
+        assert mya('u', 'hi').tounicode() == 'unicode'
 
-        assert repr(mya('c', 'hi')) == "array('c', 'hi')"
-        assert repr(mya('u', u'hi')) == "array('u', u'hi')"
+        assert repr(mya('u', u'hi')) == "array('u', 'hi')"
         assert repr(mya('i', [1, 2, 3])) == "array('i', [1, 2, 3])"
         assert repr(mya('i', (1, 2, 3))) == "array('i', [1, 2, 3])"
 
     def test_unicode_outofrange(self):
-        a = self.array('u', unicode(r'\x01\u263a\x00\ufeff', 'unicode-escape'))
-        b = self.array('u', unicode(r'\x01\u263a\x00\ufeff', 'unicode-escape'))
+        a = self.array('u', '\x01\u263a\x00\ufeff')
+        b = self.array('u', '\x01\u263a\x00\ufeff')
         b.byteswap()
         assert a != b
 
     def test_weakref(self):
         import weakref
-        a = self.array('c', 'Hi!')
+        a = self.array('u', 'Hi!')
         r = weakref.ref(a)
         assert r() is a
 
-class TestCPythonsOwnArray(BaseArrayTests):
+class DontTestCPythonsOwnArray(BaseArrayTests):
 
     def setup_class(cls):
         import array
@@ -842,13 +814,13 @@
 
 
     def test_buffer_info(self):
-        a = self.array('c', 'Hi!')
+        a = self.array('b', b'Hi!')
         bi = a.buffer_info()
         assert bi[0] != 0
         assert bi[1] == 3
         import _rawffi
         data = _rawffi.charp2string(bi[0])
-        assert data[0:3] == 'Hi!'
+        assert data[0:3] == b'Hi!'
 
     def test_array_reverse_slice_assign_self(self):
         a = self.array('b', range(4))
diff --git a/pypy/module/array/test/test_array_old.py 
b/pypy/module/array/test/test_array_old.py
--- a/pypy/module/array/test/test_array_old.py
+++ b/pypy/module/array/test/test_array_old.py
@@ -12,9 +12,9 @@
     native_sizes = {'l': struct.calcsize('l')}
 
     def test_attributes(self):
-        a = self.array.array('c')
-        assert a.typecode == 'c'
-        assert a.itemsize == 1
+        a = self.array.array('u')
+        assert a.typecode == 'u'
+        assert a.itemsize == 4
         a = self.array.array('l')
         assert a.typecode == 'l'
         assert a.itemsize == self.native_sizes['l']
@@ -26,9 +26,9 @@
 
     def test_unicode(self):
         a = self.array.array('u')
-        a.fromunicode(unichr(9999))
+        a.fromunicode(chr(9999))
         assert len(a) == 1
-        assert a.tolist() == [unichr(9999)]
+        assert a.tolist() == [chr(9999)]
 
     def test_pickle(self):
         import sys
@@ -51,11 +51,11 @@
                 self.args = args
                 self.kwds = kwds
 
-        a = A('c', foo='bar')
-        assert a.args == ('c',)
+        a = A('u', foo='bar')
+        assert a.args == ('u',)
         assert a.kwds == {'foo': 'bar'}
-        a = A('i', range(10), some=42)
-        assert a.args == ('i', range(10))
+        a = A('i', list(range(10)), some=42)
+        assert a.args == ('i', list(range(10)))
         assert a.kwds == {'some': 42}
         raises(TypeError, A)
         raises(TypeError, A, 42)
@@ -63,7 +63,7 @@
         raises(TypeError, self.array.array, 'i', [], foo='bar')
 
 
-class TestCPythonsOwnArray(BaseArrayTests):
+class DontTestCPythonsOwnArray(BaseArrayTests):
 
     def setup_class(cls):
         import array
diff --git a/pypy/objspace/std/stringobject.py 
b/pypy/objspace/std/stringobject.py
--- a/pypy/objspace/std/stringobject.py
+++ b/pypy/objspace/std/stringobject.py
@@ -8,6 +8,7 @@
 from pypy.objspace.std.inttype import wrapint
 from pypy.objspace.std.sliceobject import W_SliceObject, normalize_simple_slice
 from pypy.objspace.std import slicetype, newformat
+from pypy.objspace.std.intobject import W_IntObject
 from pypy.objspace.std.listobject import W_ListObject
 from pypy.objspace.std.noneobject import W_NoneObject
 from pypy.objspace.std.tupleobject import W_TupleObject
@@ -435,6 +436,11 @@
     sub = w_sub._value
     return space.newbool(self.find(sub) >= 0)
 
+def contains__String_Int(space, w_self, w_char):
+    self = w_self._value
+    char = w_char.intval
+    return space.newbool(self.find(chr(char)) >= 0)
+
 def str_find__String_String_ANY_ANY(space, w_self, w_sub, w_start, w_end):
     (self, sub, start, end) =  _convert_idx_params(space, w_self, w_sub, 
w_start, w_end)
     res = self.find(sub, start, end)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to