From da4464b824857d7610f9865ceb452ce0ead49164 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 9 Feb 2023 20:37:34 +0900 Subject: [Bug #19426] Fix endless `Range#step` with `#succ` method --- test/ruby/test_range.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'test/ruby') diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index bb5ef6df8f..0a131644e5 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -392,6 +392,26 @@ class TestRange < Test::Unit::TestCase assert_equal(4, (1.0...5.6).step(1.5).to_a.size) end + def test_step_with_succ + c = Struct.new(:i) do + def succ; self.class.new(i+1); end + def <=>(other) i <=> other.i;end + end.new(0) + + result = [] + (c..c.succ).step(2) do |d| + result << d.i + end + assert_equal([0], result) + + result = [] + (c..).step(2) do |d| + result << d.i + break if d.i >= 4 + end + assert_equal([0, 2, 4], result) + end + def test_each a = [] (0..10).each {|x| a << x } @@ -456,6 +476,26 @@ class TestRange < Test::Unit::TestCase assert_equal(["a", "b", "c"], a) end + def test_each_with_succ + c = Struct.new(:i) do + def succ; self.class.new(i+1); end + def <=>(other) i <=> other.i;end + end.new(0) + + result = [] + (c..c.succ).each do |d| + result << d.i + end + assert_equal([0, 1], result) + + result = [] + (c..).each do |d| + result << d.i + break if d.i >= 4 + end + assert_equal([0, 1, 2, 3, 4], result) + end + def test_begin_end assert_equal(0, (0..1).begin) assert_equal(1, (0..1).end) -- cgit v1.2.3