From: owen@... Date: 2018-02-23T17:43:43+00:00 Subject: [ruby-core:85780] [Ruby trunk Feature#14473] Add Range#subrange? Issue #14473 has been updated by owst (Owen Stephens). Thanks for your thoughts al2o3cr, your "bigger point" is interesting: > So range_1 claims to be a subset of range_2, but no elements of range_2 are included in range_1. My thinking here was that the empty set is a subset of all sets, so similar behaviour seemed reasonable for empty/invalid Ranges, i.e. phrase the subset "definition" as: "all elements of range_1 are covered by range_2", which is vacuously true. You're right about the implication for `<=` so maybe it's a bad idea to treat "empty"/invalid ranges as if they were empty sets (and thus all equivalent). However, the same thing is true for exclusive/inclusive ranges that contain the same elements (when considered as sets): ~~~ruby > (1..2).subset?(1...3) => true > (1...3).subset?(1..2) => true > (1..2) == (1...3) => false > Set.new((1..2)) == Set.new((1...3)) => true ~~~ With `..` vs `...` we can have non-equal Range representations of the same set of elements. I'm not sure what to suggest here. It doesn't quite feel right to restrict `subset?` to only allow an argument with the same `exclude_end?` value. > min and max also have bad performance characteristics for exclusive ranges that linear_object_p returns false for, Yes, I didn't like this myself, I'm glad you've brought it up. An option would be to prevent such calls from occurring, which doesn't seem nice, but is probably preferable to performance issues? ---------------------------------------- Feature #14473: Add Range#subrange? https://bugs.ruby-lang.org/issues/14473#change-70629 * 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: