Add Semaphore#try_wait. Fix libpsem to convert relative timeout to absolute timeout.
This commit is contained in:
1 parent
f65ae434e4
commit
7230e9f2c9
6 files changed
+92
-8
No files matched your search
@@ -72,5 +72,29 @@ module ProcessShared
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#try_wait' do
|
||||
it 'returns immediately with non-zero semaphore' do
|
||||
Semaphore.open(1) do |sem|
|
||||
start = Time.now.to_f
|
||||
sem.try_wait
|
||||
(Time.now.to_f - start).must be_lt(0.01)
|
||||
end
|
||||
end
|
||||
|
||||
it 'raises EAGAIN with zero semaphore' do
|
||||
Semaphore.open(0) do |sem|
|
||||
proc { sem.try_wait }.must_raise(Errno::EAGAIN)
|
||||
end
|
||||
end
|
||||
|
||||
it 'raises ETIMEDOUT after timeout expires' do
|
||||
Semaphore.open(0) do |sem|
|
||||
start = Time.now.to_f
|
||||
proc { sem.try_wait(0.1) }.must_raise(Errno::ETIMEDOUT)
|
||||
(Time.now.to_f - start).must be_gte(0.1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
+11
-2
@@ -17,15 +17,16 @@ class RangeMatcher
|
||||
end
|
||||
|
||||
def matches?(subject)
|
||||
@subject = subject
|
||||
subject.send(@operator, @limit)
|
||||
end
|
||||
|
||||
def failure_message_for_should
|
||||
"expected #{operator} #{@limit}"
|
||||
"expected #{@operator} #{@limit}, not #{@subject}"
|
||||
end
|
||||
|
||||
def failure_message_for_should_not
|
||||
"expected not #{operator} #{@limit}"
|
||||
"expected not #{@operator} #{@limit}, not #{@subject}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -33,6 +34,14 @@ def be_lt(value)
|
||||
RangeMatcher.new('<', value)
|
||||
end
|
||||
|
||||
def be_gt(value)
|
||||
RangeMatcher.new('>', value)
|
||||
end
|
||||
|
||||
def be_lte(value)
|
||||
RangeMatcher.new('<=', value)
|
||||
end
|
||||
|
||||
def be_gte(value)
|
||||
RangeMatcher.new('>=', value)
|
||||
end
|
||||
Reference in new issue
Block a user