[pypy-svn] r27047 - in pypy/dist/pypy: module/stackless objspace/std objspace/std/test

stephan at codespeak.net stephan at codespeak.net
Wed May 10 13:31:13 CEST 2006


Author: stephan
Date: Wed May 10 13:31:10 2006
New Revision: 27047

Added:
   pypy/dist/pypy/objspace/std/test/test_set.py
Modified:
   pypy/dist/pypy/module/stackless/__init__.py
   pypy/dist/pypy/objspace/std/frozensettype.py
   pypy/dist/pypy/objspace/std/model.py
   pypy/dist/pypy/objspace/std/objspace.py
   pypy/dist/pypy/objspace/std/setobject.py
   pypy/dist/pypy/objspace/std/settype.py
Log:
removed the WITHSET switch.


Modified: pypy/dist/pypy/module/stackless/__init__.py
==============================================================================
--- pypy/dist/pypy/module/stackless/__init__.py	(original)
+++ pypy/dist/pypy/module/stackless/__init__.py	Wed May 10 13:31:10 2006
@@ -10,7 +10,7 @@
     }
 
     interpleveldefs = {
-        'tasklet'    : 'interp_stackless.tasklet',
+        #'tasklet'    : 'interp_stackless.tasklet',
         'coroutine'  : 'coroutine.AppCoroutine',
     }
 

Modified: pypy/dist/pypy/objspace/std/frozensettype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/frozensettype.py	(original)
+++ pypy/dist/pypy/objspace/std/frozensettype.py	Wed May 10 13:31:10 2006
@@ -4,7 +4,6 @@
 from pypy.objspace.std.stdtypedef import StdObjSpaceMultiMethod as SMM
 from pypy.interpreter.gateway import NoneNotWrapped
 from pypy.interpreter import gateway
-from pypy.objspace.std.model import WITHSET
 
 frozenset_copy                  = SMM('copy', 1)
 frozenset_difference            = SMM('difference', 2)
@@ -23,7 +22,7 @@
     if _is_frozenset_exact(w_iterable):
         return w_iterable
     w_obj = space.allocate_instance(W_FrozensetObject, w_frozensettype)
-    W_FrozensetObject.__init__(w_obj, None)
+    W_FrozensetObject.__init__(w_obj, space, None)
 
     return w_obj
 

Modified: pypy/dist/pypy/objspace/std/model.py
==============================================================================
--- pypy/dist/pypy/objspace/std/model.py	(original)
+++ pypy/dist/pypy/objspace/std/model.py	Wed May 10 13:31:10 2006
@@ -8,7 +8,6 @@
 import pypy.interpreter.pycode
 import pypy.interpreter.special
 
-WITHSET = False
 WITHSMALLINT = False
 
 class StdTypeModel:
@@ -22,9 +21,8 @@
             from pypy.objspace.std.inttype    import int_typedef
             from pypy.objspace.std.floattype  import float_typedef
             from pypy.objspace.std.complextype  import complex_typedef
-            if WITHSET:
-                from pypy.objspace.std.settype import set_typedef
-                from pypy.objspace.std.frozensettype import frozenset_typedef
+            from pypy.objspace.std.settype import set_typedef
+            from pypy.objspace.std.frozensettype import frozenset_typedef
             from pypy.objspace.std.tupletype  import tuple_typedef
             from pypy.objspace.std.listtype   import list_typedef
             from pypy.objspace.std.dicttype   import dict_typedef
@@ -48,8 +46,7 @@
         from pypy.objspace.std import intobject
         from pypy.objspace.std import floatobject
         from pypy.objspace.std import complexobject
-        if WITHSET:
-            from pypy.objspace.std import setobject
+        from pypy.objspace.std import setobject
         if WITHSMALLINT:
             from pypy.objspace.std import smallintobject
         from pypy.objspace.std import tupleobject
@@ -91,10 +88,9 @@
             pypy.interpreter.special.Ellipsis: [],
             }
         self.typeorder[complexobject.W_ComplexObject] = []
