[pypy-svn] r75832 - in pypy/branch/interplevel-array/pypy/module/array: . test
hakanardo at codespeak.net
hakanardo at codespeak.net
Mon Jul 5 13:56:45 CEST 2010
Author: hakanardo
Date: Mon Jul 5 13:56:43 2010
New Revision: 75832
Modified:
pypy/branch/interplevel-array/pypy/module/array/__init__.py
pypy/branch/interplevel-array/pypy/module/array/interp_array.py
pypy/branch/interplevel-array/pypy/module/array/test/test_array.py
Log:
unrolling_iterable and some whitespace maniac to keep pep8 happy
Modified: pypy/branch/interplevel-array/pypy/module/array/__init__.py
==============================================================================
--- pypy/branch/interplevel-array/pypy/module/array/__init__.py (original)
+++ pypy/branch/interplevel-array/pypy/module/array/__init__.py Mon Jul 5 13:56:43 2010
@@ -1,13 +1,13 @@
# Package initialisation
from pypy.interpreter.mixedmodule import MixedModule
+
class Module(MixedModule):
appleveldefs = {
}
-
+
interpleveldefs = {
- 'array' : 'interp_array.array',
- 'sized_array' : 'interp_array.sized_array',
+ 'array': 'interp_array.array',
+ 'sized_array': 'interp_array.sized_array',
}
-
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 5 13:56:43 2010
@@ -5,18 +5,21 @@
from pypy.interpreter.gateway import interp2app, ObjSpace, W_Root
from pypy.rlib.jit import dont_look_inside
from pypy.rlib import rgc
-from pypy.rlib.rbigint import rbigint
+from pypy.rlib.unroll import unrolling_iterable
+
+FloatArray = lltype.GcArray(lltype.Float)
-FloatArray=lltype.GcArray(lltype.Float)
class W_SizedFloatArray(Wrappable):
@dont_look_inside
def __init__(self, space, size):
- self.space=space
- self.size=size
+ self.space = space
+ self.size = size
print "malloc"
- #self.buffer = lltype.malloc(rffi.DOUBLEP.TO, size, flavor='raw', zero=True)
- #self.buffer = rgc.malloc_nonmovable(lltype.GcArray(lltype.Float), size)
+ #self.buffer = lltype.malloc(rffi.DOUBLEP.TO, size, flavor='raw',
+ # zero=True)
+ #self.buffer = rgc.malloc_nonmovable(lltype.GcArray(lltype.Float),
+ # size)
self.buffer = lltype.malloc(FloatArray, size, zero=True)
print "buf: ", self.buffer
@@ -27,33 +30,33 @@
def descr_getitem(self, idx):
return self.space.wrap(self.buffer[idx])
descr_getitem.unwrap_spec = ['self', int]
-
+
def descr_setitem(self, idx, val):
- self.buffer[idx]=val
+ self.buffer[idx] = val
descr_setitem.unwrap_spec = ['self', int, float]
W_SizedFloatArray.typedef = TypeDef(
'SizedFloatArray',
- __getitem__ = interp2app(W_SizedFloatArray.descr_getitem),
- __setitem__ = interp2app(W_SizedFloatArray.descr_setitem),
+ __getitem__=interp2app(W_SizedFloatArray.descr_getitem),
+ __setitem__=interp2app(W_SizedFloatArray.descr_setitem),
)
-
-def sized_array(space,size):
+
+
+def sized_array(space, size):
return W_SizedFloatArray(space, size)
-sized_array.unwrap_spec=(ObjSpace, int)
+sized_array.unwrap_spec = (ObjSpace, int)
class TypeCode(object):
def __init__(self, itemtype, unwrap, canoverflow=False, signed=False):
- self.itemtype=itemtype
+ self.itemtype = itemtype
if itemtype is lltype.SingleFloat:
- self.bytes=4
+ self.bytes = 4
else:
self.bytes = rffi.sizeof(itemtype)
- self.unwrap=unwrap
+ self.unwrap = unwrap
self.signed = signed
self.canoverflow = canoverflow
-
types = {
@@ -70,61 +73,67 @@
'f': TypeCode(lltype.SingleFloat, 'float_w'),
'd': TypeCode(lltype.Float, 'float_w'),
}
+unroll_typecodes = unrolling_iterable(types.keys())
+
class W_Array(Wrappable):
def __init__(self, space, typecode):
if len(typecode) != 1:
- msg='array() argument 1 must be char, not str'
- raise OperationError(space.w_TypeError,space.wrap(msg))
+ msg = 'array() argument 1 must be char, not str'
+ raise OperationError(space.w_TypeError, space.wrap(msg))
if typecode not in 'cbBuhHiIlLfd':
- msg='bad typecode (must be c, b, B, u, h, H, i, I, l, L, f or d)'
- raise OperationError(space.w_ValueError,space.wrap(msg))
- self.space=space
- self.typecode=typecode
- self.len=0
- self.buffer=None
+ msg = 'bad typecode (must be c, b, B, u, h, H, i, I, l, L, f or d)'
+ raise OperationError(space.w_ValueError, space.wrap(msg))
+ self.space = space
+ self.typecode = typecode
+ self.len = 0
+ self.buffer = None
self.itemsize = types[typecode].bytes
- def item_w(self, w_item):
- space=self.space
- tc=types[self.typecode]
- unwrap=getattr(space, tc.unwrap)
- item=unwrap(w_item)
- if tc.unwrap=='bigint_w':
- try:
- if tc.signed: item=item.tolonglong()
- else: item=item.toulonglong()
- except (ValueError, OverflowError):
- msg='unsigned %d-byte integer out of range'%tc.bytes
- raise OperationError(space.w_OverflowError, space.wrap(msg))
-
- if tc.canoverflow:
- msg=None
- if tc.signed:
- if item<-2**(tc.bytes*8)/2:
- msg='signed %d-byte integer is less than minimum'%tc.bytes
- elif item>2**(tc.bytes*8)/2-1:
- msg='signed %d-byte integer is greater than maximum'%tc.bytes
- else:
- if item<0:
- msg='unsigned %d-byte integer is less than minimum'%tc.bytes
- elif item>2**(tc.bytes*8)-1:
- msg='unsigned %d-byte integer is greater than maximum'%tc.bytes
- if msg is not None:
- raise OperationError(space.w_OverflowError, space.wrap(msg))
- return rffi.cast(tc.itemtype, item)
+ def item_w(self, w_item):
+ space = self.space
+ for c in unroll_typecodes:
+ if self.typecode == c:
+ tc = types[c]
+ unwrap = getattr(space, tc.unwrap)
+ item = unwrap(w_item)
+ if tc.unwrap == 'bigint_w':
+ try:
+ if tc.signed:
+ item = item.tolonglong()
+ else:
+ item = item.toulonglong()
+ except (ValueError, OverflowError):
+ msg = 'unsigned %d-byte integer out of range' % tc.bytes
+ raise OperationError(space.w_OverflowError, space.wrap(msg))
+
+ if tc.canoverflow:
+ msg = None
+ if tc.signed:
+ if item < -2 ** (tc.bytes * 8) / 2:
+ msg = 'signed %d-byte integer is less than minimum' % tc.bytes
+ elif item > 2 ** (tc.bytes * 8) / 2 - 1:
+ msg = 'signed %d-byte integer is greater than maximum' % tc.bytes
+ else:
+ if item < 0:
+ msg = 'unsigned %d-byte integer is less than minimum' % tc.bytes
+ elif item > 2 ** (tc.bytes * 8) - 1:
+ msg = 'unsigned %d-byte integer is greater than maximum' % tc.bytes
+ if msg is not None:
+ raise OperationError(space.w_OverflowError, space.wrap(msg))
+ return rffi.cast(tc.itemtype, item)
def setlen(self, size):
- new_buffer=lltype.malloc(lltype.GcArray(types[self.typecode].itemtype), size)
+ new_buffer = lltype.malloc(lltype.GcArray(types[self.typecode].itemtype), size)
for i in range(self.len):
- new_buffer[i]=self.buffer[i]
- self.buffer=new_buffer
- self.len=size
-
- def descr_append(self,w_x):
- x=self.item_w(w_x)
- self.setlen(self.len+1)
- self.buffer[self.len-1]=x
+ new_buffer[i] = self.buffer[i]
+ self.buffer = new_buffer
+ self.len = size
+
+ def descr_append(self, w_x):
+ x = self.item_w(w_x)
+ self.setlen(self.len + 1)
+ self.buffer[self.len - 1] = x
descr_append.unwrap_spec = ['self', W_Root]
def descr_extend(self, w_initializer):
@@ -139,22 +148,21 @@
break
self.descr_append(w_item)
descr_extend.unwrap_spec = ['self', W_Root]
-
def descr_getitem(self, idx):
item = self.buffer[idx]
if self.typecode in ('b', 'B', 'h', 'H', 'i', 'l'):
- item=rffi.cast(lltype.Signed, item)
+ item = rffi.cast(lltype.Signed, item)
if self.typecode == 'f':
- item=float(item)
+ item = float(item)
return self.space.wrap(item)
descr_getitem.unwrap_spec = ['self', int]
def descr_setitem(self, idx, w_item):
- item=self.item_w(w_item)
- self.buffer[idx]=item
+ item = self.item_w(w_item)
+ self.buffer[idx] = item
descr_setitem.unwrap_spec = ['self', int, W_Root]
-
+
def descr_len(self):
return self.space.wrap(self.len)
descr_len.unwrap_spec = ['self']
@@ -166,7 +174,7 @@
def descr_itemsize(space, self):
return space.wrap(self.itemsize)
-W_Array.typedef=TypeDef(
+W_Array.typedef = TypeDef(
'Array',
append = interp2app(W_Array.descr_append),
extend = interp2app(W_Array.descr_extend),
@@ -176,13 +184,12 @@
itemsize = GetSetProperty(descr_itemsize, cls=W_Array)
)
+
def array(space, typecode, w_initializer=None):
- a=W_Array(space, typecode)
+ a = W_Array(space, typecode)
if w_initializer is not None:
if not space.is_w(w_initializer, space.w_None):
- a.descr_extend(w_initializer) #FIXME: use fromlist, fromstring, ...
+ a.descr_extend(w_initializer) # FIXME: use fromlist, fromstring, ...
return a
-
-array.unwrap_spec=(ObjSpace, str, W_Root)
-
+array.unwrap_spec = (ObjSpace, str, W_Root)
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 5 13:56:43 2010
@@ -1,5 +1,6 @@
from pypy.conftest import gettestobjspace
+
class AppTestSizedArray:
def setup_class(cls):
cls.space = gettestobjspace(usemodules=('array',))
@@ -9,9 +10,10 @@
""")
def test_simple(self):
- a=self.sized_array(10)
- a[5]=7.42
- assert a[5]==7.42
+ a = self.sized_array(10)
+ a[5] = 7.42
+ assert a[5] == 7.42
+
class AppTestArray:
def setup_class(cls):
@@ -26,113 +28,102 @@
raises(TypeError, self.array, 1)
raises(ValueError, self.array, 'q')
- a=self.array('c')
+ a = self.array('c')
raises(TypeError, a.append, 7)
a.append('h')
assert a[0] == 'h'
assert type(a[0]) is str
assert len(a) == 1
- a=self.array('u')
+ a = self.array('u')
raises(TypeError, a.append, 7)
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'
+ a = self.array('c', ('a', 'b', 'c'))
+ assert a[0] == 'a'
+ assert a[1] == 'b'
+ assert a[2] == 'c'
assert len(a) == 3
def test_value_range(self):
- values=(-129, 128, -128, 127, 0, 255, -1, 256,
- -32768, 32767, -32769, 32768, 65535, 65536,
- -2147483647, -2147483648, 2147483647, 4294967295, 4294967296,
- )
+ values = (-129, 128, -128, 127, 0, 255, -1, 256,
+ -32768, 32767, -32769, 32768, 65535, 65536,
+ -2147483647, -2147483648, 2147483647, 4294967295, 4294967296,
+ )
for bb in (8, 16, 32, 64, 128, 256, 512, 1024):
- for b in (bb-1, bb, bb+1):
- values += ( 2**b, 2**b+1, 2**b-1, -2**b, -2**b+1, -2**b-1)
-
- for tc,ok,pt in (('b',( -128, 34, 127), int),
- ('B',( 0, 23, 255), int),
- ('h',(-32768, 30535, 32767), int),
- ('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',(0, 3523532, 2**32-1), long),
- ):
- a=self.array(tc, ok)
+ for b in (bb - 1, bb, bb + 1):
+ values += (2 ** b, 2 ** b + 1, 2 ** b - 1,
+ -2 ** b, -2 ** b + 1, -2 ** b - 1)
+
+ for tc, ok, pt in (('b', ( -128, 34, 127), int),
+ ('B', ( 0, 23, 255), int),
+ ('h', (-32768, 30535, 32767), int),
+ ('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', (0, 3523532, 2 ** 32 - 1), long),
+ ):
+ a = self.array(tc, ok)
assert len(a) == len(ok)
for v in ok:
a.append(v)
- for i,v in enumerate(ok*2):
- assert a[i]==v
+ for i, v in enumerate(ok * 2):
+ assert a[i] == v
assert type(a[i]) is pt
for v in ok:
- a[1]=v
- assert a[0]==ok[0]
- assert a[1]==v
- assert a[2]==ok[2]
- assert len(a) == 2*len(ok)
+ a[1] = v
+ assert a[0] == ok[0]
+ assert a[1] == v
+ assert a[2] == ok[2]
+ assert len(a) == 2 * len(ok)
for v in values:
try:
- a[1]=v
- assert a[0]==ok[0]
- assert a[1]==v
- assert a[2]==ok[2]
+ a[1] = v
+ assert a[0] == ok[0]
+ assert a[1] == v
+ assert a[2] == ok[2]
except OverflowError:
pass
def test_float(self):
- values=[0, 1, 2.5, -4.25]
+ values = [0, 1, 2.5, -4.25]
for tc in 'fd':
- a=self.array(tc, values)
- assert len(a)==len(values)
- for i,v in enumerate(values):
- assert a[i]==v
+ a = self.array(tc, values)
+ assert len(a) == len(values)
+ for i, v in enumerate(values):
+ assert a[i] == v
assert type(a[i]) is float
- a[1]=10.125
- assert a[0]==0
- assert a[1]==10.125
- assert a[2]==2.5
- assert len(a)==len(values)
+ a[1] = 10.125
+ assert a[0] == 0
+ assert a[1] == 10.125
+ assert a[2] == 2.5
+ assert len(a) == len(values)
def test_itemsize(self):
- for t in 'cbB': assert(self.array(t).itemsize>=1)
- for t in 'uhHiI': assert(self.array(t).itemsize>=2)
- for t in 'lLf': assert(self.array(t).itemsize>=4)
- for t in 'd': assert(self.array(t).itemsize>=8)
-
- inttypes='bhil'
+ for t in 'cbB': assert(self.array(t).itemsize >= 1)
+ for t in 'uhHiI': assert(self.array(t).itemsize >= 2)
+ for t in 'lLf': assert(self.array(t).itemsize >= 4)
+ for t in 'd': assert(self.array(t).itemsize >= 8)
+
+ inttypes = 'bhil'
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):
- 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)
-
- a=self.array(t.upper(), [1,2,3])
- b=a.itemsize
- for v in (0, 2**(8*b)-1):
+ a = self.array(t, [1, 2, 3])
+ b = a.itemsize
+ 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)
+
+ a = self.array(t.upper(), [1, 2, 3])
+ b = a.itemsize
+ for v in (0, 2 ** (8 * b) - 1):
print b, v
- a[1]=v
- assert a[0]==1 and a[1]==v and a[2]==3
+ a[1] = v
+ assert a[0] == 1 and a[1] == v and a[2] == 3
raises(OverflowError, a.append, -1)
- raises(OverflowError, a.append, 2**(8*b))
-
-
-## space.sys.get('modules')
-
-## w_import = space.builtin.get('__import__')
-## w_array = space.call(w_import, space.newlist([space.wrap('array')]))
-
-## print w_array
-## space.appexec([], "(): import array; print array.array(7)")
-## print space.appexec([], "(): import array; return array.array(7)")
-## space.appexec([], "(): import array; a=array.array(7); print a[2]")
-## space.appexec([], "(): import array; a=array.array(7); a[2]=7.42; print a[2]")
+ raises(OverflowError, a.append, 2 ** (8 * b))
More information about the Pypy-commit
mailing list