summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--range.c10
-rw-r--r--test/ruby/test_range.rb4
2 files changed, 10 insertions, 4 deletions
diff --git a/range.c b/range.c
index 3414525a12..c2fa6abeeb 100644
--- a/range.c
+++ b/range.c
@@ -749,9 +749,15 @@ static VALUE
range_size(VALUE range)
{
VALUE b = RANGE_BEG(range), e = RANGE_END(range);
- if (rb_obj_is_kind_of(b, rb_cNumeric) && rb_obj_is_kind_of(e, rb_cNumeric)) {
- return ruby_num_interval_step_size(b, e, INT2FIX(1), EXCL(range));
+ if (rb_obj_is_kind_of(b, rb_cNumeric)) {
+ if (rb_obj_is_kind_of(e, rb_cNumeric)) {
+ return ruby_num_interval_step_size(b, e, INT2FIX(1), EXCL(range));
+ }
+ if (NIL_P(e)) {
+ return DBL2NUM(HUGE_VAL);
+ }
}
+
return Qnil;
}
diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb
index 3cbd155d84..a57cf18bbf 100644
--- a/test/ruby/test_range.rb
+++ b/test/ruby/test_range.rb
@@ -582,8 +582,8 @@ class TestRange < Test::Unit::TestCase
assert_equal 42, (1..42).each.size
assert_nil ("a"..."z").size
- assert_nil (1...).size
- assert_nil (1.0...).size
+ assert_equal Float::INFINITY, (1...).size
+ assert_equal Float::INFINITY, (1.0...).size
assert_nil ("a"...).size
end