From f1fb989f1a17c63af1062ea402ed50f0d6cb4efa Mon Sep 17 00:00:00 2001 From: mrkn Date: Thu, 4 Apr 2019 03:34:55 +0000 Subject: enumerator.c: make arith_seq_first support nil begin * enumerator.c: (arith_seq_first): support nil begin. * test/ruby/test_arithmetic_sequence.rb (test_first): add assertions for beginless and endless arithmetic sequences. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- enumerator.c | 3 +++ test/ruby/test_arithmetic_sequence.rb | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/enumerator.c b/enumerator.c index 37f8e6bf21..cfc6a5dd98 100644 --- a/enumerator.c +++ b/enumerator.c @@ -3029,6 +3029,9 @@ arith_seq_first(int argc, VALUE *argv, VALUE self) e = arith_seq_end(self); s = arith_seq_step(self); if (argc == 0) { + if (NIL_P(b)) { + return Qnil; + } if (!NIL_P(e)) { VALUE zero = INT2FIX(0); int r = rb_cmpint(rb_num_coerce_cmp(s, zero, idCmp), s, zero); diff --git a/test/ruby/test_arithmetic_sequence.rb b/test/ruby/test_arithmetic_sequence.rb index c9779808ca..5817631944 100644 --- a/test/ruby/test_arithmetic_sequence.rb +++ b/test/ruby/test_arithmetic_sequence.rb @@ -170,6 +170,16 @@ class TestArithmeticSequence < Test::Unit::TestCase assert_equal(10.0, seq.first) assert_equal([10.0], seq.first(1)) assert_equal([10.0, 8.0, 6.0], seq.first(3)) + + seq = (1..).step(2) + assert_equal(1, seq.first) + assert_equal([1], seq.first(1)) + assert_equal([1, 3, 5], seq.first(3)) + + seq = (..10).step(2) + assert_equal(nil, seq.first) + assert_raise(TypeError) { seq.first(1) } + assert_raise(TypeError) { seq.first(3) } end def test_first_bug15518 -- cgit v1.2.3