[macruby-changes] [3427] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Feb 3 17:43:49 PST 2010


Revision: 3427
          http://trac.macosforge.org/projects/ruby/changeset/3427
Author:   ernest.prabhakar at gmail.com
Date:     2010-02-03 17:43:46 -0800 (Wed, 03 Feb 2010)
Log Message:
-----------
Initial Futures spec

Modified Paths:
--------------
    MacRuby/trunk/lib/dispatch/dispatch.rb
    MacRuby/trunk/lib/dispatch/future.rb
    MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb

Modified: MacRuby/trunk/lib/dispatch/dispatch.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/dispatch.rb	2010-02-04 01:24:42 UTC (rev 3426)
+++ MacRuby/trunk/lib/dispatch/dispatch.rb	2010-02-04 01:43:46 UTC (rev 3427)
@@ -50,8 +50,13 @@
     # Companion to +Dispatch.fork+, allowing you to +wait+ until +grp+ completes
     # via an API similar to that used by +Threads+
     # If a block is given, instead uses +notify+ to call it asynchronously
-    def join(&block)
-      Kernel.block_given? ? self.notify(&block) : self.wait 
+    def join(q = nil, &block)
+      if block.nil?
+        self.wait
+      else
+        q ||= Dispatch::Queue.concurrent
+        self.notify(q, &block)
+      end
     end
   end
   

Modified: MacRuby/trunk/lib/dispatch/future.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/future.rb	2010-02-04 01:24:42 UTC (rev 3426)
+++ MacRuby/trunk/lib/dispatch/future.rb	2010-02-04 01:43:46 UTC (rev 3427)
@@ -13,12 +13,15 @@
     # Waits for the computation to finish, then returns the value
     # Duck-typed to lambda.call(void)
     # If a block is passed, invoke that asynchronously with the final value
-    def call(&callback)
+    def call(q = nil, &callback)
       if not block_given?
         @group.wait
         return @value
+      else
+        q ||= Dispatch::Queue.concurrent
+        @group.notify(q) { callback.call(@value) }
       end
-      @group.notify { callback.call(@value) }
     end
+        
   end
 end

Modified: MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb	2010-02-04 01:24:42 UTC (rev 3426)
+++ MacRuby/trunk/spec/macruby/library/dispatch/future_spec.rb	2010-02-04 01:43:46 UTC (rev 3427)
@@ -3,8 +3,28 @@
 
 if MACOSX_VERSION >= 10.6
   describe "Dispatch::Future" do
-    it "should do something" do
-      true.should == true
+    
+    before :each do
+      @future = Dispatch::Future.new { Math.sqrt(2**10) }
     end
+
+    describe :new do
+      it "should return an Future for tracking execution of the passed block" do
+        @future.should be_kind_of Dispatch::Future
+      end
+    end
+    
+    describe :call do
+      it "should wait Synchronously to return value" do
+        @future.call.should == 2**5
+      end
+
+      it "should invoke passed block Asynchronously with returned value " do
+        $global = 0
+        @future.call {|v| $global = v}
+        while $global == 0 do; end
+        $global.should == 2**5
+      end
+    end
   end
 end
\ No newline at end of file
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100203/a55b924d/attachment-0001.html>


More information about the macruby-changes mailing list