summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/output/test_thread8
-rw-r--r--Lib/test/test_thread.py35
-rw-r--r--Lib/test/test_threading.py16
3 files changed, 59 insertions, 0 deletions
diff --git a/Lib/test/output/test_thread b/Lib/test/output/test_thread
index d49651dd4f..ec58d73098 100644
--- a/Lib/test/output/test_thread
+++ b/Lib/test/output/test_thread
@@ -4,3 +4,11 @@ all tasks done
*** Barrier Test ***
all tasks done
+
+*** Changing thread stack size ***
+trying stack_size = 32768
+waiting for all tasks to complete
+all tasks done
+trying stack_size = 4194304
+waiting for all tasks to complete
+all tasks done
diff --git a/Lib/test/test_thread.py b/Lib/test/test_thread.py
index ea345b60a0..d97010773d 100644
--- a/Lib/test/test_thread.py
+++ b/Lib/test/test_thread.py
@@ -115,3 +115,38 @@ for i in range(numtasks):
thread.start_new_thread(task2, (i,))
done.acquire()
print 'all tasks done'
+
+# not all platforms support changing thread stack size
+print '\n*** Changing thread stack size ***'
+if thread.stack_size() != 0:
+ raise ValueError, "initial stack_size not 0"
+
+thread.stack_size(0)
+if thread.stack_size() != 0:
+ raise ValueError, "stack_size not reset to default"
+
+from os import name as os_name
+if os_name in ("nt", "os2", "posix"):
+
+ for tss, ok in ((4096, 0), (32768, 1), (0x400000, 1), (0, 1)):
+ if ok:
+ failed = lambda s, e: s != e
+ fail_msg = "stack_size(%d) failed - should succeed"
+ else:
+ failed = lambda s, e: s == e
+ fail_msg = "stack_size(%d) succeeded - should fail"
+ thread.stack_size(tss)
+ if failed(thread.stack_size(), tss):
+ raise ValueError, fail_msg % tss
+
+ for tss in (32768, 0x400000):
+ print 'trying stack_size = %d' % tss
+ next_ident = 0
+ for i in range(numtasks):
+ newtask()
+
+ print 'waiting for all tasks to complete'
+ done.acquire()
+ print 'all tasks done'
+
+ thread.stack_size(0)
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 7eb9758ecf..09e84f4389 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -85,6 +85,22 @@ class ThreadTests(unittest.TestCase):
print 'all tasks done'
self.assertEqual(numrunning.get(), 0)
+ # run with a minimum thread stack size (32kB)
+ def test_various_ops_small_stack(self):
+ if verbose:
+ print 'with 32kB thread stack size...'
+ threading.stack_size(0x8000)
+ self.test_various_ops()
+ threading.stack_size(0)
+
+ # run with a large thread stack size (16MB)
+ def test_various_ops_large_stack(self):
+ if verbose:
+ print 'with 16MB thread stack size...'
+ threading.stack_size(0x1000000)
+ self.test_various_ops()
+ threading.stack_size(0)
+
def test_foreign_thread(self):
# Check that a "foreign" thread can use the threading module.
def f(mutex):