[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