$OpenBSD: patch-Lib_test_test_support_py,v 1.1 2008/08/06 03:23:31 djm Exp $ --- Lib/test/test_support.py.orig Sun Jan 27 12:24:44 2008 +++ Lib/test/test_support.py Tue Aug 5 18:18:52 2008 @@ -33,6 +33,7 @@ verbose = 1 # Flag set to 0 by regrtest.p use_resources = None # Flag set to [] by regrtest.py max_memuse = 0 # Disable bigmem tests (they will still be run with # small sizes, to make sure they work.) +real_max_memuse = 0 # _original_stdout is meant to hold stdout at the time regrtest began. # This may be "the real" stdout, or IDLE's emulation of stdout, or whatever. @@ -323,6 +324,7 @@ def run_with_locale(catstr, *locales): _1M = 1024*1024 _1G = 1024 * _1M _2G = 2 * _1G +_4G = 4 * _1G # Hack to get at the maximum value an internal index can take. class _Dummy: @@ -333,6 +335,7 @@ MAX_Py_ssize_t = _Dummy()[:] def set_memlimit(limit): import re global max_memuse + global real_max_memuse sizes = { 'k': 1024, 'm': _1M, @@ -344,6 +347,7 @@ def set_memlimit(limit): if m is None: raise ValueError('Invalid memory limit %r' % (limit,)) memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()]) + real_max_memuse = memlimit if memlimit > MAX_Py_ssize_t: memlimit = MAX_Py_ssize_t if memlimit < _2G - 1: @@ -384,6 +388,27 @@ def bigmemtest(minsize, memuse, overhead=5*_1M): maxsize = max(maxsize - 50 * _1M, minsize) return f(self, maxsize) wrapper.minsize = minsize + wrapper.memuse = memuse + wrapper.overhead = overhead + return wrapper + return decorator + +def precisionbigmemtest(size, memuse, overhead=5*_1M): + def decorator(f): + def wrapper(self): + if not real_max_memuse: + maxsize = 5147 + else: + maxsize = size + + if real_max_memuse and real_max_memuse < maxsize * memuse: + if verbose: + sys.stderr.write("Skipping %s because of memory " + "constraint\n" % (f.__name__,)) + return + + return f(self, maxsize) + wrapper.size = size wrapper.memuse = memuse wrapper.overhead = overhead return wrapper