mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Fix Enumerable#each_cons
and Enumerable#each_slice
to return a receiver
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com> Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
This commit is contained in:
parent
aa09c8dae0
commit
dfb47bbd17
Notes:
git
2021-10-25 12:14:06 +09:00
Merged: https://github.com/ruby/ruby/pull/1509 Merged-By: nobu <nobu@ruby-lang.org>
4 changed files with 14 additions and 10 deletions
12
enum.c
12
enum.c
|
@ -2961,11 +2961,11 @@ enum_each_slice_size(VALUE obj, VALUE args, VALUE eobj)
|
|||
|
||||
/*
|
||||
* call-seq:
|
||||
* each_slice(n) { ... } -> nil
|
||||
* each_slice(n) { ... } -> self
|
||||
* each_slice(n) -> enumerator
|
||||
*
|
||||
* Calls the block with each successive disjoint +n+-tuple of elements;
|
||||
* returns +nil+:
|
||||
* returns +self+:
|
||||
*
|
||||
* a = []
|
||||
* (1..10).each_slice(3) {|tuple| a.push(tuple) } # => nil
|
||||
|
@ -2997,7 +2997,7 @@ enum_each_slice(VALUE obj, VALUE n)
|
|||
ary = memo->v1;
|
||||
if (RARRAY_LEN(ary) > 0) rb_yield(ary);
|
||||
|
||||
return Qnil;
|
||||
return obj;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -3040,11 +3040,11 @@ enum_each_cons_size(VALUE obj, VALUE args, VALUE eobj)
|
|||
|
||||
/*
|
||||
* call-seq:
|
||||
* each_cons(n) { ... } -> nil
|
||||
* each_cons(n) { ... } -> self
|
||||
* each_cons(n) -> enumerator
|
||||
*
|
||||
* Calls the block with each successive overlapped +n+-tuple of elements;
|
||||
* returns +nil+:
|
||||
* returns +self+:
|
||||
*
|
||||
* a = []
|
||||
* (1..5).each_cons(3) {|element| a.push(element) } # => nil
|
||||
|
@ -3072,7 +3072,7 @@ enum_each_cons(VALUE obj, VALUE n)
|
|||
memo = MEMO_NEW(rb_ary_new2(size), dont_recycle_block_arg(arity), size);
|
||||
rb_block_call(obj, id_each, 0, 0, each_cons_i, (VALUE)memo);
|
||||
|
||||
return Qnil;
|
||||
return obj;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
|
|
@ -10,7 +10,7 @@ describe "Enumerable#each_cons" do
|
|||
|
||||
it "passes element groups to the block" do
|
||||
acc = []
|
||||
@enum.each_cons(3){|g| acc << g}.should be_nil
|
||||
@enum.each_cons(3){|g| acc << g}
|
||||
acc.should == @in_threes
|
||||
end
|
||||
|
||||
|
@ -27,7 +27,7 @@ describe "Enumerable#each_cons" do
|
|||
|
||||
it "tries to convert n to an Integer using #to_int" do
|
||||
acc = []
|
||||
@enum.each_cons(3.3){|g| acc << g}.should == nil
|
||||
@enum.each_cons(3.3){|g| acc << g}
|
||||
acc.should == @in_threes
|
||||
|
||||
obj = mock('to_int')
|
||||
|
|
|
@ -10,7 +10,7 @@ describe "Enumerable#each_slice" do
|
|||
|
||||
it "passes element groups to the block" do
|
||||
acc = []
|
||||
@enum.each_slice(3){|g| acc << g}.should be_nil
|
||||
@enum.each_slice(3){|g| acc << g}
|
||||
acc.should == @sliced
|
||||
end
|
||||
|
||||
|
@ -27,7 +27,7 @@ describe "Enumerable#each_slice" do
|
|||
|
||||
it "tries to convert n to an Integer using #to_int" do
|
||||
acc = []
|
||||
@enum.each_slice(3.3){|g| acc << g}.should == nil
|
||||
@enum.each_slice(3.3){|g| acc << g}
|
||||
acc.should == @sliced
|
||||
|
||||
obj = mock('to_int')
|
||||
|
|
|
@ -731,6 +731,8 @@ class TestEnumerable < Test::Unit::TestCase
|
|||
ary.clear
|
||||
(1..10).each_slice(11) {|a| ary << a}
|
||||
assert_equal([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]], ary)
|
||||
|
||||
assert_equal(1..10, (1..10).each_slice(3) { })
|
||||
end
|
||||
|
||||
def test_each_cons
|
||||
|
@ -750,6 +752,8 @@ class TestEnumerable < Test::Unit::TestCase
|
|||
ary.clear
|
||||
(1..5).each_cons(6) {|a| ary << a}
|
||||
assert_empty(ary)
|
||||
|
||||
assert_equal(1..5, (1..5).each_cons(3) { })
|
||||
end
|
||||
|
||||
def test_zip
|
||||
|
|
Loading…
Add table
Reference in a new issue