[pypy-svn] r15703 - in pypy/dist/pypy/objspace/std: . test

pedronis at codespeak.net pedronis at codespeak.net
Fri Aug 5 18:46:34 CEST 2005


Author: pedronis
Date: Fri Aug  5 18:46:32 2005
New Revision: 15703

Modified:
   pypy/dist/pypy/objspace/std/dicttype.py
   pypy/dist/pypy/objspace/std/test/test_dictobject.py
Log:
dict.update now accepts iterables or no arguments at all



Modified: pypy/dist/pypy/objspace/std/dicttype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/dicttype.py	(original)
+++ pypy/dist/pypy/objspace/std/dicttype.py	Fri Aug  5 18:46:32 2005
@@ -11,7 +11,7 @@
 dict_pop        = MultiMethod('pop',           2, w_varargs=True)
 dict_popitem    = MultiMethod('popitem',       1)
 dict_setdefault = MultiMethod('setdefault',    3, defaults=(None,))
-dict_update     = MultiMethod('update',        2)
+dict_update     = MultiMethod('update',        2, defaults=((),))
 dict_iteritems  = MultiMethod('iteritems',     1)
 dict_iterkeys   = MultiMethod('iterkeys',      1)
 dict_itervalues = MultiMethod('itervalues',    1)
@@ -24,8 +24,12 @@
 app = gateway.applevel('''
 
     def update(d, o):
-        for k in o.keys():
-            d[k] = o[k]
+        if hasattr(o, 'keys'):
+            for k in o.keys():
+                d[k] = o[k]
+        else:
+            for k,v in o:
+                d[k] = v
 
     def popitem(d):
         k = d.keys()

Modified: pypy/dist/pypy/objspace/std/test/test_dictobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/test/test_dictobject.py	(original)
+++ pypy/dist/pypy/objspace/std/test/test_dictobject.py	Fri Aug  5 18:46:32 2005
@@ -223,6 +223,18 @@
         assert d == dd
         d.update({3:5, 6:7})
         assert d == {1:2, 3:5, 6:7}
+
+    def test_update_iterable(self):
+        d = {}
+        d.update((('a',1),))
+        assert d == {'a': 1}
+        d.update([('a',2), ('c',3)])
+        assert d == {'a': 2, 'c': 3}
+
+    def test_update_nop(self):
+        d = {}
+        d.update()
+        assert d == {}
     
     def test_values(self):
         d = {1:2, 3:4}



More information about the Pypy-commit mailing list