From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/thread/test_sync.rb | 63 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 jni/ruby/test/thread/test_sync.rb (limited to 'jni/ruby/test/thread/test_sync.rb') diff --git a/jni/ruby/test/thread/test_sync.rb b/jni/ruby/test/thread/test_sync.rb new file mode 100644 index 0000000..9509cac --- /dev/null +++ b/jni/ruby/test/thread/test_sync.rb @@ -0,0 +1,63 @@ +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 { tester.sync_lock(:EX) } + + sleep 0.1 until t.stop? + t.raise + sleep 0.1 while t.alive? + + assert_equal(tester.sync_waiting.uniq, tester.sync_waiting) + assert_equal(tester.sync_waiting, []) + end +end -- cgit v1.2.3