[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