summaryrefslogtreecommitdiffstats
path: root/Lib/test/support.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2012-07-29 14:38:45 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2012-07-29 14:38:45 (GMT)
commit2b16844326f9a88f7c5daf16abfb04cee70f02bc (patch)
tree87c57029fd16e884bd7f1a31cb474dd0bc661925 /Lib/test/support.py
parent5ee9892406c4299826f553b6b73c046229c6040c (diff)
parent33f799725cb9ae21f0fed87eea4b13d7611ceeee (diff)
downloadcpython-2b16844326f9a88f7c5daf16abfb04cee70f02bc.zip
cpython-2b16844326f9a88f7c5daf16abfb04cee70f02bc.tar.gz
cpython-2b16844326f9a88f7c5daf16abfb04cee70f02bc.tar.bz2
Issue #15467: Merge 3.2
Diffstat (limited to 'Lib/test/support.py')
-rw-r--r--Lib/test/support.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/Lib/test/support.py b/Lib/test/support.py
index 2d7f70d..f5f574e 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -25,6 +25,7 @@ import fnmatch
import logging.handlers
import struct
import tempfile
+import _testcapi
try:
import _thread, threading
@@ -1082,6 +1083,33 @@ def python_is_optimized():
return final_opt != '' and final_opt != '-O0'
+_header = 'nP'
+_align = '0n'
+if hasattr(sys, "gettotalrefcount"):
+ _header = '2P' + _header
+ _align = '0P'
+_vheader = _header + 'n'
+
+def calcobjsize(fmt):
+ return struct.calcsize(_header + fmt + _align)
+
+def calcvobjsize(fmt):
+ return struct.calcsize(_vheader + fmt + _align)
+
+
+_TPFLAGS_HAVE_GC = 1<<14
+_TPFLAGS_HEAPTYPE = 1<<9
+
+def check_sizeof(test, o, size):
+ result = sys.getsizeof(o)
+ # add GC header size
+ if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\
+ ((type(o) != type) and (type(o).__flags__ & _TPFLAGS_HAVE_GC))):
+ size += _testcapi.SIZEOF_PYGC_HEAD
+ msg = 'wrong size for %s: got %d, expected %d' \
+ % (type(o), result, size)
+ test.assertEqual(result, size, msg)
+
#=======================================================================
# Decorator for running a function in a different locale, correctly resetting
# it afterwards.