1
0
Fork 0
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:
TSUYUSATO Kitsune 2021-10-25 12:13:44 +09:00 committed by GitHub
parent aa09c8dae0
commit dfb47bbd17
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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
View file

@ -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

View file

@ -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')

View file

@ -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')

View file

@ -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