[pypy-commit] pypy py3k: implement the - operator between dict views and sets
antocuni
noreply at buildbot.pypy.org
Tue Oct 2 16:01:33 CEST 2012
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: py3k
Changeset: r57715:3cc63ec8ea3d
Date: 2012-10-02 11:44 +0200
http://bitbucket.org/pypy/pypy/changeset/3cc63ec8ea3d/
Log: implement the - operator between dict views and sets
diff --git a/pypy/objspace/std/dictmultiobject.py b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -1029,6 +1029,14 @@
xor__DictViewItems_DictViewItems = xor__DictViewKeys_DictViewKeys
xor__DictViewItems_settypedef = xor__DictViewKeys_DictViewKeys
+def sub__DictViewKeys_DictViewKeys(space, w_dictview, w_otherview):
+ w_set = space.call_function(space.w_set, w_dictview)
+ space.call_method(w_set, "difference_update", w_otherview)
+ return w_set
+sub__DictViewKeys_settypedef = sub__DictViewKeys_DictViewKeys
+sub__DictViewItems_DictViewItems = sub__DictViewKeys_DictViewKeys
+sub__DictViewItems_settypedef = sub__DictViewKeys_DictViewKeys
+
# ____________________________________________________________
from pypy.objspace.std import dicttype
diff --git a/pypy/objspace/std/test/test_dictmultiobject.py b/pypy/objspace/std/test/test_dictmultiobject.py
--- a/pypy/objspace/std/test/test_dictmultiobject.py
+++ b/pypy/objspace/std/test/test_dictmultiobject.py
@@ -745,6 +745,13 @@
assert d1.keys() ^ set(d2.keys()) == set('ac')
assert d1.keys() ^ set(d3.keys()) == set('abde')
+ assert d1.keys() - d1.keys() == set()
+ assert d1.keys() - d2.keys() == set('a')
+ assert d1.keys() - d3.keys() == set('ab')
+ assert d1.keys() - set(d1.keys()) == set()
+ assert d1.keys() - set(d2.keys()) == set('a')
+ assert d1.keys() - set(d3.keys()) == set('ab')
+
def test_items_set_operations(self):
d1 = {'a': 1, 'b': 2}
d2 = {'a': 2, 'b': 2}
@@ -773,6 +780,10 @@
assert (d1.items() ^ d3.items() ==
set([('a', 1), ('b', 2), ('d', 4), ('e', 5)]))
+ assert d1.items() - d1.items() == set()
+ assert d1.items() - d2.items() == set([('a', 1)])
+ assert d1.items() - d3.items() == set([('a', 1), ('b', 2)])
+
class AppTestStrategies(object):
def setup_class(cls):
More information about the pypy-commit
mailing list