-        if WITHSET:
-            self.typeorder[setobject.W_SetObject] = []
-            self.typeorder[setobject.W_FrozensetObject] = []
-            self.typeorder[setobject.W_SetIterObject] = []
+        self.typeorder[setobject.W_SetObject] = []
+        self.typeorder[setobject.W_FrozensetObject] = []
+        self.typeorder[setobject.W_SetIterObject] = []
         if WITHSMALLINT:
             self.typeorder[smallintobject.W_SmallIntObject] = []
         for type in self.typeorder:

Modified: pypy/dist/pypy/objspace/std/objspace.py
==============================================================================
--- pypy/dist/pypy/objspace/std/objspace.py	(original)
+++ pypy/dist/pypy/objspace/std/objspace.py	Wed May 10 13:31:10 2006
@@ -7,7 +7,6 @@
 from pypy.tool.cache import Cache 
 from pypy.tool.sourcetools import func_with_new_name
 from pypy.objspace.std.model import W_Object, UnwrapError
-from pypy.objspace.std.model import WITHSET
 from pypy.objspace.std.model import W_ANY, StdObjSpaceMultiMethod, StdTypeModel
 from pypy.objspace.std.multimethod import FailedToImplement
 from pypy.objspace.descroperation import DescrOperation
@@ -301,14 +300,12 @@
             return W_ComplexObject(x.real, x.imag)
 
         if isinstance(x, set):
-            if WITHSET:
-                wrappeditems = [self.wrap(item) for item in x]
-                return W_SetObject(wrappeditems)
+            wrappeditems = [self.wrap(item) for item in x]
+            return W_SetObject(self, wrappeditems)
 
         if isinstance(x, frozenset):
-            if WITHSET:
-                wrappeditems = [self.wrap(item) for item in x]
-                return W_FrozensetObject(wrappeditems)
+            wrappeditems = [self.wrap(item) for item in x]
+            return W_FrozensetObject(self, wrappeditems)
 
         if x is __builtin__.Ellipsis:
             # '__builtin__.Ellipsis' avoids confusion with special.Ellipsis
@@ -356,12 +353,11 @@
     def newcomplex(self, realval, imagval):
         return W_ComplexObject(realval, imagval)
 
-    if WITHSET:
-        def newset(self, rdict_w):
-            return W_SetObject(rdict_w)
+    def newset(self, rdict_w):
+        return W_SetObject(self, rdict_w)
 
-        def newfrozenset(self, rdict_w):
-            return W_FrozensetObject(rdict_w)
+    def newfrozenset(self, rdict_w):
+        return W_FrozensetObject(self, rdict_w)
 
     def newlong(self, val): # val is an int
         return W_LongObject.fromint(self, val)

Modified: pypy/dist/pypy/objspace/std/setobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/setobject.py	(original)
+++ pypy/dist/pypy/objspace/std/setobject.py	Wed May 10 13:31:10 2006
@@ -1,6 +1,5 @@
 from pypy.objspace.std.objspace import W_Object, OperationError
 from pypy.objspace.std.objspace import registerimplementation, register_all
-from pypy.objspace.std.model import WITHSET
 from pypy.objspace.std.stdtypedef import StdObjSpaceMultiMethod
 from pypy.rpython.objectmodel import r_dict
 from pypy.rpython.rarithmetic import intmask, r_uint
@@ -8,7 +7,7 @@
 
 class W_BaseSetObject(W_Object):
 
-    def __init__(w_self, setdata=None):
+    def __init__(w_self, space, setdata=None):
         if setdata is None:
             w_self.setdata = r_dict(space.eq_w, space.hash_w)
         else:
@@ -23,9 +22,9 @@
         #return space.call(space.type(w_self),W_SetIterObject(rdict_w))
         objtype = type(w_self)
         if objtype is W_SetObject:
-            obj = W_SetObject(rdict_w)
+            obj = W_SetObject(space, rdict_w)
         elif objtype is W_FrozensetObject:
-            obj = W_FrozensetObject(rdict_w)
+            obj = W_FrozensetObject(space, rdict_w)
         else:
             itemiterator = space.iter(W_SetIterObject(rdict_w))
             obj = space.call_function(space.type(w_self),itemiterator)
