From 47fc784b567d58c48ad1f018e3b56926acd76725 Mon Sep 17 00:00:00 2001 From: ksss Date: Fri, 14 Mar 2014 23:51:39 +0900 Subject: fix return value for with_index --- mrbgems/mruby-enumerator/test/enumerator.rb | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'mrbgems/mruby-enumerator/test/enumerator.rb') diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index c790c1367..bbb22ee6d 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -396,3 +396,12 @@ assert 'modifying existing methods' do assert_equal Enumerator, {a:1}.each.class assert_equal Enumerator, (1..5).each.class end + +assert 'Array#map!' do + a = [1,2,3] + b = a.map! + b.with_index do |i, index| + [i*i, index*index] + end + assert_equal [[1,0],[4,1],[9,4]], a +end -- cgit v1.2.3 From 6b3cc0052d93983cd7cb9ee48a3c4c140046fc2a Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 15 Mar 2014 00:03:53 +0900 Subject: fix self modifying bug --- mrbgems/mruby-enumerator/mrblib/enumerator.rb | 5 +++-- mrbgems/mruby-enumerator/test/enumerator.rb | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-enumerator/test/enumerator.rb') diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index 8641d99e0..cf909bac5 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -255,6 +255,7 @@ class Enumerator # enum.each(:y, :z) { |elm| elm } #=> :method_returned # def each *argv, &block + obj = self if 0 < argv.length obj = self.dup args = obj.args @@ -264,9 +265,9 @@ class Enumerator else args = argv.dup end - @args = args + obj.args = args end - return self unless block_given? + return obj unless block_given? enumerator_block_call(&block) end diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index bbb22ee6d..2c85feef3 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -89,6 +89,27 @@ assert 'Enumerator#each' do assert_equal([1], ary) end +assert 'Enumerator#each arguments' do + obj = Object.new + + def obj.each_arg(a, b=:b, *rest) + yield a + yield b + yield rest + :method_returned + end + + enum = obj.to_enum :each_arg, :a, :x + + assert_equal [:a, :x, []], enum.each.to_a + assert_true enum.each.equal?(enum) + assert_equal :method_returned, enum.each { |elm| elm } + + assert_equal [:a, :x, [:y, :z]], enum.each(:y, :z).to_a + assert_false enum.each(:y, :z).equal?(enum) + assert_equal :method_returned, enum.each(:y, :z) { |elm| elm } +end + assert 'Enumerator#next' do e = 3.times 3.times { |i| -- cgit v1.2.3 From 9447c637a558e30d6315fd712f91b349587a8a34 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 15 Mar 2014 00:15:33 +0900 Subject: test split and to detail --- mrbgems/mruby-enumerator/test/enumerator.rb | 49 ++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) (limited to 'mrbgems/mruby-enumerator/test/enumerator.rb') diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index 2c85feef3..71e70733c 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -400,8 +400,8 @@ assert 'Kernel#to_enum' do assert_raise(ArgumentError){ nil.to_enum } end - assert 'modifying existing methods' do + assert_equal Enumerator, loop.class e = 3.times i = 0 loop_ret = loop { @@ -409,13 +409,28 @@ assert 'modifying existing methods' do i += 1 } assert_nil loop_ret +end - assert_equal Enumerator, loop.class - assert_equal Enumerator, 3.times.class - assert_equal Enumerator, [].each.class - assert_equal Enumerator, [].map.class - assert_equal Enumerator, {a:1}.each.class - assert_equal Enumerator, (1..5).each.class +assert 'Integral#times' do + a = 3 + b = a.times + c = [] + b.with_object(c) do |i, obj| + obj << i + end + assert_equal 3, a + assert_equal Enumerator, b.class + assert_equal [0,1,2], c +end + +assert 'Enumerable#map' do + a = [1,2,3] + b = a.map + c = b.with_index do |i, index| + [i*i, index*index] + end + assert_equal [1,2,3], a + assert_equal [[1,0],[4,1],[9,4]], c end assert 'Array#map!' do @@ -426,3 +441,23 @@ assert 'Array#map!' do end assert_equal [[1,0],[4,1],[9,4]], a end + +assert 'Hash#each' do + a = {a:1,b:2} + b = a.each + c = [] + b.each do |k,v| + c << [k,v] + end + assert_equal [[:a,1], [:b,2]], c.sort +end + +assert 'Range#each' do + a = (1..5) + b = a.each + c = [] + b.each do |i| + c << i + end + assert_equal [1,2,3,4,5], c +end -- cgit v1.2.3 From 0bb7f5e950de68cfcb188fa7df79dc2537ee45c1 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 15 Mar 2014 00:45:58 +0900 Subject: fix variable name typo --- mrbgems/mruby-enumerator/mrblib/enumerator.rb | 2 +- mrbgems/mruby-enumerator/test/enumerator.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-enumerator/test/enumerator.rb') diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index cf909bac5..7bf354d9c 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -206,7 +206,7 @@ class Enumerator # # => foo:2 # def with_object object - return to_enum :with_object, offset unless block_given? + return to_enum :with_object, object unless block_given? each do |i| yield [i,object] diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index 71e70733c..857615991 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -72,6 +72,21 @@ assert 'Enumerator#with_object' do assert_equal([55, 3628800], ret) end +assert 'Enumerator#with_object arguments' do + to_three = Enumerator.new do |y| + 3.times do |x| + y << x + end + end + + a = [] + to_three_with_string = to_three.with_object("foo") + to_three_with_string.each do |x,string| + a << "#{string}:#{x}" + end + assert_equal ["foo:0","foo:1","foo:2"], a +end + assert 'Enumerator#inspect' do e = (0..10).each assert_equal("#", e.inspect) -- cgit v1.2.3 From 447764763cd2608cbd47954f98113edd71b5e801 Mon Sep 17 00:00:00 2001 From: ksss Date: Sat, 15 Mar 2014 08:12:48 +0900 Subject: add test for Array#each_index if non block given --- mrbgems/mruby-enumerator/test/enumerator.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'mrbgems/mruby-enumerator/test/enumerator.rb') diff --git a/mrbgems/mruby-enumerator/test/enumerator.rb b/mrbgems/mruby-enumerator/test/enumerator.rb index 857615991..4ab857ae8 100644 --- a/mrbgems/mruby-enumerator/test/enumerator.rb +++ b/mrbgems/mruby-enumerator/test/enumerator.rb @@ -448,6 +448,17 @@ assert 'Enumerable#map' do assert_equal [[1,0],[4,1],[9,4]], c end +assert 'Array#each_index' do + a = [1,2,3] + b = a.each_index + c = [] + b.with_index do |index1,index2| + c << [index1+2,index2+5] + end + assert_equal [1,2,3], a + assert_equal [[2,5],[3,6],[4,7]], c +end + assert 'Array#map!' do a = [1,2,3] b = a.map! -- cgit v1.2.3