Revision: 3087 http://trac.macosforge.org/projects/ruby/changeset/3087 Author: lsansonetti@apple.com Date: 2009-12-07 22:47:24 -0800 (Mon, 07 Dec 2009) Log Message: ----------- follow GCD changes Modified Paths: -------------- MacRuby/trunk/spec/macruby/core/gcd_spec.rb MacRuby/trunk/test_vm/gcd.rb Modified: MacRuby/trunk/spec/macruby/core/gcd_spec.rb =================================================================== --- MacRuby/trunk/spec/macruby/core/gcd_spec.rb 2009-12-08 06:47:03 UTC (rev 3086) +++ MacRuby/trunk/spec/macruby/core/gcd_spec.rb 2009-12-08 06:47:24 UTC (rev 3087) @@ -48,12 +48,12 @@ it "should return the parent queue when inside an executing block" do q = Dispatch::Queue.new('org.macruby.rubyspecs.gcd.test') - q2 = nil - q.dispatch do - q2 = Dispatch::Queue.current + @q2 = nil + q.async do + @q2 = Dispatch::Queue.current end - q.dispatch(:true) {} - q.label.should == q2.label + q.sync {} + q.label.should == @q2.label end end @@ -74,38 +74,55 @@ end end - describe "Dispatch::Queue#dispatch" do + describe "Dispatch::Queue#async" do it "accepts a block and yields it asynchronously" do o = Dispatch::Queue.new('foo') - i = 0 - o.dispatch { i = 42 } - while i == 0 do; end - i.should == 42 + @i = 0 + o.async { @i = 42 } + while @i == 0 do; end + @i.should == 42 end - it "accepts a block and yields it synchronously if the given argument is true" do + it "accepts a block and yields it asynchronously through a group if given" do o = Dispatch::Queue.new('foo') - i = 0 - o.dispatch(true) { i = 42 } - i.should == 42 + g = Dispatch::Group.new + @i = 0 + o.async(g) { @i = 42 } + g.wait + @i.should == 42 + + lambda { o.async(42) }.should raise_error(ArgumentError) end it "raises an ArgumentError if no block is given" do o = Dispatch::Queue.new('foo') - lambda { o.dispatch }.should raise_error(ArgumentError) - lambda { o.dispatch(true) }.should raise_error(ArgumentError) + lambda { o.async }.should raise_error(ArgumentError) end end + describe "Dispatch::Queue#sync" do + it "accepts a block and yields it synchronously" do + o = Dispatch::Queue.new('foo') + @i = 0 + o.sync { @i = 42 } + @i.should == 42 + end + + it "raises an ArgumentError if no block is given" do + o = Dispatch::Queue.new('foo') + lambda { o.sync }.should raise_error(ArgumentError) + end + end + describe "Dispatch::Queue#apply" do it "accepts an input size and a block and yields it as many times" do o = Dispatch::Queue.new('foo') - i = 0 - o.apply(10) { i += 1 } - i.should == 10 - i = 42 - o.apply(0) { i += 1 } - i.should == 42 + @i = 0 + o.apply(10) { @i += 1 } + @i.should == 10 + @i = 42 + o.apply(0) { @i += 1 } + @i.should == 42 lambda { o.apply(nil) {} }.should raise_error(TypeError) end @@ -119,14 +136,14 @@ describe "Dispatch::Queue#after" do it "accepts a given time (in seconds) and a block and yields it after" do o = Dispatch::Queue.new('foo') - i = 0 + @i = 0 t = Time.now - o.after(0.2) { i = 42 } - while i == 0 do; end + o.after(0.2) { @i = 42 } + while @i == 0 do; end t2 = Time.now - t t2.should >= 0.2 t2.should < 0.5 - i.should == 42 + @i.should == 42 lambda { o.after(nil) {} }.should raise_error(TypeError) end @@ -150,7 +167,7 @@ describe "Dispatch::Queue#suspend!" do it "suspends the queue which can be resumed by calling #resume!" do o = Dispatch::Queue.new('foo') - o.dispatch { sleep 1 } + o.async { sleep 1 } o.suspended?.should == false o.suspend! o.suspended?.should == true @@ -165,38 +182,10 @@ @group.should be_kind_of(Dispatch::Group) end - describe "#dispatch" do - it "raises an ArgumentError if no block is given" do - lambda { @group.dispatch }.should raise_error(ArgumentError) - end - - # it "accepts a block and yields it asynchronously" do - # i = 0 - # @group.dispatch { i = 42 } - # while i == 0 do; end - # i.should == 42 - # end - - end - describe "#notify" do - it "raises an ArgumentError if no block is given" do - lambda { @group.dispatch }.should raise_error(ArgumentError) - end - - # it "accepts a block and yields it when the group is ready" do - # i = 0 - # @group.notify{ i = 42} - # @group.dispatch { i = 40 } - # while i == 0 do; end - # i.should == 42 - # end - end describe "#wait" do - end - end -end \ No newline at end of file +end Modified: MacRuby/trunk/test_vm/gcd.rb =================================================================== --- MacRuby/trunk/test_vm/gcd.rb 2009-12-08 06:47:03 UTC (rev 3086) +++ MacRuby/trunk/test_vm/gcd.rb 2009-12-08 06:47:24 UTC (rev 3087) @@ -2,76 +2,76 @@ # sequential + synchronous assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') 10000.times do |i| - q.dispatch(true) { n += i } + q.sync { @n += i } end - p n + p @n } # sequential + asynchronous assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') 10000.times do |i| - q.dispatch { n += i } + q.async { @n += i } end - q.dispatch(true) {} - p n + q.sync {} + p @n } # group + sequential assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') g = Dispatch::Group.new 10000.times do |i| - g.dispatch(q) { n += i } + q.async(g) { @n += i } end g.wait - p n + p @n } # group + concurrent assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') g = Dispatch::Group.new 10000.times do |i| - g.dispatch(Dispatch::Queue.concurrent) do - q.dispatch(true) { n += i } + Dispatch::Queue.concurrent.async(g) do + q.sync { @n += i } end end g.wait - p n + p @n } # apply + sequential assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') q.apply(10000) do |i| - n += i + @n += i end - p n + p @n } # apply + concurrent assert n, %{ - n = 0 + @n = 0 q = Dispatch::Queue.new('foo') Dispatch::Queue.concurrent.apply(10000) do |i| - q.dispatch { n += i } + q.async { @n += i } end - q.dispatch(true) {} - p n + q.sync {} + p @n } # exceptions should be ignored assert ':ok', %{ g = Dispatch::Group.new - g.dispatch(Dispatch::Queue.concurrent) { raise('hey') } + Dispatch::Queue.concurrent.async(g) { raise('hey') } g.wait p :ok } @@ -87,7 +87,7 @@ i = 0 g = Dispatch::Group.new while i < 100000 - g.dispatch(Dispatch::Queue.concurrent) { i+2*3/4-5 } + Dispatch::Queue.concurrent.async(g) { i+2*3/4-5 } i += 1 end g.wait
participants (1)
-
source_changes@macosforge.org