2015-12-16 08:07:31 +03:00
|
|
|
# frozen_string_literal: false
|
2010-07-23 11:14:54 +04:00
|
|
|
require 'test/unit'
|
|
|
|
require 'mutex_m'
|
|
|
|
|
|
|
|
class TestMutexM < Test::Unit::TestCase
|
|
|
|
def test_cv_wait
|
|
|
|
o = Object.new
|
2010-08-10 16:02:52 +04:00
|
|
|
o.instance_variable_set(:@foo, nil)
|
2010-07-23 11:14:54 +04:00
|
|
|
o.extend(Mutex_m)
|
2016-08-30 09:22:30 +03:00
|
|
|
c = Thread::ConditionVariable.new
|
2010-07-23 11:14:54 +04:00
|
|
|
t = Thread.start {
|
|
|
|
o.synchronize do
|
|
|
|
until foo = o.instance_variable_get(:@foo)
|
|
|
|
c.wait(o)
|
|
|
|
end
|
|
|
|
foo
|
|
|
|
end
|
|
|
|
}
|
|
|
|
sleep(0.0001)
|
|
|
|
o.synchronize do
|
|
|
|
o.instance_variable_set(:@foo, "abc")
|
|
|
|
end
|
|
|
|
c.signal
|
|
|
|
assert_equal "abc", t.value
|
|
|
|
end
|
2020-11-23 18:37:13 +03:00
|
|
|
|
|
|
|
class KeywordInitializeParent
|
|
|
|
def initialize(x:)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class KeywordInitializeChild < KeywordInitializeParent
|
|
|
|
include Mutex_m
|
|
|
|
def initialize
|
|
|
|
super(x: 1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_initialize_with_keyword_arg
|
|
|
|
assert KeywordInitializeChild.new
|
|
|
|
end
|
|
|
|
|
|
|
|
class NoArgInitializeParent
|
|
|
|
def initialize
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class NoArgInitializeChild < NoArgInitializeParent
|
|
|
|
include Mutex_m
|
|
|
|
def initialize
|
|
|
|
super()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_initialize_no_args
|
|
|
|
assert NoArgInitializeChild.new
|
|
|
|
end
|
2023-01-11 16:56:47 +03:00
|
|
|
|
|
|
|
def test_alias_extended_object
|
|
|
|
object = Object.new
|
|
|
|
object.extend(Mutex_m)
|
|
|
|
|
|
|
|
assert object.respond_to?(:locked?)
|
|
|
|
assert object.respond_to?(:lock)
|
|
|
|
assert object.respond_to?(:unlock)
|
|
|
|
assert object.respond_to?(:try_lock)
|
|
|
|
assert object.respond_to?(:synchronize)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_alias_included_class
|
|
|
|
object = NoArgInitializeChild.new
|
|
|
|
|
|
|
|
assert object.respond_to?(:locked?)
|
|
|
|
assert object.respond_to?(:lock)
|
|
|
|
assert object.respond_to?(:unlock)
|
|
|
|
assert object.respond_to?(:try_lock)
|
|
|
|
assert object.respond_to?(:synchronize)
|
|
|
|
end
|
2010-07-23 11:14:54 +04:00
|
|
|
end
|