diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-31 03:49:38 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-07-31 03:49:38 +0000 |
commit | 9e1c79e58ad7ca4c886f7e4d70e2d3f2a9fda1a0 (patch) | |
tree | 8ac048555c9ce88a3a26413b0b470e5bf3807d0c /test/test_sync.rb | |
parent | 8536a9a7737b5b56d0549f6c7960b5092163ef70 (diff) | |
download | ruby-9e1c79e58ad7ca4c886f7e4d70e2d3f2a9fda1a0.tar.gz |
Move obsoleted test/thread/test_*.rb with the current implementation.
* test/ruby/test_thread_{cv,queue}.rb: Move under the test/ruby directory.
and rename TestThread* from Test*.
* test/test_sync.rb: Move toplevel of test diretory because sync is still
standard library.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64137 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/test_sync.rb')
-rw-r--r-- | test/test_sync.rb | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/test_sync.rb b/test/test_sync.rb new file mode 100644 index 0000000000..e3294ff824 --- /dev/null +++ b/test/test_sync.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: false +require 'test/unit' +require 'sync' +require 'timeout' + +class SyncTest < Test::Unit::TestCase + class Tester + include Sync_m + end + + def test_sync_lock_and_wakeup + tester = Tester.new + + tester.sync_lock(:EX) + + t = Thread.new { tester.sync_lock(:EX) } + + sleep 0.1 until t.stop? + t.wakeup + sleep 0.1 until t.stop? + + assert_equal(tester.sync_waiting.uniq, tester.sync_waiting) + ensure + t.kill + t.join + end + + def test_sync_upgrade_and_wakeup + tester = Tester.new + tester.sync_lock(:SH) + + t = Thread.new do + tester.sync_lock(:SH) + tester.sync_lock(:EX) + end + + sleep 0.1 until t.stop? + t.wakeup + sleep 0.1 until t.stop? + + tester.sync_upgrade_waiting.each { |ary| + assert(!tester.sync_waiting.include?(ary[0])) + } + assert_equal(tester.sync_waiting.uniq, tester.sync_waiting) + assert_equal(tester.sync_waiting, []) + ensure + t.kill + t.join + end + + def test_sync_lock_and_raise + tester= Tester.new + tester.sync_lock(:EX) + + t = Thread.new { + assert_raise(RuntimeError) { + tester.sync_lock(:EX) + } + } + + sleep 0.1 until t.stop? + sleep 1 if RubyVM::MJIT.enabled? # t.stop? behaves unexpectedly with --jit-wait + t.raise + t.join + + assert_equal(tester.sync_waiting.uniq, tester.sync_waiting) + assert_equal(tester.sync_waiting, []) + end +end |