[Bug #21185] Fix Range#overlap? with infinite range

Infinite ranges, i.e. unbounded ranges, should overlap with any other range
which wasn't the case in the following example: (0..3).overlap?(nil..nil)
This commit is contained in:
Jérôme Parent-Lévesque 2025-03-15 15:05:50 -04:00 committed by Nobuyoshi Nakada
parent 3e04f7b69f
commit b5cdbadeed
Notes: git 2025-05-14 12:41:59 +00:00
2 changed files with 2 additions and 1 deletions

View File

@ -2561,7 +2561,7 @@ range_overlap(VALUE range, VALUE other)
/* if both begin values are equal, no more comparisons needed */
if (rb_cmpint(cmp, self_beg, other_beg) == 0) return Qtrue;
}
else if (NIL_P(self_beg) && !NIL_P(self_end) && NIL_P(other_beg)) {
else if (NIL_P(self_beg) && !NIL_P(self_end) && NIL_P(other_beg) && !NIL_P(other_end)) {
VALUE cmp = rb_funcall(self_end, id_cmp, 1, other_end);
return RBOOL(!NIL_P(cmp));
}

View File

@ -1513,6 +1513,7 @@ class TestRange < Test::Unit::TestCase
assert_operator((nil..nil), :overlap?, (3..))
assert_operator((nil...nil), :overlap?, (nil..))
assert_operator((nil..nil), :overlap?, (..3))
assert_operator((..3), :overlap?, (nil..nil))
assert_raise(TypeError) { (1..3).overlap?(1) }