[pypy-svn] r31354 - in pypy/dist/pypy/objspace/std: . test
benyoung at codespeak.net
benyoung at codespeak.net
Thu Aug 17 09:23:58 CEST 2006
Author: benyoung
Date: Thu Aug 17 09:23:43 2006
New Revision: 31354
Modified:
pypy/dist/pypy/objspace/std/dictmultiobject.py
pypy/dist/pypy/objspace/std/test/test_dictmultiobject.py
Log:
Some fixes for mwhs changes + more tests
Modified: pypy/dist/pypy/objspace/std/dictmultiobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/dictmultiobject.py (original)
+++ pypy/dist/pypy/objspace/std/dictmultiobject.py Thu Aug 17 09:23:43 2006
@@ -214,18 +214,18 @@
return self.setitem_str(w_key, w_value)
def setitem_str(self, w_key, w_value):
- print w_key, w_value
- if self.valid == 4:
- return self._convert_to_sdict(w_key, w_value)
entry = self._lookup(self.space.str_w(w_key))
if entry.w_value is None:
+ if self.valid == 4:
+ return self._convert_to_sdict(w_key, w_value)
self.valid += 1
entry.w_value = w_value
return self
def delitem(self, w_key):
space = self.space
- if space.is_w(space.type(w_key), space.w_str):
+ w_key_type = space.type(w_key)
+ if space.is_w(w_key_type, space.w_str):
entry = self._lookup(space.str_w(w_key))
if entry.w_value is not None:
for i in range(self.entries.index(entry), self.valid):
@@ -238,7 +238,7 @@
return self
else:
raise KeyError
- elif self._is_sane_hash(space.type(w_key)):
+ elif self._is_sane_hash(w_key_type):
raise KeyError
else:
return self._convert_to_rdict().delitem(w_key)
@@ -271,51 +271,12 @@
return [(self.space.wrap(e.key), e.w_value)
for e in [self.entries[i] for i in range(self.valid)]]
-class RDictImplementation(DictImplementation):
- def __init__(self, space):
- self.space = space
- self.content = r_dict(space.eq_w, space.hash_w)
-
- def __repr__(self):
- return "%s<%s>" % (self.__class__.__name__, self.content)
-
- def setitem(self, w_key, w_value):
- self.content[w_key] = w_value
- return self
- setitem_str = setitem
- def delitem(self, w_key):
- del self.content[w_key]
- if self.content:
- return self
- else:
- return self.space.emptydictimpl
-
- def length(self):
- return len(self.content)
- def get(self, w_lookup):
- return self.content.get(w_lookup, None)
-
- def iteritems(self):
- return self.content.iteritems()
- def iterkeys(self):
- return self.content.iterkeys()
- def itervalues(self):
- return self.content.itervalues()
-
- def keys(self):
- return self.content.keys()
- def values(self):
- return self.content.values()
- def items(self):
- return self.content.items()
-
class StrDictImplementation(DictImplementation):
def __init__(self, space, w_key, w_value):
self.space = space
self.content = {space.str_w(w_key): w_value}
def setitem(self, w_key, w_value):
- print 's', w_key, w_value
space = self.space
if space.is_w(space.type(w_key), space.w_str):
self.content[space.str_w(w_key)] = w_value
@@ -329,13 +290,14 @@
def delitem(self, w_key):
space = self.space
- if space.is_w(space.type(w_key), space.w_str):
+ w_key_type = space.type(w_key)
+ if space.is_w(w_key_type, space.w_str):
del self.content[space.str_w(w_key)]
if self.content:
return self
else:
return space.emptydictimpl
- elif self._is_sane_hash(space.type(w_key)):
+ elif self._is_sane_hash(w_key_type):
raise KeyError
else:
return self._as_rdict().delitem(w_key)
@@ -389,6 +351,43 @@
newimpl.setitem(self.space.wrap(k), w_v)
return newimpl
+class RDictImplementation(DictImplementation):
+ def __init__(self, space):
+ self.space = space
+ self.content = r_dict(space.eq_w, space.hash_w)
+
+ def __repr__(self):
+ return "%s<%s>" % (self.__class__.__name__, self.content)
+
+ def setitem(self, w_key, w_value):
+ self.content[w_key] = w_value
+ return self
+ setitem_str = setitem
+ def delitem(self, w_key):
+ del self.content[w_key]
+ if self.content:
+ return self
+ else:
+ return self.space.emptydictimpl
+
+ def length(self):
+ return len(self.content)
+ def get(self, w_lookup):
+ return self.content.get(w_lookup, None)
+
+ def iteritems(self):
+ return self.content.iteritems()
+ def iterkeys(self):
+ return self.content.iterkeys()
+ def itervalues(self):
+ return self.content.itervalues()
+
+ def keys(self):
+ return self.content.keys()
+ def values(self):
+ return self.content.values()
+ def items(self):
+ return self.content.items()
import time, py
@@ -482,7 +481,7 @@
self.content[w_key] = w_value
self.info.maxcontents = max(self.info.maxcontents, len(self.content))
return self
- def setitem(self, w_key, w_value):
+ def setitem_str(self, w_key, w_value):
self.info.setitem_strs += 1
return self.setitem(w_key, w_value)
def delitem(self, w_key):
@@ -499,10 +498,10 @@
def length(self):
self.info.lengths += 1
return len(self.content)
- def get(self, w_lookup, w_default):
+ def get(self, w_lookup):
self.info.gets += 1
self._read(w_lookup)
- return self.content.get(w_lookup, w_default)
+ return self.content.get(w_lookup, None)
def iteritems(self):
self.info.iteritems += 1
Modified: pypy/dist/pypy/objspace/std/test/test_dictmultiobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/test/test_dictmultiobject.py (original)
+++ pypy/dist/pypy/objspace/std/test/test_dictmultiobject.py Thu Aug 17 09:23:43 2006
@@ -2,7 +2,7 @@
from pypy.objspace.std.dictmultiobject import \
W_DictMultiObject, setitem__DictMulti_ANY_ANY, getitem__DictMulti_ANY, \
EmptyDictImplementation, RDictImplementation, StrDictImplementation, \
- SmallDictImplementation, SmallStrDictImplementation
+ SmallDictImplementation, SmallStrDictImplementation, MeasuringDictImplementation
from pypy.conftest import gettestobjspace
from pypy.objspace.std.test import test_dictobject
@@ -22,6 +22,9 @@
def wrap(self, obj):
return obj
+ def isinstance(self, obj, klass):
+ return isinstance(obj, klass)
+
class TestDictImplementation:
def setup_method(self,method):
self.space = FakeSpace()
@@ -42,11 +45,13 @@
class TestRDictImplementation:
ImplementionClass = RDictImplementation
+ DevolvedClass = RDictImplementation
+ EmptyClass = EmptyDictImplementation
def setup_method(self,method):
self.space = FakeSpace()
- self.space.emptydictimpl = EmptyDictImplementation(self.space)
self.space.DictObjectCls = W_DictMultiObject
+ self.space.emptydictimpl = EmptyDictImplementation(self.space)
self.string = self.space.str_w("fish")
self.string2 = self.space.str_w("fish2")
self.impl = self.get_impl()
@@ -64,7 +69,7 @@
newimpl = self.impl.delitem(self.string)
assert newimpl is self.impl
newimpl = self.impl.delitem(self.string2)
- assert newimpl is self.space.emptydictimpl
+ assert isinstance(newimpl, self.EmptyClass)
def test_keys(self):
self.impl.setitem(self.string, 1000)
@@ -92,7 +97,7 @@
for x in xrange(100):
impl = impl.setitem(self.space.str_w(str(x)), x)
impl = impl.setitem(x, x)
- assert isinstance(impl, RDictImplementation)
+ assert isinstance(impl, self.DevolvedClass)
class TestStrDictImplementation(TestRDictImplementation):
ImplementionClass = StrDictImplementation
@@ -106,9 +111,13 @@
def get_impl(self):
return self.ImplementionClass(self.space, self.string, self.string2)
+class TestMeasuringDictImplementation(TestRDictImplementation):
+ ImplementionClass = MeasuringDictImplementation
+ DevolvedClass = MeasuringDictImplementation
+ EmptyClass = MeasuringDictImplementation
+
class TestSmallStrDictImplementation(TestRDictImplementation):
ImplementionClass = SmallStrDictImplementation
def get_impl(self):
return self.ImplementionClass(self.space, self.string, self.string2)
-
More information about the Pypy-commit
mailing list