[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