1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* test/thread/test_thread.rb (test_local_barrier), test/thread/lbtest.rb: test for [ruby-dev:30653].

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@13431 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2007-09-12 06:49:29 +00:00
parent 416695adff
commit e3624857f6
2 changed files with 65 additions and 0 deletions

51
test/thread/lbtest.rb Executable file
View file

@ -0,0 +1,51 @@
#! /usr/bin/ruby
require 'thread'
class LocalBarrier
def initialize(n)
@wait = Queue.new
@done = Queue.new
@keeper = begin_keeper(n)
end
def sync
@done.push(true)
@wait.pop
end
def join
@keeper.join
end
private
def begin_keeper(n)
Thread.start do
n.times do
@done.pop
end
n.times do
@wait.push(true)
end
end
end
end
n = 10
lb = LocalBarrier.new(n)
(n - 1).times do |i|
Thread.start do
sleep((rand(n) + 1) / 10.0)
puts "#{i}: done"
lb.sync
puts "#{i}: cont"
end
end
lb.sync
puts "#{n-1}: done"
# lb.join # leaving waiting threads.
puts "exit."

View file

@ -1,3 +1,4 @@
# -*- ruby-indent-level: 4 -*-
require 'thread'
require 'test/unit'
@ -63,5 +64,18 @@ class TC_Thread < Test::Unit::TestCase
assert_raises(Interrupt) { thread.value }
assert(locked)
end
def test_local_barrier
dir = File.dirname(__FILE__)
lbtest = File.join(dir, "lbtest.rb")
$:.unshift File.join(File.dirname(dir), 'ruby')
require 'envutil'
$:.shift
10.times {
result = `#{EnvUtil.rubybin} #{lbtest}`
assert(!$?.coredump?, '[ruby-dev:30653]')
assert_equal("exit.", result[/.*\Z/], '[ruby-dev:30653]')
}
end
end