@@ -37,8 +36,8 @@
 class W_FrozensetObject(W_BaseSetObject):
     from pypy.objspace.std.frozensettype import frozenset_typedef as typedef
 
-    def __init__(w_self, setdata):
-        W_BaseSetObject.__init__(w_self, setdata)
+    def __init__(w_self, space, setdata):
+        W_BaseSetObject.__init__(w_self, space, setdata)
         w_self.hash = -1
 
 registerimplementation(W_SetObject)

Modified: pypy/dist/pypy/objspace/std/settype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/settype.py	(original)
+++ pypy/dist/pypy/objspace/std/settype.py	Wed May 10 13:31:10 2006
@@ -1,10 +1,9 @@
 from pypy.interpreter.error import OperationError
 from pypy.objspace.std.objspace import register_all
-from pypy.objspace.std.stdtypedef import StdTypeDef, newmethod
+from pypy.objspace.std.stdtypedef import StdTypeDef, newmethod, no_hash_descr
 from pypy.objspace.std.stdtypedef import StdObjSpaceMultiMethod as SMM
 from pypy.interpreter.gateway import NoneNotWrapped
 from pypy.interpreter import gateway
-from pypy.objspace.std.model import WITHSET
 
 set_add                         = SMM('add', 2)
 set_clear                       = SMM('clear', 1)
@@ -29,7 +28,7 @@
 def descr__new__(space, w_settype, __args__):
     from pypy.objspace.std.setobject import W_SetObject
     w_obj = space.allocate_instance(W_SetObject, w_settype)
-    W_SetObject.__init__(w_obj, None)
+    W_SetObject.__init__(w_obj, space, None)
     return w_obj
 
 set_typedef = StdTypeDef("set",

Added: pypy/dist/pypy/objspace/std/test/test_set.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/objspace/std/test/test_set.py	Wed May 10 13:31:10 2006
@@ -0,0 +1,56 @@
+"""
+The main test for the set implementation is located
+at:
+    pypy-dist/lib-python/modified-2.4.1/test/test_set.py
+    go there and invoke
+    ../../../pypy/bin/py.py test_set.py
+This file just contains some basic tests that make sure, the implementation
+is not too wrong.
+"""
+import autopath
+import py.test
+from pypy.objspace.std.setobject import W_SetObject, W_FrozensetObject
+from pypy.objspace.std.setobject import _initialize_set
+from pypy.objspace.std.setobject import set_intersection__Set_Set
+from pypy.objspace.std.setobject import set_intersection__Set_ANY
+from pypy.objspace.std.setobject import eq__Set_Set
+
+letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+
+class W_SubSetObject(W_SetObject):pass
+
+class TestW_SetObject:
+
+    def setup_method(self, method):
+        self.word = self.space.wrap('simsalabim')
+        self.otherword = self.space.wrap('madagascar')
+        self.letters = self.space.wrap(letters)
+        self.true = self.space.w_True
+        self.false = self.space.w_False
+
+    def test_and(self):
+        s = W_SetObject(self.space, None)
+        _initialize_set(self.space, s, self.word)
+        t0 = W_SetObject(self.space, None)
+        _initialize_set(self.space, t0, self.otherword)
+        t1 = W_FrozensetObject(self.space, None)
+        _initialize_set(self.space, t1, self.otherword)
+        r0 = set_intersection__Set_Set(self.space, s, t0)
+        r1 = set_intersection__Set_Set(self.space, s, t1)
+        assert eq__Set_Set(self.space, r0, r1) == self.true
+        sr = set_intersection__Set_ANY(self.space, s, self.otherword)
+        assert eq__Set_Set(self.space, r0, sr) == self.true
+
+    def test_compare(self):
+        s = W_SetObject(self.space, None)
+        _initialize_set(self.space, s, self.word)
+        t = W_SetObject(self.space, None)
+        _initialize_set(self.space, t, self.word)
+        assert self.space.eq_w(s,t)
+
+class AppTestAppSetTest:
+    def test_subtype(self):
+        class subset(set):pass
+        a = subset()
+        b = a | set('abc')
+        assert type(b) is subset



More information about the Pypy-commit mailing list