[pypy-svn] rev 2532 - in pypy/trunk/src/pypy/objspace/std: . test

jacob at codespeak.net jacob at codespeak.net
Thu Dec 18 18:47:08 CET 2003


Author: jacob
Date: Thu Dec 18 18:47:08 2003
New Revision: 2532

Modified:
   pypy/trunk/src/pypy/objspace/std/dicttype.py
   pypy/trunk/src/pypy/objspace/std/test/test_dictobject.py
Log:
Added fromkeys and tests for fromkeys.


Modified: pypy/trunk/src/pypy/objspace/std/dicttype.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/dicttype.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/dicttype.py	Thu Dec 18 18:47:08 2003
@@ -5,25 +5,27 @@
 from pypy.objspace.std.objspace import *
 from pypy.interpreter import gateway
 from typeobject import W_TypeObject
+from listobject import W_ListObject
 
 class W_DictType(W_TypeObject):
 
     typename = 'dict'
 
-    dict_copy       = MultiMethod('copy',       1)
-    dict_items      = MultiMethod('items',      1)
-    dict_keys       = MultiMethod('keys',       1)
-    dict_values     = MultiMethod('values',     1)
-    dict_has_key    = MultiMethod('has_key',    2)
-    dict_clear      = MultiMethod('clear',      1)
-    dict_get        = MultiMethod('get',        3, defaults=(None,))
-    dict_pop        = MultiMethod('pop',        2, varargs=True)
-    dict_popitem    = MultiMethod('popitem',    1)
-    dict_setdefault = MultiMethod('setdefault', 3, defaults=(None,))
-    dict_update     = MultiMethod('update',     2)
-    dict_iteritems  = MultiMethod('iteritems',  1)
-    dict_iterkeys   = MultiMethod('iterkeys',   1)
-    dict_itervalues = MultiMethod('itervalues', 1)
+    dict_copy       = MultiMethod('copy',          1)
+    dict_items      = MultiMethod('items',         1)
+    dict_keys       = MultiMethod('keys',          1)
+    dict_values     = MultiMethod('values',        1)
+    dict_has_key    = MultiMethod('has_key',       2)
+    dict_clear      = MultiMethod('clear',         1)
+    dict_get        = MultiMethod('get',           3, defaults=(None,))
+    dict_pop        = MultiMethod('pop',           2, varargs=True)
+    dict_popitem    = MultiMethod('popitem',       1)
+    dict_setdefault = MultiMethod('setdefault',    3, defaults=(None,))
+    dict_update     = MultiMethod('update',        2)
+    dict_iteritems  = MultiMethod('iteritems',     1)
+    dict_iterkeys   = MultiMethod('iterkeys',      1)
+    dict_itervalues = MultiMethod('itervalues',    1)
+    dict_fromkeys   = MultiMethod('fromkeys',      2, varargs=True)
     # This can return when multimethods have been fixed
     #dict_str        = StdObjSpace.str
 
@@ -83,6 +85,16 @@
 def app_dict_itervalues__ANY(d):
     return iter(d.values())
 
+def app_dict_fromkeys__ANY_List(d, seq, value):
+    d = {}
+    if value:
+        value = value[0]
+    else:
+        value = None
+    for item in seq:
+        d[item] = value
+    return d
+
 # This can return when multimethods have been fixed
 """
 def app_dict_str__ANY(d):

Modified: pypy/trunk/src/pypy/objspace/std/test/test_dictobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/test/test_dictobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/test/test_dictobject.py	Thu Dec 18 18:47:08 2003
@@ -339,5 +339,12 @@
         except (TypeError, ValueError): pass
         else: self.fail("dict([[1,2,3]]) should raise!")
 
+    def test_fromkeys(self):
+        self.assertEquals({}.fromkeys([1, 2], 1), {1: 1, 2: 1})
+        self.assertEquals({}.fromkeys([1, 2]), {1: None, 2: None})
+        self.assertEquals({}.fromkeys([]), {})
+        self.assertEquals({1: 0, 2: 0, 3: 0}.fromkeys([1, '1'], 'j'),
+                          {1: 'j', '1': 'j'})
+
 if __name__ == '__main__':
     test.main()


More information about the Pypy-commit mailing list