From: owen@... Date: 2018-02-21T16:54:50+00:00 Subject: [ruby-core:85734] [Ruby trunk Feature#14473] Add Range#subrange? Issue #14473 has been updated by owst (Owen Stephens). So, something like (naive implementation in Ruby): ~~~ ruby Range.class_exec do def subset?(other) raise ArgumentError unless other.is_a?(Range) first >= other.first && last <= other.last end def proper_subset?(other) raise ArgumentError unless other.is_a?(Range) self != other && subset?(other) end def superset?(other) raise ArgumentError unless other.is_a?(Range) first <= other.first && last >= other.last end def proper_superset?(other) raise ArgumentError unless other.is_a?(Range) self != other && superset?(other) end end require 'minitest/autorun' class TestRange < MiniTest::Test def test_subset assert_equal true, (1..10).subset?(1..10) assert_equal true, (2..9).subset?(1..10) assert_equal true, (1..9).subset?(1..10) assert_equal true, (2..10).subset?(1..10) assert_equal false, (0..11).subset?(1..10) assert_equal false, (0..10).subset?(1..10) assert_equal false, (1..11).subset?(1..10) assert_raises(ArgumentError) { (1..10).subset?('not a range') } end def test_proper_subset assert_equal false, (1..10).proper_subset?(1..10) assert_equal true, (2..9).proper_subset?(1..10) assert_equal true, (1..9).proper_subset?(1..10) assert_equal true, (2..10).proper_subset?(1..10) assert_equal false, (0..11).proper_subset?(1..10) assert_equal false, (0..10).proper_subset?(1..10) assert_equal false, (1..11).proper_subset?(1..10) assert_raises(ArgumentError) { (1..10).proper_subset?('not a range') } end def test_superset assert_equal true, (1..10).superset?(1..10) assert_equal false, (2..9).superset?(1..10) assert_equal false, (1..9).superset?(1..10) assert_equal false, (2..10).superset?(1..10) assert_equal true, (0..11).superset?(1..10) assert_equal true, (0..10).superset?(1..10) assert_equal true, (1..11).superset?(1..10) assert_raises(ArgumentError) { (1..10).superset?('not a range') } end def test_proper_superset assert_equal false, (1..10).proper_superset?(1..10) assert_equal false, (2..9).proper_superset?(1..10) assert_equal false, (1..9).proper_superset?(1..10) assert_equal false, (2..10).proper_superset?(1..10) assert_equal true, (0..11).proper_superset?(1..10) assert_equal true, (0..10).proper_superset?(1..10) assert_equal true, (1..11).proper_superset?(1..10) assert_raises(ArgumentError) { (1..10).proper_superset?('not a range') } end end ~~~ For the record, I'd be interested in taking a stab at implementing this in MRI, if the proposal is accepted. ---------------------------------------- Feature #14473: Add Range#subrange? https://bugs.ruby-lang.org/issues/14473#change-70545 * 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 ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: