]> granicus.if.org Git - python/commitdiff
Fix the sizeof test for dicts with shared keys. (GH-4311) (#4312)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 7 Nov 2017 13:59:33 +0000 (05:59 -0800)
committerSerhiy Storchaka <storchaka@gmail.com>
Tue, 7 Nov 2017 13:59:33 +0000 (15:59 +0200)
By accident the size of the empty dict keys object matched the
size of values array.
(cherry picked from commit 39a156c505b7dc431a0a4cffcbefca577848db38)

Lib/test/test_sys.py

index e151f493d4e36c95961b80020b2f52767056a0ff..d49e4ab65193e0ead7bdc597088180276d986d6c 100644 (file)
@@ -1092,6 +1092,7 @@ class SizeofTest(unittest.TestCase):
             fmt += '3n2P'
         s = vsize(fmt)
         check(int, s)
+        # class
         s = vsize(fmt +                 # PyTypeObject
                   '3P'                  # PyAsyncMethods
                   '36P'                 # PyNumberMethods
@@ -1099,13 +1100,17 @@ class SizeofTest(unittest.TestCase):
                   '10P'                 # PySequenceMethods
                   '2P'                  # PyBufferProcs
                   '4P')
-        # Separate block for PyDictKeysObject with 8 keys and 5 entries
-        s += calcsize("2nP2n") + 8 + 5*calcsize("n2P")
-        # class
         class newstyleclass(object): pass
-        check(newstyleclass, s)
+        # Separate block for PyDictKeysObject with 8 keys and 5 entries
+        check(newstyleclass, s + calcsize("2nP2n0P") + 8 + 5*calcsize("n2P"))
+        # dict with shared keys
+        check(newstyleclass().__dict__, size('nQ2P') + 5*self.P)
+        o = newstyleclass()
+        o.a = o.b = o.c = o.d = o.e = o.f = o.g = o.h = 1
+        # Separate block for PyDictKeysObject with 16 keys and 10 entries
+        check(newstyleclass, s + calcsize("2nP2n0P") + 16 + 10*calcsize("n2P"))
         # dict with shared keys
-        check(newstyleclass().__dict__, size('nQ2P' + '2nP2n'))
+        check(newstyleclass().__dict__, size('nQ2P') + 10*self.P)
         # unicode
         # each tuple contains a string and its expected character size
         # don't put any static strings here, as they may contain