From: al2o3cr@... Date: 2018-02-23T16:30:31+00:00 Subject: [ruby-core:85778] [Ruby trunk Feature#14473] Add Range#subrange? Issue #14473 has been updated by al2o3cr (Matt Jones). Minor point: IMO a "Range with steps" isn't a Range, it's something else. It doesn't seem relevant to the discussion. Bigger point: the tests on improper ranges in the patch seem to imply some odd consequences: ~~~ ruby range_1 = "g".."f" range_2 = "b".."e" range_1.subset?(range_2) # => true range_2.any? { |el| range_1.include? el } # => false ~~~ So `range_1` claims to be a subset of `range_2`, but no elements of `range_2` are included in `range_1`. ~~~ ruby range_3 = "d".."a" range_1.subset?(range_3) # => true range_3.subset?(range_1) # => true ~~~ Generally, `a <= b` and `b <= a` implies `a == b`. In this case, however, the early return in `range_subset` means that any improper range passed to `subset?` will return `true`. `min` and `max` also have bad performance characteristics for exclusive ranges that `linear_object_p` returns `false` for, as they need to generate all the intermediate elements using `succ`. For instance, attempting to evaluate `("aaaaaaaaaa"..."zzzzzzzzzz").max` ran for over a minute before I gave up and aborted it. There's also explicit code (see `discrete_object_p` and callsites) that makes exclusive ranges of `Time` objects raise `TypeError` if you call `max` on them. ---------------------------------------- Feature #14473: Add Range#subrange? https://bugs.ruby-lang.org/issues/14473#change-70627 * 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) v2-0001-range.c-add-subset-superset-methods.patch (8.85 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: