ruby-changes:1940
From: ko1@a...
Date: 12 Sep 2007 15:49:41 +0900
Subject: [ruby-changes:1940] nobu - Ruby:r13431 (ruby_1_8): * test/thread/test_thread.rb (test_local_barrier), test/thread/lbtest.rb: test for .
nobu 2007-09-12 15:49:29 +0900 (Wed, 12 Sep 2007)
New Revision: 13431
Added files:
branches/ruby_1_8/test/thread/lbtest.rb
Modified files:
branches/ruby_1_8/test/thread/test_thread.rb
Log:
* test/thread/test_thread.rb (test_local_barrier), test/thread/lbtest.rb: test for [ruby-dev:30653].
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/thread/test_thread.rb?r1=13431&r2=13430
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/thread/lbtest.rb?r1=13431&r2=13430
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/thread/lbtest.rb?revision=13431&view=markup
Index: ruby_1_8/test/thread/lbtest.rb
===================================================================
--- ruby_1_8/test/thread/lbtest.rb (revision 0)
+++ ruby_1_8/test/thread/lbtest.rb (revision 13431)
@@ -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."
Property changes on: ruby_1_8/test/thread/lbtest.rb
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ LF
Index: ruby_1_8/test/thread/test_thread.rb
===================================================================
--- ruby_1_8/test/thread/test_thread.rb (revision 13430)
+++ ruby_1_8/test/thread/test_thread.rb (revision 13431)
@@ -1,3 +1,4 @@
+# -*- ruby-indent-level: 4 -*-
require 'thread'
require 'test/unit'
@@ -63,5 +64,18 @@
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
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml