[pypy-svn] r25404 - in pypy/dist/pypy/objspace/constraint: . test

auc at codespeak.net auc at codespeak.net
Wed Apr 5 18:43:43 CEST 2006


Author: auc
Date: Wed Apr  5 18:43:42 2006
New Revision: 25404

Added:
   pypy/dist/pypy/objspace/constraint/
      - copied from r25396, pypy/dist/pypy/objspace/logic/
   pypy/dist/pypy/objspace/constraint/distributor.py
      - copied unchanged from r25399, pypy/dist/pypy/objspace/logic/distributor.py
   pypy/dist/pypy/objspace/constraint/test/test_fd.py
Modified:
   pypy/dist/pypy/objspace/constraint/domain.py
Log:
finite domain at interp level


Modified: pypy/dist/pypy/objspace/constraint/domain.py
==============================================================================
--- pypy/dist/pypy/objspace/logic/domain.py	(original)
+++ pypy/dist/pypy/objspace/constraint/domain.py	Wed Apr  5 18:43:42 2006
@@ -1,7 +1,8 @@
 from pypy.interpreter.error import OperationError
 
-from pypy.interpreter import baseobjspace, gateway
+from pypy.interpreter import baseobjspace, typedef
 from pypy.interpreter.baseobjspace import Wrappable
+from pypy.interpreter.gateway import interp2app
 
 from pypy.objspace.std.objspace import W_Object
 
@@ -34,54 +35,54 @@
         if self.size() == 0:
             raise ConsistencyFailure()
 
-W_AbstractDomain.typedef = TypeDef("W_AbstractDomain",
-    reset_flags = interp2app(W_AbstractDomain.w_reset_flags)
+W_AbstractDomain.typedef = typedef.TypeDef("W_AbstractDomain",
+    reset_flags = interp2app(W_AbstractDomain.w_reset_flags),
     has_changed = interp2app(W_AbstractDomain.w_has_changed))
 
-class W_FiniteDomain(AbstractDomain):
+class W_FiniteDomain(W_AbstractDomain):
     """
     Variable Domain with a finite set of possible values
     """
 
-    def __init__(self, values):
+    def __init__(self, space, w_values):
         """values is a list of values in the domain
         This class uses a dictionnary to make sure that there are
         no duplicate values"""
-        AbstractDomain.__init__(self)
-        self.set_values(values)
+        W_AbstractDomain.__init__(self, space)
+        self.set_values(w_values)
 
-    def set_values(self, values):
-        self._values = set(values)
+    def set_values(self, w_values):
+        self._values = set(w_values.wrappeditems)
         
-    def w_remove_value(self, value):
+    def w_remove_value(self, w_value):
         """Remove value of domain and check for consistency"""
-        self._values.remove(value)
+        self._values.remove(w_value)
         self._value_removed()
 
-    def w_remove_values(self, values):
+    def w_remove_values(self, w_values):
         """Remove values of domain and check for consistency"""
-        if values:
-            for val in values :
+        if w_values:
+            for val in w_values :
                 self._values.remove(val)
             self._value_removed()
-    __delitem__ = remove_value
+    __delitem__ = w_remove_value
     
     def w_size(self):
         """computes the size of a finite domain"""
-        return len(self._values)
-    __len__ = size
+        return self._space.newint(len(self._values))
+    __len__ = w_size
     
     def w_get_values(self):
         """return all the values in the domain
            in an indexable sequence"""
-        return list(self._values)
+        return self._space.newlist([x for x in self._values])
 
     def __iter__(self):
         return iter(self._values)
     
     def w_copy(self):
         """clone the domain"""
-        return FiniteDomain(self)
+        return W_FiniteDomain(self, self._space)
     
     def __repr__(self):
         return '<FD %s>' % str(self.get_values())
@@ -97,5 +98,9 @@
         if other is None: return self.get_values()
         return self._values & other._values
 
-W_FiniteDomain.typedef = TypeDef("W_FiniteDomain",
-    
+W_FiniteDomain.typedef = typedef.TypeDef("W_FiniteDomain",
+    remove_value = interp2app(W_FiniteDomain.w_remove_value),
+    remove_values = interp2app(W_FiniteDomain.w_remove_values),
+    get_values = interp2app(W_FiniteDomain.w_get_values),
+    copy = interp2app(W_FiniteDomain.w_copy),
+    size = interp2app(W_FiniteDomain.w_size))

Added: pypy/dist/pypy/objspace/constraint/test/test_fd.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/objspace/constraint/test/test_fd.py	Wed Apr  5 18:43:42 2006
@@ -0,0 +1,14 @@
+from pypy.conftest import gettestobjspace
+
+class UnificationFailure(Exception):  pass
+
+class AppTest_FD(object):
+
+    def setup_class(cls):
+        cls.space = gettestobjspace('logic')
+
+    def test_instantiate(self):
+        fd = FiniteDomain([1, 2, 3])
+        assert fd.size() == 3
+        assert set(fd.get_values()) == set([1, 2, 3])
+        #fd2 = fd.copy()



More information about the Pypy-commit mailing list