[pypy-svn] r76132 - in pypy/branch/interplevel-array/pypy/module/array: . test

hakanardo at codespeak.net hakanardo at codespeak.net
Mon Jul 12 13:19:31 CEST 2010


Author: hakanardo
Date: Mon Jul 12 13:19:24 2010
New Revision: 76132

Modified:
   pypy/branch/interplevel-array/pypy/module/array/app_array.py
   pypy/branch/interplevel-array/pypy/module/array/interp_array.py
   pypy/branch/interplevel-array/pypy/module/array/test/test_array.py
Log:
delitem, iter and contains

Modified: pypy/branch/interplevel-array/pypy/module/array/app_array.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/array/app_array.py	(original)
+++ pypy/branch/interplevel-array/pypy/module/array/app_array.py	Mon Jul 12 13:19:24 2010
@@ -177,3 +177,13 @@
 
     def __setslice__(self, i, j, x):
         self.__setitem__(slice(i, j), x)
+
+    def __delslice__(self, i, j):
+        self.__delitem__(slice(i, j))
+
+    def __contains__(self, item):
+        for x in self:
+            if x == item:
+                return True
+        return False
+

Modified: pypy/branch/interplevel-array/pypy/module/array/interp_array.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/array/interp_array.py	(original)
+++ pypy/branch/interplevel-array/pypy/module/array/interp_array.py	Mon Jul 12 13:19:24 2010
@@ -74,6 +74,22 @@
 unroll_typecodes = unrolling_iterable(types.keys())
 
 def make_array(mytype):
+    class W_ArrayIter(Wrappable):
+        def __init__(self, a):
+            self.space = a.space
+            self.a = a
+            self.pos = 0
+
+        def iter_w(self):
+            return self.space.wrap(self)
+
+        def next_w(self):
+            if self.pos >= self.a.len:
+                raise OperationError(self.space.w_StopIteration, self.space.w_None)
+            val = self.a.descr_getitem(self.space.wrap(self.pos))
+            self.pos += 1
+            return val
+        
     class W_Array(W_ArrayBase):
         itemsize=mytype.bytes
         typecode=mytype.typecode
@@ -396,6 +412,19 @@
             return self
         descr_imul.unwrap_spec = ['self', int]
 
+        def descr_delitem(self, w_idx):
+            space=self.space
+            w_lst = space.call_function(
+                space.getattr(self, space.wrap('tolist')))
+            space.call_function(
+                space.getattr(w_lst, space.wrap('__delitem__')),
+                w_idx)
+            self.setlen(0)
+            self.descr_fromsequence(w_lst)
+        descr_delitem.unwrap_spec = ['self', W_Root]
+
+        def descr_iter(self):
+            return W_ArrayIter(self)
 
 
     def descr_itemsize(space, self):
@@ -403,6 +432,13 @@
     def descr_typecode(space, self):
         return space.wrap(mytype.typecode)
 
+    W_ArrayIter.__name__ = 'W_ArrayIterType_'+mytype.typecode
+    W_ArrayIter.typedef = TypeDef(
+        'ArrayIterType_'+mytype.typecode,
+        __iter__  = interp2app(W_ArrayIter.iter_w),
+        next      = interp2app(W_ArrayIter.next_w),
+    )
+
     W_Array.__name__ = 'W_ArrayType_'+mytype.typecode
     W_Array.typedef = TypeDef(
         'ArrayType_'+mytype.typecode,
@@ -410,8 +446,10 @@
         __len__      = interp2app(W_Array.descr_len),
         __getitem__  = interp2app(W_Array.descr_getitem),
         __setitem__  = interp2app(W_Array.descr_setitem),
+        __delitem__  = interp2app(W_Array.descr_delitem),
         __getslice__ = appmethod('__getslice__'),
         __setslice__ = appmethod('__setslice__'),
+        __delslice__ = appmethod('__delslice__'),
 
         itemsize     = GetSetProperty(descr_itemsize, cls=W_Array),
         typecode     = GetSetProperty(descr_typecode, cls=W_Array),
@@ -461,8 +499,10 @@
         __imul__     = interp2app(W_Array.descr_imul),
 
         buffer_info  = interp2app(W_Array.descr_buffer_info),
-        
         byteswap     = interp2app(W_Array.descr_byteswap),
+
+        __iter__     = interp2app(W_Array.descr_iter),
+        __contains__ = appmethod('__contains__'),
     )
 
     mytype.w_class = W_Array

Modified: pypy/branch/interplevel-array/pypy/module/array/test/test_array.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/array/test/test_array.py	(original)
+++ pypy/branch/interplevel-array/pypy/module/array/test/test_array.py	Mon Jul 12 13:19:24 2010
@@ -539,6 +539,26 @@
 
         raises(TypeError, self.array('i').__add__, (2,))
         raises(TypeError, self.array('i').__add__, self.array('b'))
+
+    def test_delitem(self):
+        a = self.array('i', [1, 2, 3])
+        del a[1]
+        assert repr(a) == "array('i', [1, 3])"
+
+        a = self.array('i', [1, 2, 3, 4, 5])
+        del a[1:3]
+        assert repr(a) == "array('i', [1, 4, 5])"
+
+        a.__delslice__(0,2)
+        assert repr(a) == "array('i', [5])"
+
+    def test_iter(self):
+        a = self.array('i', [1, 2, 3])
+        assert 1 in a
+        b = self.array('i')
+        for i in a:
+            b.append(i)
+        assert repr(b) == "array('i', [1, 2, 3])"
         
 
     #FIXME



More information about the Pypy-commit mailing list