From: "jeromepl (Jerome Parent-Levesque) via ruby-core" Date: 2024-09-12T13:03:11+00:00 Subject: [ruby-core:119136] [Ruby master Bug#20725] Inconsistent handling of doubly-unbounded ranges in Range#overlap? Issue #20725 has been reported by jeromepl (Jerome Parent-Levesque). ---------------------------------------- Bug #20725: Inconsistent handling of doubly-unbounded ranges in Range#overlap? https://bugs.ruby-lang.org/issues/20725 * Author: jeromepl (Jerome Parent-Levesque) * Status: Open * ruby -v: ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [arm64-darwin23] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- The new `Range#overlap?` method does not seem to have a clear definition of how it behaves when passed ranges with nil begin **and** end `(nil..)`. In the following two cases, it seems to treat this type of range as an "infinite" range that covers the entire space and therefore overlaps with anything: ``` (nil..nil).overlap?(nil..) # => true (nil..nil).overlap?(3..) # => true ``` However it behaves differently in this case: ``` (nil..nil).overlap?(..3) # => false ``` Note that this also behaves differently than the ActiveSupport implementation of #overlap? in a Ruby version < 3.3 such as 3.2: ``` require "active_support" (nil..nil).overlap?(..3) # => true ``` I think `(nil..nil)` ranges should always be considered to be completely unbounded, i.e. infinite and covering the whole space. They should therefore always return `true` when overlapping with any non-empty range. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/