Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit