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

tismer at codespeak.net tismer at codespeak.net
Sun Jun 22 19:58:39 CEST 2003


Author: tismer
Date: Sun Jun 22 19:58:39 2003
New Revision: 967

Added:
   pypy/trunk/src/pypy/objspace/std/dictobject_app.py
Modified:
   pypy/trunk/src/pypy/objspace/std/dictobject.py
   pypy/trunk/src/pypy/objspace/std/dicttype.py
   pypy/trunk/src/pypy/objspace/std/test/test_dictobject.py
Log:
implemented missing methods, added tests, all test pass, apparently complete

Modified: pypy/trunk/src/pypy/objspace/std/dictobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/dictobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/dictobject.py	Sun Jun 22 19:58:39 2003
@@ -1,8 +1,10 @@
 from pypy.objspace.std.objspace import *
-from dicttype import W_DictType
+from dicttype import W_DictType, _no_object
 from stringobject import W_StringObject
 from pypy.interpreter.extmodule import make_builtin_func
 
+applicationfile = StdObjSpace.AppFile(__name__)
+
 class _NoValueInCell: pass
 
 class Cell:
@@ -157,6 +159,32 @@
             return space.newbool(1)
     else:
         return space.newbool(0)
+
+def dict_clear__Dict(space, w_self):
+    w_self.data = []
+
+def dict_update__Dict_Dict(space, w_self, w_other):
+    w_self.space.gethelper(applicationfile).call("dict_update", [w_self, w_other])
+    
+def dict_popitem__Dict(space, w_self):
+    w_item = w_self.space.gethelper(applicationfile).call("dict_popitem", [w_self])
+    return w_item
+    
+def dict_get__Dict_ANY_ANY(space, w_self, w_key, w_default):
+    w_value = w_self.space.gethelper(applicationfile).call("dict_get", [w_self, w_key, w_default])
+    return w_value
+    
+def dict_setdefault__Dict_ANY_ANY(space, w_self, w_key, w_default):
+    w_value = w_self.space.gethelper(applicationfile).call("dict_setdefault", [w_self, w_key, w_default])
+    return w_value
+
+def dict_pop__Dict_ANY_ANY(space, w_self, w_key, w_default):
+    default = space.unwrap(w_default)
+    if default is _no_object:
+        w_value = w_self.space.gethelper(applicationfile).call("dict_pop", [w_self, w_key])
+    else:
+        w_value = w_self.space.gethelper(applicationfile).call("dict_pop", [w_self, w_key, w_default])
+    return w_value
     
 
 register_all(vars(), W_DictType)

Added: pypy/trunk/src/pypy/objspace/std/dictobject_app.py
==============================================================================
--- (empty file)
+++ pypy/trunk/src/pypy/objspace/std/dictobject_app.py	Sun Jun 22 19:58:39 2003
@@ -0,0 +1,32 @@
+#empty
+
+def dict_update(d,o):
+    for k in o.keys():
+        d[k] = o[k]
+
+def dict_popitem(d):
+    k = d.keys()[0]
+    v = d[k]
+    del d[k]
+    return k, v
+
+def dict_get(d, k, v=None):
+    if d.has_key(k):
+        return d[k]
+    return v
+
+def dict_setdefault(d, k, v):
+    if d.has_key(k):
+        return d[k]
+    d[k] = v
+    return v
+
+class __unique: pass
+
+def dict_pop(d, k, v=__unique):
+    if d.has_key(k):
+        v = d[k]
+        del d[k]
+    if v is __unique:
+        raise KeyError, k
+    return v

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	Sun Jun 22 19:58:39 2003
@@ -1,13 +1,24 @@
 from pypy.objspace.std.objspace import *
 from typeobject import W_TypeObject
 
+class _no_object: pass
 
 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_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',        3, defaults=(_no_object,))
+    dict_popitem    = MultiMethod('popitem',    1)
+    dict_setdefault = MultiMethod('setdefault', 3)
+    dict_update     = MultiMethod('update',     2)
+    dict_iteritems  = MultiMethod('iteritems',  1)
+    dict_iterkeys   = MultiMethod('iterkeys',   1)
+    dict_itervalues = MultiMethod('itervalues', 1)
+    

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	Sun Jun 22 19:58:39 2003
@@ -78,6 +78,105 @@
         self.assertNotEqual_w(wd1, wd4)
         wd5 = self.space.newdict([(w3, w3)])
         self.assertNotEqual_w(wd1, wd4)
+
+class Test_DictObject(test.AppTestCase):
+    
+        
+    def test_clear(self):
+        self.d = {1:2, 3:4}
+        self.d.clear()
+        self.assertEqual(len(self.d), 0)
+                         
+    def test_copy(self):
+        self.d = {1:2, 3:4}
+        dd = self.d.copy()
+        self.assertEqual(self.d, dd)
+        self.failIf(self.d is dd)
+        
+    def test_get(self):
+        self.d = {1:2, 3:4}
+        self.assertEqual(self.d.get(1), 2)
+        self.assertEqual(self.d.get(1,44), 2)
+        self.assertEqual(self.d.get(33), None)
+        self.assertEqual(self.d.get(33,44), 44)
+
+    def test_pop(self):
+        self.d = {1:2, 3:4}
+        dd = self.d.copy()
+        result = dd.pop(1)
+        self.assertEqual(result, 2)
+        self.assertEqual(len(dd), 1)
+        dd = self.d.copy()
+        result = dd.pop(1, 44)
+        self.assertEqual(result, 2)
+        self.assertEqual(len(dd), 1)
+        result = dd.pop(1, 44)
+        self.assertEqual(result, 44)
+        self.assertEqual(len(dd), 1)
+        self.assertRaises(KeyError, dd.pop, 33)
+    
+    def test_has_key(self):
+        self.d = {1:2, 3:4}
+        self.failUnless(self.d.has_key(1))
+        self.failIf(self.d.has_key(33))
+    
+    def test_items(self):
+        self.d = {1:2, 3:4}
+        its = self.d.items()
+        its.sort()
+        self.assertEqual(its, [(1,2),(3,4)])
+    
+    def notyet_test_iteritems(self):
+        pass
+    
+    def notyet_test_iterkeys(self):
+        pass
+    
+    def notyet_test_itervalues(self):
+        pass
+    
+    def test_keys(self):
+        self.d = {1:2, 3:4}
+        kys = self.d.keys()
+        kys.sort()
+        self.assertEqual(kys, [1,3])
+    
+    def test_popitem(self):
+        self.d = {1:2, 3:4}
+        it = self.d.popitem()
+        self.assertEqual(len(self.d), 1)
+        self.failUnless(it==(1,2) or it==(3,4))
+        it1 = self.d.popitem()
+        self.assertEqual(len(self.d), 0)
+        self.failUnless((it!=it1) and (it1==(1,2) or it1==(3,4)))
+    
+    def test_setdefault(self):
+        self.d = {1:2, 3:4}
+        dd = self.d.copy()
+        x = dd.setdefault(1, 99)
+        self.assertEqual(self.d, dd)
+        self.assertEqual(x, 2)
+        x = dd.setdefault(33, 99)
+        self.d[33] = 99
+        self.assertEqual(self.d, dd)
+        self.assertEqual(x, 99)
+    
+    def test_update(self):
+        self.d = {1:2, 3:4}
+        dd = self.d.copy()
+        self.d.update({})
+        self.assertEqual(self.d, dd)
+        self.d.update({3:5, 6:7})
+        self.assertEqual(self.d, {1:2, 3:5, 6:7})
+    
+    def test_values(self):
+        self.d = {1:2, 3:4}
+        vals = self.d.values()
+        vals.sort()
+        self.assertEqual(vals, [2,4])
+
+    
+
         
                                  
 if __name__ == '__main__':


More information about the Pypy-commit mailing list