From d4319541e870b3ec37ddb73d399dafcb39db35e7 Mon Sep 17 00:00:00 2001 From: mame Date: Wed, 3 Apr 2019 08:35:57 +0000 Subject: [PATCH] range.c (r_cover_range_p): support beginless range `(..2).cover?(..1)` should return true. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67423 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- range.c | 5 +++-- test/ruby/test_range.rb | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/range.c b/range.c index 6895511e59..acf4a5cd74 100644 --- a/range.c +++ b/range.c @@ -1484,8 +1484,9 @@ r_cover_range_p(VALUE range, VALUE beg, VALUE end, VALUE val) val_end = RANGE_END(val); if (!NIL_P(end) && NIL_P(val_end)) return FALSE; - if (!NIL_P(val_end) && r_less(val_beg, val_end) > -EXCL(val)) return FALSE; - if (!r_cover_p(range, beg, end, val_beg)) return FALSE; + if (!NIL_P(beg) && NIL_P(val_beg)) return FALSE; + if (!NIL_P(val_beg) && !NIL_P(val_end) && r_less(val_beg, val_end) > -EXCL(val)) return FALSE; + if (!NIL_P(val_beg) && !r_cover_p(range, beg, end, val_beg)) return FALSE; cmp_end = r_less(end, val_end); diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index 6c1761f3b0..b631c7d2b9 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -581,6 +581,9 @@ class TestRange < Test::Unit::TestCase assert_operator(2.., :cover?, 2..) assert_operator(2.., :cover?, 3..) assert_operator(1.., :cover?, 1..10) + assert_operator(..2, :cover?, ..2) + assert_operator(..2, :cover?, ..1) + assert_operator(..2, :cover?, 0..1) assert_operator(2.0..5.0, :cover?, 2..3) assert_operator(2..5, :cover?, 2.0..3.0) assert_operator(2..5, :cover?, 2.0...3.0) @@ -604,7 +607,9 @@ class TestRange < Test::Unit::TestCase assert_not_operator(1...2, :cover?, 1...3) assert_not_operator(2.., :cover?, 1..) assert_not_operator(2.., :cover?, 1..10) + assert_not_operator(2.., :cover?, ..10) assert_not_operator(1..10, :cover?, 1..) + assert_not_operator(1..10, :cover?, ..1) assert_not_operator(1..5, :cover?, 3..2) assert_not_operator(1..10, :cover?, 3...2) assert_not_operator(1..10, :cover?, 3...3)