mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Make some tests more frienly to MemoryError.
Free memory, unlock hanging threads.
This commit is contained in:
parent
d7aa5248fb
commit
9db55004a1
6 changed files with 43 additions and 16 deletions
|
@ -30,15 +30,25 @@ class Test_OpenGL_libs(unittest.TestCase):
|
||||||
|
|
||||||
cls.gl = cls.glu = cls.gle = None
|
cls.gl = cls.glu = cls.gle = None
|
||||||
if lib_gl:
|
if lib_gl:
|
||||||
|
try:
|
||||||
cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
|
cls.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
if lib_glu:
|
if lib_glu:
|
||||||
|
try:
|
||||||
cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
|
cls.glu = CDLL(lib_glu, RTLD_GLOBAL)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
if lib_gle:
|
if lib_gle:
|
||||||
try:
|
try:
|
||||||
cls.gle = CDLL(lib_gle)
|
cls.gle = CDLL(lib_gle)
|
||||||
except OSError:
|
except OSError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
cls.gl = cls.glu = cls.gle = None
|
||||||
|
|
||||||
def test_gl(self):
|
def test_gl(self):
|
||||||
if self.gl is None:
|
if self.gl is None:
|
||||||
self.skipTest('lib_gl not available')
|
self.skipTest('lib_gl not available')
|
||||||
|
|
|
@ -7,8 +7,6 @@ ctype_types = [c_byte, c_ubyte, c_short, c_ushort, c_int, c_uint,
|
||||||
c_long, c_ulong, c_longlong, c_ulonglong, c_double, c_float]
|
c_long, c_ulong, c_longlong, c_ulonglong, c_double, c_float]
|
||||||
python_types = [int, int, int, int, int, int,
|
python_types = [int, int, int, int, int, int,
|
||||||
int, int, int, int, float, float]
|
int, int, int, int, float, float]
|
||||||
LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
|
|
||||||
large_string = 'T' * 2 ** 25
|
|
||||||
|
|
||||||
class PointersTestCase(unittest.TestCase):
|
class PointersTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
@ -191,9 +189,11 @@ class PointersTestCase(unittest.TestCase):
|
||||||
self.assertEqual(bool(mth), True)
|
self.assertEqual(bool(mth), True)
|
||||||
|
|
||||||
def test_pointer_type_name(self):
|
def test_pointer_type_name(self):
|
||||||
|
LargeNamedType = type('T' * 2 ** 25, (Structure,), {})
|
||||||
self.assertTrue(POINTER(LargeNamedType))
|
self.assertTrue(POINTER(LargeNamedType))
|
||||||
|
|
||||||
def test_pointer_type_str_name(self):
|
def test_pointer_type_str_name(self):
|
||||||
|
large_string = 'T' * 2 ** 25
|
||||||
self.assertTrue(POINTER(large_string))
|
self.assertTrue(POINTER(large_string))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -39,8 +39,12 @@ class Bunch(object):
|
||||||
self.finished.append(tid)
|
self.finished.append(tid)
|
||||||
while not self._can_exit:
|
while not self._can_exit:
|
||||||
_wait()
|
_wait()
|
||||||
|
try:
|
||||||
for i in range(n):
|
for i in range(n):
|
||||||
start_new_thread(task, ())
|
start_new_thread(task, ())
|
||||||
|
except:
|
||||||
|
self._can_exit = True
|
||||||
|
raise
|
||||||
|
|
||||||
def wait_for_started(self):
|
def wait_for_started(self):
|
||||||
while len(self.started) < self.n:
|
while len(self.started) < self.n:
|
||||||
|
|
|
@ -402,8 +402,10 @@ class GCTests(unittest.TestCase):
|
||||||
for i in range(N_THREADS):
|
for i in range(N_THREADS):
|
||||||
t = threading.Thread(target=run_thread)
|
t = threading.Thread(target=run_thread)
|
||||||
threads.append(t)
|
threads.append(t)
|
||||||
|
try:
|
||||||
for t in threads:
|
for t in threads:
|
||||||
t.start()
|
t.start()
|
||||||
|
finally:
|
||||||
time.sleep(1.0)
|
time.sleep(1.0)
|
||||||
exit = True
|
exit = True
|
||||||
for t in threads:
|
for t in threads:
|
||||||
|
|
|
@ -3514,11 +3514,16 @@ class SignalsTest(unittest.TestCase):
|
||||||
# received (forcing a first EINTR in write()).
|
# received (forcing a first EINTR in write()).
|
||||||
read_results = []
|
read_results = []
|
||||||
write_finished = False
|
write_finished = False
|
||||||
|
error = None
|
||||||
def _read():
|
def _read():
|
||||||
|
try:
|
||||||
while not write_finished:
|
while not write_finished:
|
||||||
while r in select.select([r], [], [], 1.0)[0]:
|
while r in select.select([r], [], [], 1.0)[0]:
|
||||||
s = os.read(r, 1024)
|
s = os.read(r, 1024)
|
||||||
read_results.append(s)
|
read_results.append(s)
|
||||||
|
except BaseException as exc:
|
||||||
|
nonlocal error
|
||||||
|
error = exc
|
||||||
t = threading.Thread(target=_read)
|
t = threading.Thread(target=_read)
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
def alarm1(sig, frame):
|
def alarm1(sig, frame):
|
||||||
|
@ -3539,6 +3544,8 @@ class SignalsTest(unittest.TestCase):
|
||||||
wio.flush()
|
wio.flush()
|
||||||
write_finished = True
|
write_finished = True
|
||||||
t.join()
|
t.join()
|
||||||
|
|
||||||
|
self.assertIsNone(error)
|
||||||
self.assertEqual(N, sum(len(x) for x in read_results))
|
self.assertEqual(N, sum(len(x) for x in read_results))
|
||||||
finally:
|
finally:
|
||||||
write_finished = True
|
write_finished = True
|
||||||
|
|
|
@ -1338,8 +1338,12 @@ class TestBasicOps(unittest.TestCase):
|
||||||
# Issue 13454: Crash when deleting backward iterator from tee()
|
# Issue 13454: Crash when deleting backward iterator from tee()
|
||||||
def test_tee_del_backward(self):
|
def test_tee_del_backward(self):
|
||||||
forward, backward = tee(repeat(None, 20000000))
|
forward, backward = tee(repeat(None, 20000000))
|
||||||
|
try:
|
||||||
any(forward) # exhaust the iterator
|
any(forward) # exhaust the iterator
|
||||||
del backward
|
del backward
|
||||||
|
except:
|
||||||
|
del forward, backward
|
||||||
|
raise
|
||||||
|
|
||||||
def test_StopIteration(self):
|
def test_StopIteration(self):
|
||||||
self.assertRaises(StopIteration, next, zip())
|
self.assertRaises(StopIteration, next, zip())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue