Author: Carl Friedrich Bolz-Tereick <[email protected]>
Branch: mapdict-size-limit
Changeset: r93705:cad94dfb7a45
Date: 2018-01-25 18:37 +0100
http://bitbucket.org/pypy/pypy/changeset/cad94dfb7a45/
Log: test mixing of slots and dict items, fix translation
diff --git a/pypy/objspace/std/mapdict.py b/pypy/objspace/std/mapdict.py
--- a/pypy/objspace/std/mapdict.py
+++ b/pypy/objspace/std/mapdict.py
@@ -281,6 +281,7 @@
if index == DICT and obj._get_mapdict_map().length() >=
LIMIT_MAP_ATTRIBUTES:
space = self.space
w_dict = obj.getdict(space)
+ assert isinstance(w_dict, W_DictMultiObject)
strategy = w_dict.get_strategy()
assert isinstance(strategy, MapDictStrategy)
strategy.switch_to_text_strategy(w_dict)
diff --git a/pypy/objspace/std/test/test_mapdict.py
b/pypy/objspace/std/test/test_mapdict.py
--- a/pypy/objspace/std/test/test_mapdict.py
+++ b/pypy/objspace/std/test/test_mapdict.py
@@ -112,15 +112,21 @@
assert obj2.map is obj.map
def test_add_attribute_limit():
- cls = Class()
- obj = cls.instantiate()
- # test that eventually attributes are really just stored in a dictionary
- for i in range(1000):
- obj.setdictvalue(space, str(i), i)
- assert len(obj.storage) == 1 # moved to dict (which is the remaining item)
+ for numslots in [0, 10, 100]:
+ cls = Class()
+ obj = cls.instantiate()
+ for i in range(numslots):
+ obj.setslotvalue(i, i) # some extra slots too, sometimes
+ # test that eventually attributes are really just stored in a
dictionary
+ for i in range(1000):
+ obj.setdictvalue(space, str(i), i)
+ # moved to dict (which is the remaining non-slot item)
+ assert len(obj.storage) == 1 + numslots
- for i in range(1000):
- assert obj.getdictvalue(space, str(i)) == i
+ for i in range(1000):
+ assert obj.getdictvalue(space, str(i)) == i
+ for i in range(numslots):
+ assert obj.getslotvalue(i) == i # check extra slots
# this doesn't happen with slots
cls = Class()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit