Skip to content

Commit

Permalink
Fix the sizeof test for dicts with shared keys. (GH-4311) (#4312)
Browse files Browse the repository at this point in the history
By accident the size of the empty dict keys object matched the
size of values array.
(cherry picked from commit 39a156c)
  • Loading branch information
miss-islington authored and serhiy-storchaka committed Nov 7, 2017
1 parent ef6f224 commit a5dca7d
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions Lib/test/test_sys.py
Expand Up @@ -1092,20 +1092,25 @@ def delx(self): del self.__x
fmt += '3n2P'
s = vsize(fmt)
check(int, s)
# class
s = vsize(fmt + # PyTypeObject
'3P' # PyAsyncMethods
'36P' # PyNumberMethods
'3P' # PyMappingMethods
'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
Expand Down

0 comments on commit a5dca7d

Please sign in to comment.