ruby-changes:1863
From: ko1@a...
Date: 7 Sep 2007 05:44:56 +0900
Subject: [ruby-changes:1863] seki - Ruby:r13354 (ruby_1_8): * test/rinda/test_rinda.rb (MockClock): correct synchronous problems
seki 2007-09-07 05:44:46 +0900 (Fri, 07 Sep 2007) New Revision: 13354 Modified files: branches/ruby_1_8/ChangeLog branches/ruby_1_8/test/rinda/test_rinda.rb Log: * test/rinda/test_rinda.rb (MockClock): correct synchronous problems of the MultiThreading. [ruby-dev:31692] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=13354&r2=13353 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/test/rinda/test_rinda.rb?r1=13354&r2=13353 Index: ruby_1_8/ChangeLog =================================================================== --- ruby_1_8/ChangeLog (revision 13353) +++ ruby_1_8/ChangeLog (revision 13354) @@ -1,3 +1,8 @@ +Fri Sep 7 05:36:19 2007 Masatoshi SEKI <m_seki@m...> + + * test/rinda/test_rinda.rb (MockClock): correct synchronous problems + of the MultiThreading. [ruby-dev:31692] + Wed Sep 5 22:02:27 2007 Yukihiro Matsumoto <matz@r...> * array.c (rb_ary_subseq): need integer overflow check. Index: ruby_1_8/test/rinda/test_rinda.rb =================================================================== --- ruby_1_8/test/rinda/test_rinda.rb (revision 13353) +++ ruby_1_8/test/rinda/test_rinda.rb (revision 13354) @@ -12,14 +12,14 @@ include Singleton class MyTS < Rinda::TupleSpace - def keeper + def keeper_thread nil end end def initialize @now = 2 - @reso = 0.1 + @reso = 1 @ts = MyTS.new @ts.write([2, :now]) @inf = 2**31 - 1 @@ -40,10 +40,11 @@ @ts.write([@now, :now]) end - def forward(n=nil) + def forward(n) while n > 0 _forward(@reso) n -= @reso + Thread.pass end end @@ -56,20 +57,10 @@ end def sleep(n=nil) - while will_deadlock? - n -= @reso - forward - return 0 if n <= 0 - end now ,= @ts.read([nil, :now]) @ts.read([(now + n)..@inf, :now]) 0 end - - def will_deadlock? - sz = Thread.current.group.list.find_all {|x| x.status != 'sleep'}.size - sz <= 1 - end end module Time @@ -115,6 +106,14 @@ Time.sleep(n) end end + + def thread_join(th) + while th.alive? + Kernel.sleep(0.1) + sleep(1) + end + th.value + end def test_00_tuple tuple = Rinda::TupleEntry.new([1,2,3]) @@ -242,15 +241,15 @@ def test_ruby_talk_264062 th = Thread.new { @ts.take([:empty], 1) } - sleep 2 + sleep(10) assert_raises(Rinda::RequestExpiredError) do - th.value + thread_join(th) end th = Thread.new { @ts.read([:empty], 1) } - sleep 2 + sleep(10) assert_raises(Rinda::RequestExpiredError) do - th.value + thread_join(th) end end @@ -266,7 +265,7 @@ s = 0 while true begin - tuple = @ts.take([:req, Integer], 0.5) + tuple = @ts.take([:req, Integer], 1) assert_equal(2, tuple[1]) s += tuple[1] rescue Rinda::RequestExpiredError @@ -277,10 +276,9 @@ s end - sleep(20) + assert_equal(10, thread_join(taker)) tuple = @ts.take([:ans, nil]) assert_equal(10, tuple[1]) - assert_equal(10, taker.value) end def test_core_02 @@ -288,7 +286,7 @@ s = 0 while true begin - tuple = @ts.take([:req, Integer], 1.0) + tuple = @ts.take([:req, Integer], 1) assert_equal(2, tuple[1]) s += tuple[1] rescue Rinda::RequestExpiredError @@ -303,10 +301,9 @@ @ts.write([:req, 2]) end - sleep(20) + assert_equal(10, thread_join(taker)) tuple = @ts.take([:ans, nil]) assert_equal(10, tuple[1]) - assert_equal(10, taker.value) assert_equal([], @ts.read_all([nil, nil])) end @@ -363,7 +360,7 @@ s = 0 while true begin - tuple = @ts.take([:req, Integer], 1.0) + tuple = @ts.take([:req, Integer], 1) s += tuple[1] rescue Rinda::RequestExpiredError break @@ -373,26 +370,23 @@ s end - writer = Thread.new do - 5.times do |n| - @ts.write([:req, 2]) - sleep 0.1 - end + 5.times do |n| + @ts.write([:req, 2]) end @ts.take({"message"=>"first", "name"=>"3"}) sleep(4) + assert_equal(10, thread_join(taker)) tuple = @ts.take([:ans, nil]) assert_equal(10, tuple[1]) - assert_equal(10, taker.value) assert_equal([], @ts.read_all([nil, nil])) notify1.cancel sleep(3) # notify2 expired - assert_equal([0, 11], listener1.value) - assert_equal([0, 3], listener2.value) + assert_equal([0, 11], thread_join(listener1)) + assert_equal([0, 3], thread_join(listener2)) ary = [] ary.push(["write", {"message"=>"first", "name"=>"3"}]) @@ -419,21 +413,21 @@ taker = Thread.new do @ts.take([:take, nil], 10) do |template| Thread.new do - sleep 0.2 template.cancel end end end - sleep(1) - assert(template.canceled?) - - @ts.write([:take, 1]) + sleep(2) assert_raises(Rinda::RequestCanceledError) do - assert_nil(taker.value) + assert_nil(thread_join(taker)) end + assert(template.canceled?) + + @ts.write([:take, 1]) + assert_equal([[:take, 1]], @ts.read_all([nil, nil])) end @@ -447,21 +441,21 @@ reader = Thread.new do @ts.read([:take, nil], 10) do |template| Thread.new do - sleep 0.2 template.cancel end end end - sleep(1) - assert(template.canceled?) - - @ts.write([:take, 1]) + sleep(2) assert_raises(Rinda::RequestCanceledError) do - assert_nil(reader.value) + assert_nil(thread_join(reader)) end + assert(template.canceled?) + + @ts.write([:take, 1]) + assert_equal([[:take, 1]], @ts.read_all([nil, nil])) end @@ -492,15 +486,16 @@ assert(tuple.expired?) assert(!tuple.alive?) - tuple = Rinda::TupleEntry.new([1,2,3], SimpleRenewer.new(1,2)) + @renewer = SimpleRenewer.new(1,2) + tuple = Rinda::TupleEntry.new([1,2,3], @renewer) assert(!tuple.canceled?) assert(!tuple.expired?) assert(tuple.alive?) - sleep(1.5) + sleep(1) assert(!tuple.canceled?) assert(!tuple.expired?) assert(tuple.alive?) - sleep(1.5) + sleep(2) assert(tuple.expired?) assert(!tuple.alive?) end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml