diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-16 07:21:02 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-03-16 07:21:02 +0000 |
commit | 89150c9ecb8b5625d55c6a90958eeb63e3d29a33 (patch) | |
tree | 5e547d54f1882aad6f1d0f4e9a00392304532072 /test | |
parent | 1fbbef5d7397a152f060e5a15e15f99ee384d4f8 (diff) |
* test/thread/test_thread.rb: Add a test script for the `thread'
library. This should result in failure as of now with
ext/thread; submitted by: Sylvain Joyeux <sylvain.joyeux AT
m4x.org> in [ruby-core:10598].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@12067 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/thread/test_thread.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/test/thread/test_thread.rb b/test/thread/test_thread.rb new file mode 100644 index 0000000000..abdcebffcf --- /dev/null +++ b/test/thread/test_thread.rb @@ -0,0 +1,67 @@ +require 'thread' +require 'test/unit' + +class TC_Thread < Test::Unit::TestCase + def setup + Thread.abort_on_exception = true + end + def teardown + Thread.abort_on_exception = false + end + def test_condvar + mutex = Mutex.new + condvar = ConditionVariable.new + result = [] + mutex.synchronize do + t = Thread.new do + mutex.synchronize do + result << 1 + condvar.signal + end + end + + result << 0 + condvar.wait(mutex) + result << 2 + t.join + end + assert_equal([0, 1, 2], result) + end + + def test_condvar_wait_not_owner + mutex = Mutex.new + condvar = ConditionVariable.new + + assert_raises(ThreadError) { condvar.wait(mutex) } + end + + def test_condvar_wait_exception_handling + # Calling wait in the only thread running should raise a ThreadError of + # 'stopping only thread' + mutex = Mutex.new + condvar = ConditionVariable.new + + Thread.abort_on_exception = false + + locked = false + thread = Thread.new do + mutex.synchronize do + begin + condvar.wait(mutex) + rescue Exception + locked = mutex.locked? + raise + end + end + end + + while !thread.stop? + sleep(0.1) + end + + thread.raise Interrupt, "interrupt a dead condition variable" + assert_raises(Interrupt) { thread.value } + assert(locked) + end +end + |