diff options
-rw-r--r-- | range.c | 10 | ||||
-rw-r--r-- | test/ruby/test_range.rb | 2 |
2 files changed, 9 insertions, 3 deletions
@@ -1789,8 +1789,12 @@ range_string_range_p(VALUE beg, VALUE end) } static inline VALUE -range_include_fallback(VALUE beg, VALUE end) +range_include_fallback(VALUE beg, VALUE end, VALUE val) { + if (NIL_P(beg) && NIL_P(end)) { + if (linear_object_p(val)) return Qtrue; + } + if (NIL_P(beg) || NIL_P(end)) { rb_raise(rb_eTypeError, "cannot determine inclusion in beginless/endless ranges"); } @@ -1828,7 +1832,7 @@ range_string_cover_internal(VALUE range, VALUE val) } } - return range_include_fallback(beg, end); + return range_include_fallback(beg, end, val); } static VALUE @@ -1846,7 +1850,7 @@ range_include_internal(VALUE range, VALUE val) return rb_str_include_range_p(beg, end, val, RANGE_EXCL(range)); } - return range_include_fallback(beg, end); + return range_include_fallback(beg, end, val); } static int r_cover_range_p(VALUE range, VALUE beg, VALUE end, VALUE val); diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index 0a131644e5..0a68824f11 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -579,6 +579,8 @@ class TestRange < Test::Unit::TestCase assert_not_operator(0..10, :===, 11) assert_operator(5..nil, :===, 11) assert_not_operator(5..nil, :===, 0) + assert_operator(nil..10, :===, 0) + assert_operator(nil..nil, :===, 0) end def test_eqq_string |