[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