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

Reply via email to