[macruby-changes] [3449] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Feb 8 15:04:35 PST 2010


Revision: 3449
          http://trac.macosforge.org/projects/ruby/changeset/3449
Author:   ernest.prabhakar at gmail.com
Date:     2010-02-08 15:04:34 -0800 (Mon, 08 Feb 2010)
Log Message:
-----------
Initial mapreduce specs

Modified Paths:
--------------
    MacRuby/trunk/lib/dispatch/enumerable.rb
    MacRuby/trunk/spec/macruby/library/dispatch/enumerable_spec.rb

Modified: MacRuby/trunk/lib/dispatch/enumerable.rb
===================================================================
--- MacRuby/trunk/lib/dispatch/enumerable.rb	2010-02-08 23:04:22 UTC (rev 3448)
+++ MacRuby/trunk/lib/dispatch/enumerable.rb	2010-02-08 23:04:34 UTC (rev 3449)
@@ -30,11 +30,11 @@
   end
 
   # Parallel +collect+ plus +inject+
-  # Accumulates in +result+ via +op+ (default = '<<')
-  # Only works if result doesn't depend on the order elements are processed.
-  def p_mapreduce(result=[], op=:<<, &block)
-    raise ArgumentError if not result.respond_to? :op
-    p_result = Dispatch.wrap(result)
+  # Accumulates in +initial+ via +op+ (default = '<<')
+  def p_mapreduce(initial, op=:<<, &block)
+    raise ArgumentError if not initial.respond_to? :op
+    # Since exceptions from a Dispatch block act funky 
+    p_result = Dispatch.wrap(initial)
     self.p_each_with_index do |obj, i|
      val = block.call(obj)
      p_result.send(op, val)

Modified: MacRuby/trunk/spec/macruby/library/dispatch/enumerable_spec.rb
===================================================================
--- MacRuby/trunk/spec/macruby/library/dispatch/enumerable_spec.rb	2010-02-08 23:04:22 UTC (rev 3448)
+++ MacRuby/trunk/spec/macruby/library/dispatch/enumerable_spec.rb	2010-02-08 23:04:34 UTC (rev 3449)
@@ -12,7 +12,7 @@
         @ary.respond_to?(:p_each).should == true
       end
 
-      it "behaves like each" do
+      it "should behave like each" do
         @sum1 = 0
         @ary.each {|v| @sum1 += v*v}
         @sum2 = 0
@@ -31,7 +31,7 @@
         @ary.respond_to?(:p_each).should == true
       end
       
-      it "behaves like each_with_index" do
+      it "should behave like each_with_index" do
         @sum1 = 0
         @ary.each_with_index {|v, i| @sum1 += v**i}
         @sum2 = 0
@@ -47,15 +47,47 @@
     
     describe :p_map do
       it "exists on objects that support Enumerable" do
-        @ary.respond_to?(:p_each).should == true
+        @ary.respond_to?(:p_map).should == true
       end
-      it "behaves like map" do
-        @ary.should.respond_to? :p_map
+      it "should behave like map" do
+        map1 = @ary.map {|v| v*v}
+        map2 = @ary.p_map {|v| v*v}
+        map1.should == map2
       end
       
       it "executes concurrently" do
         true.should == true
       end
     end
+
+    describe :p_mapreduce do
+      it "exists on objects that support Enumerable" do
+        @ary.respond_to?(:p_mapreduce).should == true
+      end
+      
+      it "should behave like an unordered map" do
+        map1 = @ary.map {|v| v*v}
+        map2 = @ary.p_mapreduce([]) {|v| v*v}
+        map1.should == map2.sort
+      end
+
+      it "should use any result that takes :<< " do
+        map1 = @ary.map {|v| "%x" % 10+v}
+        map2 = @ary.p_mapreduce("") {|v| "%x" % 10+v}   
+        map1.each do |s|
+          map2.index(s).should_not == nil
+        end
+      end
+
+      it "should allow custom accumulator methods" do
+        map2 = @ary.p_mapreduce(0, :|) {|v| v**2}   
+        map2.should == (2 | 4 | 8)
+      end
+      
+      it "executes concurrently" do
+        true.should == true
+      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/20100208/5439f8e7/attachment-0001.html>


More information about the macruby-changes mailing list