Issue #14473 has been updated by owst (Owen Stephens).


Good questions duerst. I wonder if I should have stuck with the `subrange` naming rather than `subset`, due to the Numeric behaviour.

> What e.g. should be the result of (5..10).subset?(5.5..7.9)? 

The implementation I have used in my patch is equivalent to:

~~~ ruby
(5.5..7.9).cover?((5..10).min) && (5.5..7.9).cover?((5..10).max)
~~~

which is false, but means

~~~ruby
(6..7).subset?(5.5..8.5)
~~~

is true as both `(5.5..8.5).cover?(6)` and `(5.5..8.5).cover?(7)` are true. 

I think this result is what I would expect - what do you think?


> Or what if we introduce something like Range.new(1, 10, step: 2), which would produce [1, 3, 5, 7, 9] when converted to an Array?

 Assuming the implementation in terms of `cover?` (and using the `subrange?` naming) I think this would still make sense:

~~~ruby
(2..4).subrange?(Range.new(1, 5, step: 2)) # => true
~~~

----------------------------------------
Feature #14473: Add Range#subrange?
https://bugs.ruby-lang.org/issues/14473#change-70619

* Author: greggzst (Grzegorz Jakubiak)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Hi there,

I'd like to propose a method that returns true when a range that the method gets called on is a subrange of a range passed in as an argument.

Example:

~~~ ruby
(2..4).subrange?(1...4) 
=> true
(-2..2).subrange?(-1..3) 
=> false
~~~




---Files--------------------------------
0001-range.c-add-subset-superset-methods.patch (8.84 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>