rangeary 0.3.0 → 2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
 - data/.gitignore +55 -0
 - data/ChangeLog +33 -0
 - data/Makefile +24 -0
 - data/News +8 -0
 - data/README.ja.rdoc +597 -146
 - data/lib/rangeary/util/hash_inf.rb +233 -0
 - data/lib/rangeary/util.rb +727 -0
 - data/lib/rangeary.rb +1420 -0
 - data/rangeary.gemspec +27 -24
 - data/test/tee_io.rb +111 -0
 - data/test/test_rangeary.rb +534 -87
 - metadata +29 -23
 - data/lib/rangeary/rangeary.rb +0 -1210
 
    
        data/test/test_rangeary.rb
    CHANGED
    
    | 
         @@ -1,52 +1,27 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # -*- encoding: utf-8 -*-
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require 'tempfile'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "tee_io.rb"  # Library to suppress STDERR/STDOUT <https://gist.github.com/masasakano/789030a7dc5313bd343b2de967a93200>
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       3 
6 
     | 
    
         
             
            $stdout.sync=true
         
     | 
| 
       4 
7 
     | 
    
         
             
            $stderr.sync=true
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            arlibrelpath = []
         
     | 
| 
      
 8 
     | 
    
         
            +
            print "$LOAD_PATH=#{$LOAD_PATH}" if $DEBUG
         
     | 
| 
       7 
9 
     | 
    
         
             
            arlibbase = %w(rangeary)
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            arlibbase. 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
               
     | 
| 
       13 
     | 
    
         
            -
              er=nil
         
     | 
| 
       14 
     | 
    
         
            -
              pathnow = nil
         
     | 
| 
       15 
     | 
    
         
            -
              (['../lib/', 'lib/', ''].map{|i| i+elibbase+'/'} + ['']).each do |dir|
         
     | 
| 
       16 
     | 
    
         
            -
                # eg., pathcand = %w(../lib/rangesmaller/ lib/rangesmaller/ rangesmaller/) + ['']
         
     | 
| 
       17 
     | 
    
         
            -
                begin
         
     | 
| 
       18 
     | 
    
         
            -
                  s = dir+File.basename(elibbase)
         
     | 
| 
       19 
     | 
    
         
            -
                  arAllPaths.push(s)
         
     | 
| 
       20 
     | 
    
         
            -
            #print "Trying: "; puts s
         
     | 
| 
       21 
     | 
    
         
            -
                  require s
         
     | 
| 
       22 
     | 
    
         
            -
                  pathnow = s
         
     | 
| 
       23 
     | 
    
         
            -
                  break
         
     | 
| 
       24 
     | 
    
         
            -
                rescue LoadError => er
         
     | 
| 
       25 
     | 
    
         
            -
                end
         
     | 
| 
       26 
     | 
    
         
            -
              end	# (['../lib/', 'lib/', ''].map{|i| i+elibbase+'/'} + '').each do |dir|
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
              if pathnow.nil?
         
     | 
| 
       29 
     | 
    
         
            -
                warn "Warning: All the attempts to load the following files have failed.  Abort..."
         
     | 
| 
       30 
     | 
    
         
            -
                warn arAllPaths.inspect
         
     | 
| 
       31 
     | 
    
         
            -
                warn " NOTE: It may be because a require statement in that file failed, 
         
     | 
| 
       32 
     | 
    
         
            -
            rather than requiring the file itself.
         
     | 
| 
       33 
     | 
    
         
            -
             Check with  % ruby -r#{File.basename(elibbase)} -e p
         
     | 
| 
       34 
     | 
    
         
            -
             or maybe add  env RUBYLIB=$RUBYLIB:`pwd`"
         
     | 
| 
       35 
     | 
    
         
            -
                # p $LOADED_FEATURES.grep(/#{Regexp.quote(File.basename(elibbase)+'.rb')}$/)
         
     | 
| 
       36 
     | 
    
         
            -
                raise er
         
     | 
| 
       37 
     | 
    
         
            -
              else
         
     | 
| 
       38 
     | 
    
         
            -
            #print pathnow," is loaded!\n"
         
     | 
| 
       39 
     | 
    
         
            -
                arlibrelpath.push pathnow
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            arlibrelbase = arlibbase.map{|i| "../lib/"+i}
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            arlibrelbase.each do |elibbase|
         
     | 
| 
      
 14 
     | 
    
         
            +
              require_relative elibbase
         
     | 
| 
       41 
15 
     | 
    
         
             
            end	# arlibbase.each do |elibbase|
         
     | 
| 
       42 
16 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            print "NOTE: Library relative paths: "; p  
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
            print "NOTE: Library relative paths: "; p arlibrelbase
         
     | 
| 
      
 18 
     | 
    
         
            +
            arlibbase4full = arlibbase.map{|i| i.sub(%r@^(../)+@, "")}+%w(range_extd)
         
     | 
| 
      
 19 
     | 
    
         
            +
            puts  "NOTE: Library full paths for #{arlibbase4full.inspect}: "
         
     | 
| 
      
 20 
     | 
    
         
            +
            arlibbase4full.each do |elibbase|
         
     | 
| 
      
 21 
     | 
    
         
            +
              ar = $LOADED_FEATURES.grep(/(^|\/)#{Regexp.quote(File.basename(elibbase))}(\.rb)?$/).uniq
         
     | 
| 
      
 22 
     | 
    
         
            +
              print elibbase+": " if ar.empty?; p ar
         
     | 
| 
       47 
23 
     | 
    
         
             
            end
         
     | 
| 
       48 
24 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
25 
     | 
    
         
             
            #################################################
         
     | 
| 
       51 
26 
     | 
    
         
             
            # Unit Test
         
     | 
| 
       52 
27 
     | 
    
         
             
            #################################################
         
     | 
| 
         @@ -145,6 +120,9 @@ end 
     | 
|
| 
       145 
120 
     | 
    
         
             
                F = false
         
     | 
| 
       146 
121 
     | 
    
         
             
                RaN = Rangeary(RangeExtd::NONE)
         
     | 
| 
       147 
122 
     | 
    
         
             
                RaA = Rangeary(RangeExtd::ALL)
         
     | 
| 
      
 123 
     | 
    
         
            +
                InfF = Float::INFINITY
         
     | 
| 
      
 124 
     | 
    
         
            +
                InfP = RangeExtd::Infinity::POSITIVE
         
     | 
| 
      
 125 
     | 
    
         
            +
                InfN = RangeExtd::Infinity::NEGATIVE
         
     | 
| 
       148 
126 
     | 
    
         | 
| 
       149 
127 
     | 
    
         
             
                def setup
         
     | 
| 
       150 
128 
     | 
    
         
             
                  @ib = 1
         
     | 
| 
         @@ -167,8 +145,96 @@ end 
     | 
|
| 
       167 
145 
     | 
    
         
             
                end
         
     | 
| 
       168 
146 
     | 
    
         | 
| 
       169 
147 
     | 
    
         | 
| 
      
 148 
     | 
    
         
            +
                def test__get_infinities
         
     | 
| 
      
 149 
     | 
    
         
            +
                  rn = Rangeary.new
         
     | 
| 
      
 150 
     | 
    
         
            +
                  hs = rn.instance_eval{_build_infinities({}, [(77..78)])}
         
     | 
| 
      
 151 
     | 
    
         
            +
                  assert_equal(-InfF, hs[:negative])
         
     | 
| 
      
 152 
     | 
    
         
            +
                  assert_equal( InfF, hs[:positive])
         
     | 
| 
      
 153 
     | 
    
         
            +
                  hs = rn.instance_eval{_build_infinities({}, [(77...InfF)])}
         
     | 
| 
      
 154 
     | 
    
         
            +
                  assert_equal(-InfF, hs[:negative])
         
     | 
| 
      
 155 
     | 
    
         
            +
                  assert_equal( InfF, hs[:positive])
         
     | 
| 
      
 156 
     | 
    
         
            +
                  hs = rn.instance_eval{_build_infinities({}, [(-InfF..78)])}
         
     | 
| 
      
 157 
     | 
    
         
            +
                  assert_equal(-InfF, hs[:negative])
         
     | 
| 
      
 158 
     | 
    
         
            +
                  assert_equal( InfF, hs[:positive])
         
     | 
| 
      
 159 
     | 
    
         
            +
                  #hs = rn.instance_eval{_get_infinities [(77...InfF)], guess_strict: true}
         
     | 
| 
      
 160 
     | 
    
         
            +
                  #assert_equal false, hs[:negative]
         
     | 
| 
      
 161 
     | 
    
         
            +
                  #assert_equal( InfF, hs[:positive])
         
     | 
| 
      
 162 
     | 
    
         
            +
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                def test_comparable_end
         
     | 
| 
      
 165 
     | 
    
         
            +
                  assert_equal 3,    Rangeary.comparable_end(0...3)
         
     | 
| 
      
 166 
     | 
    
         
            +
                  assert_equal InfF, Rangeary.comparable_end(0...Float::INFINITY)
         
     | 
| 
      
 167 
     | 
    
         
            +
                  assert_nil         Rangeary.comparable_end(RangeExtd::NONE)
         
     | 
| 
      
 168 
     | 
    
         
            +
                  _ = nil..nil  rescue return  # nil..nil may raise Exception in some Ruby versions
         
     | 
| 
      
 169 
     | 
    
         
            +
                  #assert_nil         Rangeary.comparable_end(nil..nil)  # Ruby-2.6
         
     | 
| 
      
 170 
     | 
    
         
            +
                  assert_equal InfP, Rangeary.comparable_end(nil..nil)
         
     | 
| 
      
 171 
     | 
    
         
            +
                  assert_equal InfP, Rangeary.comparable_end(nil...nil)
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                # Since Ruby-2.7
         
     | 
| 
      
 175 
     | 
    
         
            +
                def test_comparable_beginend
         
     | 
| 
      
 176 
     | 
    
         
            +
                  assert_raises(RangeError){Rangeary.comparable_beginend(RangeExtd::Nowhere::NOWHERE..RangeExtd::Nowhere::NOWHERE) }	# ! Range#valid?
         
     | 
| 
      
 177 
     | 
    
         
            +
                  assert_raises(RangeError){Rangeary.comparable_beginend(?a...?a) }	# because !Range#valid?
         
     | 
| 
      
 178 
     | 
    
         
            +
                  assert_equal RaE(5...9),        Rangeary.comparable_beginend(5...9)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  assert_equal RaE(?a..?b, true), Rangeary.comparable_beginend(RaE(?a, ?b, true))
         
     | 
| 
      
 180 
     | 
    
         
            +
                  assert_equal RaE(?a..?b, true), Rangeary.comparable_beginend(RaE(?a, ?b, true))
         
     | 
| 
      
 181 
     | 
    
         
            +
                  assert_equal RaE(InfN...InfP),  Rangeary.comparable_beginend(...nil)
         
     | 
| 
      
 182 
     | 
    
         
            +
                  assert_equal RaE(-InfF...9.3, T), Rangeary.comparable_beginend(RaE(...9.3, true))
         
     | 
| 
      
 183 
     | 
    
         
            +
                  assert_equal RaE(9.3..InfF),  Rangeary.comparable_beginend(9.3..)
         
     | 
| 
      
 184 
     | 
    
         
            +
                  assert_equal RaE(?a...InfP),  Rangeary.comparable_beginend(?a...)
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                  # infinities are given.
         
     | 
| 
      
 187 
     | 
    
         
            +
                  hsinf = {negative: ?a, positive: ?z}
         
     | 
| 
      
 188 
     | 
    
         
            +
                  assert_equal RangeExtd(?b...?z),   Rangeary.comparable_beginend(?b..., infinities: hsinf)
         
     | 
| 
      
 189 
     | 
    
         
            +
                  assert_equal RangeExtd(?a..?d, T), Rangeary.comparable_beginend(RaE(..?d, T), infinities: hsinf)
         
     | 
| 
      
 190 
     | 
    
         
            +
                  ran = RaE(?c.., T)
         
     | 
| 
      
 191 
     | 
    
         
            +
                  hsinf = {positive: InfP}
         
     | 
| 
      
 192 
     | 
    
         
            +
                  assert_equal RaE(?c..InfP, T),     Rangeary.comparable_beginend(ran, infinities: hsinf)
         
     | 
| 
      
 193 
     | 
    
         
            +
                  assert_equal RaE(?c..InfP, T),     Rangeary.comparable_beginend(ran, infinities: {positive: nil}), "nil in infinities should be ignored in Rangeary.comparable_beginend()"
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                  # instance-method version
         
     | 
| 
      
 196 
     | 
    
         
            +
                  hsinf = {negative: ?a, positive: ?z}
         
     | 
| 
      
 197 
     | 
    
         
            +
                  ran = RaE(..?d, T)
         
     | 
| 
      
 198 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(ran, **hsinf) }  # raise: specified/inherited negative infinity ("a") is not small enough or inconsistent: (<=> nil)
         
     | 
| 
      
 199 
     | 
    
         
            +
                  ran = RaE(?a..?d, T)
         
     | 
| 
      
 200 
     | 
    
         
            +
                  rangy = Rangeary(ran, **hsinf)
         
     | 
| 
      
 201 
     | 
    
         
            +
                  assert_equal RaE(?a..?d, T), rangy.send(:_comparable_beginend, ran)
         
     | 
| 
      
 202 
     | 
    
         
            +
             
     | 
| 
      
 203 
     | 
    
         
            +
                  ran = RaE(?c.., T)
         
     | 
| 
      
 204 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(ran, **hsinf) }  # raise: specified/inherited negative infinity ("z") is not large enough or inconsistent: (<=> nil)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  rangy = Rangeary(ran)
         
     | 
| 
      
 206 
     | 
    
         
            +
                  assert_equal RaE(?c..InfP, T), rangy.send(:_comparable_beginend, ran)
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                  ran = RaE(?c..?z, T)
         
     | 
| 
      
 209 
     | 
    
         
            +
                  rangy = Rangeary(ran, **hsinf)
         
     | 
| 
      
 210 
     | 
    
         
            +
                  assert_equal ran,              rangy.send(:_comparable_beginend, ran)
         
     | 
| 
      
 211 
     | 
    
         
            +
                end
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
       170 
213 
     | 
    
         
             
                def test_sort_ranges
         
     | 
| 
       171 
214 
     | 
    
         
             
                  assert_equal [RangeExtd::NONE, 2..5, RangeExtd(2..5,9), 3..5, 3...6, 3..6], Rangeary.sort_ranges(RangeExtd(2..5,9), 2..5,3..6,3...6,3..5,RangeExtd::NONE)
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                  inf = Float::INFINITY
         
     | 
| 
      
 217 
     | 
    
         
            +
                  ra1 = RangeExtd(5,  inf, false, false)  # (5..inf)
         
     | 
| 
      
 218 
     | 
    
         
            +
                  ra2 = RangeExtd(5,  inf, false, true)   # (5...inf)
         
     | 
| 
      
 219 
     | 
    
         
            +
                  assert_equal [(5..9), ra2, ra1],   Rangeary.sort_ranges(ra1, ra2,  (5..9))
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
                  inf = RangeExtd::Infinity::POSITIVE
         
     | 
| 
      
 222 
     | 
    
         
            +
                  ra1 = RangeExtd(?a, inf, false, false)  # (?a..inf)
         
     | 
| 
      
 223 
     | 
    
         
            +
                  ra2 = RangeExtd(?a, inf, false, true)   # (?a...inf)
         
     | 
| 
      
 224 
     | 
    
         
            +
                  assert_equal [(?a..?d), ra2, ra1], Rangeary.sort_ranges(ra1, ra2, (?a..?d))
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                  # Ruby 2.6 Endless Range
         
     | 
| 
      
 227 
     | 
    
         
            +
                  assert_equal [(5..9),   (5...nil),  (5..nil)],  Rangeary.sort_ranges((5..nil),  (5...nil),  (5..9))
         
     | 
| 
      
 228 
     | 
    
         
            +
                  assert_equal [(?a..?d), (?a...nil), (?a..nil)], Rangeary.sort_ranges((?a..nil), (?a...nil), (?a..?d))
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                  # Ruby 2.7 Beginless Range
         
     | 
| 
      
 231 
     | 
    
         
            +
                  ran = RangeExtd(nil...5, T)
         
     | 
| 
      
 232 
     | 
    
         
            +
                  assert_equal [(nil..5),  ran, (1..5)  ], Rangeary.sort_ranges((1..5),   ran,  (..5))
         
     | 
| 
      
 233 
     | 
    
         
            +
                  ran = RangeExtd(nil...?d, T)
         
     | 
| 
      
 234 
     | 
    
         
            +
                  assert_equal [(nil..?d), ran, (?b..?d)], Rangeary.sort_ranges(ran, (?b..?d), (..?d))
         
     | 
| 
      
 235 
     | 
    
         
            +
                  assert_equal [(nil..?d), ran, (?b..?d)], Rangeary.sort_ranges(ran, (?b..?d), (..?d))
         
     | 
| 
      
 236 
     | 
    
         
            +
                  ran = RangeExtd(..9, T)
         
     | 
| 
      
 237 
     | 
    
         
            +
                  assert_equal RangeExtd::NONE,  Rangeary.sort_ranges(RaA, ran, RaN)[0]
         
     | 
| 
       172 
238 
     | 
    
         
             
                end	# def test_sort_ranges
         
     | 
| 
       173 
239 
     | 
    
         | 
| 
       174 
240 
     | 
    
         
             
                def test_new
         
     | 
| 
         @@ -179,9 +245,28 @@ end 
     | 
|
| 
       179 
245 
     | 
    
         | 
| 
       180 
246 
     | 
    
         
             
                  assert_raises(NoMethodError){ Rangeary.new(3..5).reverse }	# => undefined method `reverse' for <Rangeary:[3..5]>:Rangeary
         
     | 
| 
       181 
247 
     | 
    
         
             
                  assert_raises(RuntimeError){  Rangeary.new(3..5).reverse! }	# => can't modify frozen Rangeary
         
     | 
| 
       182 
     | 
    
         
            -
                  assert_raises(ArgumentError){ Rangeary.new(3..5, nil..nil) }	# => invalid parameter for RangeExtd, hence for Rangeary (nil..nil).
         
     | 
| 
       183 
     | 
    
         
            -
                   
     | 
| 
       184 
     | 
    
         
            -
                   
     | 
| 
      
 248 
     | 
    
         
            +
                  #assert_raises(ArgumentError){ Rangeary.new(3..5, nil..nil) }	# => invalid parameter for RangeExtd, hence for Rangeary (nil..nil).
         
     | 
| 
      
 249 
     | 
    
         
            +
                  assert_equal([..nil], Rangeary.new(3..5, RangeExtd::NONE, RangeExtd::NONE, nil..nil).to_a)	# nil..nil used to be an invalid parameter for RangeExtd, hence for Rangeary, too, before Ruby-2.7 (or 2.6?).
         
     | 
| 
      
 250 
     | 
    
         
            +
                  ran  = [..6, 9..InfF]
         
     | 
| 
      
 251 
     | 
    
         
            +
                  rang = Rangeary(*ran)
         
     | 
| 
      
 252 
     | 
    
         
            +
                  hsinf = {negative: nil, positive: InfF}
         
     | 
| 
      
 253 
     | 
    
         
            +
                  assert_equal ran, rang
         
     | 
| 
      
 254 
     | 
    
         
            +
                  assert_equal hsinf, rang.infinities  # Hash == HashInf
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
                  rang2 = Rangeary(11..13, Rangeary(*rang), 15..16)
         
     | 
| 
      
 257 
     | 
    
         
            +
                  assert_equal ran, rang2
         
     | 
| 
      
 258 
     | 
    
         
            +
                  assert_equal hsinf, rang2.infinities
         
     | 
| 
      
 259 
     | 
    
         
            +
             
     | 
| 
      
 260 
     | 
    
         
            +
                  assert_raises(ArgumentError, "this should fail because whereas the guessed positive infinity from the first one is Float:INFINITY, the second given infinity is +RangeExtd::Infinity::POSITIVE+, which is not comparable with +Float:INFINITY+ (although it is comparable with general Float)."
         
     | 
| 
      
 261 
     | 
    
         
            +
                               ){ Rangeary(..6, 9..InfP) }	# => "comparison of Float with RangeExtd::Infinity failed"
         
     | 
| 
      
 262 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary.new(3..5, 3..1) }	# => invalid parameter for RangeExtd
         
     | 
| 
      
 263 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary.new(3..5, 4...4) }	# => invalid parameter for RangeExtd
         
     | 
| 
      
 264 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(?d..?f, negative: ?a, positive: ?b) }	# => negative-infinity is larger than ?d
         
     | 
| 
      
 265 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(?d..?f, negative: ?e, positive: ?z) }	# => negative-infinity is larger than ?d
         
     | 
| 
      
 266 
     | 
    
         
            +
                  assert_raises(ArgumentError){   Rangeary(?b..?d, ?f...?h, ?g...?j, negative: ?b, positive: ?i) }
         
     | 
| 
      
 267 
     | 
    
         
            +
                  assert_equal [?b..?d, ?f...?j], Rangeary(?b..?d, ?f...?h, ?g...?j, negative: ?b, positive: ?j).to_a
         
     | 
| 
      
 268 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(RangeExtd::NONE, negative: ?c, positive: ?a) }  # negative is smaller than positive infinities
         
     | 
| 
      
 269 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(?a..?d, negative: -InfF) }  # contradictory infinities.
         
     | 
| 
       185 
270 
     | 
    
         
             
                end	# def test_new
         
     | 
| 
       186 
271 
     | 
    
         | 
| 
       187 
272 
     | 
    
         
             
                def test_new_infinity
         
     | 
| 
         @@ -191,11 +276,172 @@ end 
     | 
|
| 
       191 
276 
     | 
    
         
             
                  r1 = RangeExtd(-Float::INFINITY...6)
         
     | 
| 
       192 
277 
     | 
    
         
             
                  r2 = RangeExtd(2,Float::INFINITY,9)
         
     | 
| 
       193 
278 
     | 
    
         
             
                  r3 = RangeExtd(18,Float::INFINITY,9)
         
     | 
| 
       194 
     | 
    
         
            -
                  assert_equal [RangeExtd::ALL], Rangeary(r1,r2).to_a
         
     | 
| 
      
 279 
     | 
    
         
            +
                  # assert_equal [RangeExtd::ALL], Rangeary(r1,r2).to_a  # Before Ver.1
         
     | 
| 
      
 280 
     | 
    
         
            +
                  assert_equal [-InfF..InfF], Rangeary(r1,r2).to_a
         
     | 
| 
       195 
281 
     | 
    
         
             
                  assert ! Rangeary(r1,r2).to_a[0].is_all?
         
     | 
| 
       196 
282 
     | 
    
         
             
                  assert_equal [-Float::INFINITY...8, RangeExtd(8..10,9), r3], Rangeary(r1,5...8,RangeExtd(8..9,9),9..10,r3).to_a
         
     | 
| 
      
 283 
     | 
    
         
            +
             
     | 
| 
      
 284 
     | 
    
         
            +
                  r4 = RangeExtd(InfN...?h)
         
     | 
| 
      
 285 
     | 
    
         
            +
                  r5 = RangeExtd(?c, InfP, T)
         
     | 
| 
      
 286 
     | 
    
         
            +
                  assert_equal [RangeExtd::ALL], Rangeary(r4,r5).to_a
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
                  r6 = Rangeary(InfF..InfF)
         
     | 
| 
      
 289 
     | 
    
         
            +
                  assert_equal [RangeExtd::NONE], r6  # Strange zero-sized one, handled by _replace_inf_inf(arin)  # Note that irb displays [RangeExtd::NONE] as [nil...nil]
         
     | 
| 
      
 290 
     | 
    
         
            +
                  assert  r6.infinities.status_is_nil?(:positive), "confidence of the infinities of the meaningless Range should be nil: infinities=#{r6.infinities.inspect}"
         
     | 
| 
      
 291 
     | 
    
         
            +
                  assert  r6.infinities.status_is_nil?(:negative)
         
     | 
| 
      
 292 
     | 
    
         
            +
                  assert_equal false, r6.infinities[:positive]
         
     | 
| 
      
 293 
     | 
    
         
            +
                  assert_equal false, r6.infinities[:negative]
         
     | 
| 
      
 294 
     | 
    
         
            +
             
     | 
| 
      
 295 
     | 
    
         
            +
                  assert_equal [r1], Rangeary(r1,(-InfF..-InfF))
         
     | 
| 
      
 296 
     | 
    
         
            +
                  assert_equal [r1], Rangeary(r1,( InfF..InfF))
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
                  r11 = Rangeary(?f..)
         
     | 
| 
      
 299 
     | 
    
         
            +
                  err = assert_raises(ArgumentError){ Rangeary(r11,  positive: ?t) }
         
     | 
| 
      
 300 
     | 
    
         
            +
                  assert_match(/positive .+ not large enough or inconsistent\b/, err.message) # (_validate_infinities) => specified positive infinities ("t") are not small enough or inconsistent: (<=> nil)
         
     | 
| 
      
 301 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(?f.., positive: ?t) }
         
     | 
| 
      
 302 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(..?f, negative: ?a) }
         
     | 
| 
      
 303 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(3..,       positive: 99) }
         
     | 
| 
      
 304 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(3..InfF,   positive: 99) }
         
     | 
| 
      
 305 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(-InfF..99, negative: -6) }
         
     | 
| 
      
 306 
     | 
    
         
            +
                  r12 = Rangeary(-InfF..99, negative: InfN, positive: InfP)
         
     | 
| 
      
 307 
     | 
    
         
            +
                  assert_equal InfP, r12.infinities[:positive]
         
     | 
| 
      
 308 
     | 
    
         
            +
                  assert             r12.infinities.definite? :negative
         
     | 
| 
      
 309 
     | 
    
         
            +
             
     | 
| 
      
 310 
     | 
    
         
            +
                  ## The following used to be the case?
         
     | 
| 
      
 311 
     | 
    
         
            +
                  #err = assert_raises(ArgumentError){ Rangeary(r1,(InfF..InfF)) }
         
     | 
| 
      
 312 
     | 
    
         
            +
                  #assert_match(/not small enough or inconsistent\b/, err.message) # (_validate_infinities) => specified negative infinities (Infinity) are not small enough or inconsistent.
         
     | 
| 
       197 
313 
     | 
    
         
             
                end	# def test_new_infinity
         
     | 
| 
       198 
314 
     | 
    
         | 
| 
      
 315 
     | 
    
         
            +
                def test_new_infinity2
         
     | 
| 
      
 316 
     | 
    
         
            +
                  ## doc inside the code (Rangeary#initialize)
         
     | 
| 
      
 317 
     | 
    
         
            +
                  ran2 = ("f".."k")
         
     | 
| 
      
 318 
     | 
    
         
            +
                  rae1 = RaE("k"..nil, true)
         
     | 
| 
      
 319 
     | 
    
         
            +
                  r3 = ~(Rangeary(ran2, negative: "d"))
         
     | 
| 
      
 320 
     | 
    
         
            +
                  assert_equal Rangeary("d"..."f", rae1), r3
         
     | 
| 
      
 321 
     | 
    
         
            +
                  assert_equal "d", r3.infinities[:negative]
         
     | 
| 
      
 322 
     | 
    
         
            +
                  r4 =   Rangeary(r3, negative: "a")
         
     | 
| 
      
 323 
     | 
    
         
            +
                  assert_equal "b", Rangeary(r4, negative: "b").infinities[:negative]
         
     | 
| 
      
 324 
     | 
    
         
            +
                  r5 =  ~Rangeary(r4)
         
     | 
| 
      
 325 
     | 
    
         
            +
                  assert_equal Rangeary("a"..."d", "f".."k"), r5
         
     | 
| 
      
 326 
     | 
    
         
            +
             
     | 
| 
      
 327 
     | 
    
         
            +
                  r6 = r3 + Rangeary("c".."d", negative: "a")
         
     | 
| 
      
 328 
     | 
    
         
            +
                  assert_equal Rangeary("c"..."f", rae1), r6
         
     | 
| 
      
 329 
     | 
    
         
            +
             
     | 
| 
      
 330 
     | 
    
         
            +
                  assert_equal r3, r3*(..nil), "conjunction with (..nil) should never raise an Exception, because nil has a lower priority than other infinities."
         
     | 
| 
      
 331 
     | 
    
         
            +
             
     | 
| 
      
 332 
     | 
    
         
            +
                  r7 = nil
         
     | 
| 
      
 333 
     | 
    
         
            +
                  ################# puts "\nNOTE: A warning is suppressed during this testing. To display it, set DISPLAY_STDERR=1" if !ENV['DISPLAY_STDERR'] || ENV['DISPLAY_STDERR'].empty?   ### This statement is removed because there are no warnings displayed in the end!
         
     | 
| 
      
 334 
     | 
    
         
            +
                 #TeeIO.suppress_io{|iorw|
         
     | 
| 
      
 335 
     | 
    
         
            +
                  r7 = r3*Rangeary("c".."d", negative: "a")
         
     | 
| 
      
 336 
     | 
    
         
            +
                  #iorw.rewind
         
     | 
| 
      
 337 
     | 
    
         
            +
                  #assert_match(/Inconsistent negative infinities are found\b/, iorw.read)  # util.rb: _validate_select_infinities()
         
     | 
| 
      
 338 
     | 
    
         
            +
                 #}
         
     | 
| 
      
 339 
     | 
    
         
            +
                  assert_equal Rangeary("d".."d"), r7
         
     | 
| 
      
 340 
     | 
    
         
            +
                  assert_equal "a", r7.infinities[:negative]
         
     | 
| 
      
 341 
     | 
    
         
            +
                  r8 = (r3 ^ (?e..?h))
         
     | 
| 
      
 342 
     | 
    
         
            +
                  assert_equal Rangeary("d"..."e", "f".."h", rae1), r8
         
     | 
| 
      
 343 
     | 
    
         
            +
                end # def test_new_infinity2
         
     | 
| 
      
 344 
     | 
    
         
            +
             
     | 
| 
      
 345 
     | 
    
         
            +
                def test_user_infinity
         
     | 
| 
      
 346 
     | 
    
         
            +
                  # @infinities are inherited but maybe partially overwritten in initialization
         
     | 
| 
      
 347 
     | 
    
         
            +
                  ray1 = Rangeary(?h...?m, negative: ?a, positive: ?z)
         
     | 
| 
      
 348 
     | 
    
         
            +
                  assert_equal [?a...?h, ?m..?z], ~ray1
         
     | 
| 
      
 349 
     | 
    
         
            +
                  assert_equal [?b...?h, ?m..?z], ~Rangeary(ray1, negative: ?b)
         
     | 
| 
      
 350 
     | 
    
         
            +
                  assert_equal [?a...?h, ?m..?y], ~Rangeary(ray1, positive: ?y)
         
     | 
| 
      
 351 
     | 
    
         
            +
                  assert_equal [?b...?h, ?m..?y], ~Rangeary(ray1, negative: ?b, positive: ?y)
         
     | 
| 
      
 352 
     | 
    
         
            +
                  ray3 = ray1 + Rangeary(?i..?j, positive: "k")
         
     | 
| 
      
 353 
     | 
    
         
            +
                  assert_equal [?h...?m], ray3
         
     | 
| 
      
 354 
     | 
    
         
            +
                  assert_equal({positive: ?z, negative: ?a}, ray3.infinities)  # Hash-extended-with-HashInf
         
     | 
| 
      
 355 
     | 
    
         
            +
                  assert_equal({positive: ?z, negative: ?a}, ray3.infinities(convert: false))  # Hash == Hash
         
     | 
| 
      
 356 
     | 
    
         
            +
                  assert  ray3.infinities.definite?(:positive)
         
     | 
| 
      
 357 
     | 
    
         
            +
                  assert  ray3.infinities.definite?(:negative)
         
     | 
| 
      
 358 
     | 
    
         
            +
                  ray4 = Rangeary(ray3, positive: ?m)
         
     | 
| 
      
 359 
     | 
    
         
            +
                  assert_equal ?m, ray4.infinities[:positive]
         
     | 
| 
      
 360 
     | 
    
         
            +
                  assert           ray4.infinities.definite?(:positive)
         
     | 
| 
      
 361 
     | 
    
         
            +
                  err = assert_raises(ArgumentError){ ray4 + [?m..?t] } # specified/inherited positive infinity ("k") is not large enough or inconsistent: (<=> "m")
         
     | 
| 
      
 362 
     | 
    
         
            +
                  assert_match(%r@specified/inherited positive infinit.+"m".+\bnot large enough\b.+"t"@, err.message) # specified/inherited positive infinity ("m") is not large enough or inconsistent: (<=> "t")
         
     | 
| 
      
 363 
     | 
    
         
            +
                end
         
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
      
 365 
     | 
    
         
            +
                def test_custom_infinity1
         
     | 
| 
      
 366 
     | 
    
         
            +
                  infend = "w"
         
     | 
| 
      
 367 
     | 
    
         
            +
                  def infend.infinite?
         
     | 
| 
      
 368 
     | 
    
         
            +
                    true
         
     | 
| 
      
 369 
     | 
    
         
            +
                  end
         
     | 
| 
      
 370 
     | 
    
         
            +
                  assert  infend.infinite?
         
     | 
| 
      
 371 
     | 
    
         
            +
             
     | 
| 
      
 372 
     | 
    
         
            +
                  rang = Rangeary(?d..infend)
         
     | 
| 
      
 373 
     | 
    
         
            +
                  hsinf = {negative: nil, positive: "w"}
         
     | 
| 
      
 374 
     | 
    
         
            +
                  assert_equal hsinf, rang.infinities  # Hash == HashInf
         
     | 
| 
      
 375 
     | 
    
         
            +
                  assert_equal [...?d], ~rang
         
     | 
| 
      
 376 
     | 
    
         
            +
                  rang = Rangeary(Rangeary(?a...?b), ?b...?c, ?d..infend, ?f..?j)
         
     | 
| 
      
 377 
     | 
    
         
            +
                  assert_equal hsinf, rang.infinities
         
     | 
| 
      
 378 
     | 
    
         
            +
                  assert_equal [?a...?c, ?d..infend], rang
         
     | 
| 
      
 379 
     | 
    
         
            +
             
     | 
| 
      
 380 
     | 
    
         
            +
                  # If (?f..?z) is given, which contradicts the positive infinity "w",
         
     | 
| 
      
 381 
     | 
    
         
            +
                  #   what will happen?
         
     | 
| 
      
 382 
     | 
    
         
            +
                  err = assert_raises(ArgumentError, "specifying a positive infinity, InfP, as a negative infinity should raises an Exception."){
         
     | 
| 
      
 383 
     | 
    
         
            +
                    Rangeary(?b...?c, ?d..infend, Rangeary(?f..?z, negative: InfP)) } # 'specified/inherited negative infinity (INFINITY) is not small enough or inconsistent: (<=> "f")'; b/c 
         
     | 
| 
      
 384 
     | 
    
         
            +
                  assert_match(%r@negative infinity\b.+ is not small enough@, err.message)
         
     | 
| 
      
 385 
     | 
    
         
            +
                  r3 = Rangeary(?b...?c, ?d..infend)
         
     | 
| 
      
 386 
     | 
    
         
            +
                  assert_equal hsinf,  r3.infinities
         
     | 
| 
      
 387 
     | 
    
         
            +
                  assert               r3.infinities.definite?(:positive)
         
     | 
| 
      
 388 
     | 
    
         
            +
                  r4 = Rangeary(?b...?c, ?d..infend, Rangeary(?f..?z, positive: InfP))
         
     | 
| 
      
 389 
     | 
    
         
            +
                  hsinf4 = hsinf.merge({positive: InfP})
         
     | 
| 
      
 390 
     | 
    
         
            +
                  assert_equal hsinf4, r4.infinities
         
     | 
| 
      
 391 
     | 
    
         
            +
                  assert               r4.infinities.definite?(:positive)
         
     | 
| 
      
 392 
     | 
    
         
            +
                end
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
      
 394 
     | 
    
         
            +
                def test_custom_infinity2
         
     | 
| 
      
 395 
     | 
    
         
            +
                  infend = "w"
         
     | 
| 
      
 396 
     | 
    
         
            +
                  def infend.infinite?
         
     | 
| 
      
 397 
     | 
    
         
            +
                    true
         
     | 
| 
      
 398 
     | 
    
         
            +
                  end
         
     | 
| 
      
 399 
     | 
    
         
            +
                  hsinf = {negative: nil, positive: "w"}
         
     | 
| 
      
 400 
     | 
    
         
            +
             
     | 
| 
      
 401 
     | 
    
         
            +
                  ra1 = Rangeary(?b...?c, ?d..infend)
         
     | 
| 
      
 402 
     | 
    
         
            +
                  ra2 = Rangeary(ra1, positive: InfP)
         
     | 
| 
      
 403 
     | 
    
         
            +
                  assert_equal hsinf.merge({positive: InfP}), ra2.infinities  # Hash == HashInf
         
     | 
| 
      
 404 
     | 
    
         
            +
                  assert_equal [?b..?z],  Rangeary(ra2, ?c..?z)
         
     | 
| 
      
 405 
     | 
    
         
            +
             
     | 
| 
      
 406 
     | 
    
         
            +
                  rang = Rangeary(?b...?c, ?d..infend, Rangeary(?f..?w, negative: InfN))
         
     | 
| 
      
 407 
     | 
    
         
            +
                  assert_equal hsinf.merge({negative: InfN}), rang.infinities
         
     | 
| 
      
 408 
     | 
    
         
            +
                  assert_equal [?b...?c, ?d..infend], rang
         
     | 
| 
      
 409 
     | 
    
         
            +
                end
         
     | 
| 
      
 410 
     | 
    
         
            +
             
     | 
| 
      
 411 
     | 
    
         
            +
                def test_endless_range
         
     | 
| 
      
 412 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 413 
     | 
    
         
            +
                    _ = 7..nil
         
     | 
| 
      
 414 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 415 
     | 
    
         
            +
                    return # before Ruby 2.6
         
     | 
| 
      
 416 
     | 
    
         
            +
                  end
         
     | 
| 
      
 417 
     | 
    
         
            +
                  assert_equal [2..Float::INFINITY], Rangeary(2..8, 3..Float::INFINITY).to_a
         
     | 
| 
      
 418 
     | 
    
         
            +
                  assert_equal [2..nil],  Rangeary(2..8, RangeExtd(3..nil)).to_a
         
     | 
| 
      
 419 
     | 
    
         
            +
                  assert_equal [2..nil],  Rangeary(2..8, 3..nil).to_a
         
     | 
| 
      
 420 
     | 
    
         
            +
                  assert_equal [2...nil], Rangeary(8...nil, 2...4, 4..9).to_a
         
     | 
| 
      
 421 
     | 
    
         
            +
                  assert_equal [2...nil], Rangeary(8...nil, 2...4, 4..9)
         
     | 
| 
      
 422 
     | 
    
         
            +
                end
         
     | 
| 
      
 423 
     | 
    
         
            +
             
     | 
| 
      
 424 
     | 
    
         
            +
                def test_beginless_range
         
     | 
| 
      
 425 
     | 
    
         
            +
                  # This would raise Syntax Error in earlier versions (2.6 or earlier?) of Ruby
         
     | 
| 
      
 426 
     | 
    
         
            +
                  assert_equal [(-Float::INFINITY)...9], Rangeary((-Float::INFINITY)..7, 3...9).to_a
         
     | 
| 
      
 427 
     | 
    
         
            +
                  assert_equal [nil..8],  Rangeary(2..8, RaE(nil..3)).to_a
         
     | 
| 
      
 428 
     | 
    
         
            +
                  assert_equal [nil..8],  Rangeary(2..8, nil..3).to_a
         
     | 
| 
      
 429 
     | 
    
         
            +
                  assert_equal [nil...9], Rangeary(nil...8, ...9, 4...9).to_a
         
     | 
| 
      
 430 
     | 
    
         
            +
                  assert_equal [nil..9],  Rangeary(nil...8, ...9, 4..9).to_a
         
     | 
| 
      
 431 
     | 
    
         
            +
                  assert_equal [nil...9], Rangeary(nil...8, 2...4, 4...9).to_a
         
     | 
| 
      
 432 
     | 
    
         
            +
                  assert_equal [nil...9], Rangeary(         2...4, 4...9, nil...8)
         
     | 
| 
      
 433 
     | 
    
         
            +
                  assert_equal [nil...8], Rangeary(nil...8, 2...4, nil..7)
         
     | 
| 
      
 434 
     | 
    
         
            +
                  assert_equal [nil...],                   Rangeary(    8..., nil...8)
         
     | 
| 
      
 435 
     | 
    
         
            +
                  assert_equal [nil...8,    10...],        Rangeary(   10..., nil...8)
         
     | 
| 
      
 436 
     | 
    
         
            +
                  assert_equal [nil...8, RaE(8.., true)],  Rangeary(RaE(8.., true), nil...8)
         
     | 
| 
      
 437 
     | 
    
         
            +
             
     | 
| 
      
 438 
     | 
    
         
            +
                  ran = Rangeary(...8, RaE(8.., true))
         
     | 
| 
      
 439 
     | 
    
         
            +
                  assert_raises(RangeError ){                          ran.last.last }
         
     | 
| 
      
 440 
     | 
    
         
            +
                  assert_raises(RangeError, "for RAN=#{ran.inspect}"){ ran.last_element }
         
     | 
| 
      
 441 
     | 
    
         
            +
                  assert_nil                 ran.last.end
         
     | 
| 
      
 442 
     | 
    
         
            +
                  assert_raises(RangeError, "for RAN=#{ran.inspect}"){ ran.last_element }
         
     | 
| 
      
 443 
     | 
    
         
            +
                end
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
       199 
445 
     | 
    
         
             
                def test_new_none	# Essentially, the tests of compact()
         
     | 
| 
       200 
446 
     | 
    
         
             
                  ra = Rangeary(RangeExtd::NONE, RangeExtd::NONE, RangeExtd::NONE)
         
     | 
| 
       201 
447 
     | 
    
         
             
                  assert_equal 1, ra.size
         
     | 
| 
         @@ -222,8 +468,8 @@ end 
     | 
|
| 
       222 
468 
     | 
    
         
             
                  ra = Rangeary(-6.3..-1, 2..5, 8..8)
         
     | 
| 
       223 
469 
     | 
    
         
             
                  assert_equal(-6.3, ra.begin)
         
     | 
| 
       224 
470 
     | 
    
         
             
                  ra = Rangeary(RangeExtd::NONE)
         
     | 
| 
       225 
     | 
    
         
            -
                   
     | 
| 
       226 
     | 
    
         
            -
                   
     | 
| 
      
 471 
     | 
    
         
            +
                  assert_nil  ra.begin
         
     | 
| 
      
 472 
     | 
    
         
            +
                  assert_nil  ra.end
         
     | 
| 
       227 
473 
     | 
    
         
             
                  ra = Rangeary(RangeExtd::ALL)
         
     | 
| 
       228 
474 
     | 
    
         
             
                  assert_equal RangeExtd::Infinity::NEGATIVE, ra.begin
         
     | 
| 
       229 
475 
     | 
    
         
             
                  assert_equal RangeExtd::Infinity::POSITIVE, ra.end
         
     | 
| 
         @@ -252,6 +498,15 @@ end 
     | 
|
| 
       252 
498 
     | 
    
         
             
                  assert_equal RaA, RaA + RaA
         
     | 
| 
       253 
499 
     | 
    
         
             
                  assert_equal RaA, RaA + RaN
         
     | 
| 
       254 
500 
     | 
    
         
             
                  assert_equal RaA, RaN + RaA
         
     | 
| 
      
 501 
     | 
    
         
            +
             
     | 
| 
      
 502 
     | 
    
         
            +
                  # Endless Range since Ruby 2.6
         
     | 
| 
      
 503 
     | 
    
         
            +
                  _ = 7..nil rescue return # before Ruby 2.6
         
     | 
| 
      
 504 
     | 
    
         
            +
                  assert_equal [-6..-1, 2..5, 8...nil], rs+(8...nil)
         
     | 
| 
      
 505 
     | 
    
         
            +
                  assert_equal [-6..-1, 2..5, 8..nil],  Rangeary(8..nil)+rs
         
     | 
| 
      
 506 
     | 
    
         
            +
             
     | 
| 
      
 507 
     | 
    
         
            +
                  # Begindless Range since Ruby 2.7
         
     | 
| 
      
 508 
     | 
    
         
            +
                  assert_equal [..-1, 2..5, 8..8],  rs+(...(-6))
         
     | 
| 
      
 509 
     | 
    
         
            +
                  assert_equal [..-1, 2..5, 8..8],  Rangeary(..(-6))+rs
         
     | 
| 
       255 
510 
     | 
    
         
             
                end	# def test_disjunction
         
     | 
| 
       256 
511 
     | 
    
         | 
| 
       257 
512 
     | 
    
         
             
                def test_minus
         
     | 
| 
         @@ -285,8 +540,57 @@ end 
     | 
|
| 
       285 
540 
     | 
    
         
             
                  assert_equal RaN, RaN-rs
         
     | 
| 
       286 
541 
     | 
    
         
             
                  assert_equal RaN, RaN-RaN
         
     | 
| 
       287 
542 
     | 
    
         
             
                  assert_equal RaN, RaA-RaA
         
     | 
| 
      
 543 
     | 
    
         
            +
             
     | 
| 
      
 544 
     | 
    
         
            +
                  # Eendless Range since Ruby 2.6
         
     | 
| 
      
 545 
     | 
    
         
            +
                  _ = 7..nil rescue return # before Ruby 2.6
         
     | 
| 
      
 546 
     | 
    
         
            +
                  assert_equal [-6..-1, 2...4], rs-(4...nil)
         
     | 
| 
      
 547 
     | 
    
         
            +
                  rr = Rangeary(6..nil)
         
     | 
| 
      
 548 
     | 
    
         
            +
                  assert       rr.infinities.definite?(:positive)
         
     | 
| 
      
 549 
     | 
    
         
            +
                  assert_nil   rr.infinities[:positive]
         
     | 
| 
      
 550 
     | 
    
         
            +
                  r2 = rr-(6...8)
         
     | 
| 
      
 551 
     | 
    
         
            +
                  assert_nil   r2.infinities[:positive], "positive should be nil with :definite: "+r2.infinities.inspect
         
     | 
| 
      
 552 
     | 
    
         
            +
                  assert_nil   r2.infinities[:positive]
         
     | 
| 
      
 553 
     | 
    
         
            +
                  assert_equal [8..nil],  rr-(6...8)
         
     | 
| 
      
 554 
     | 
    
         
            +
                  assert_equal [6...7],   rr-(7...nil)
         
     | 
| 
      
 555 
     | 
    
         
            +
                  rr = Rangeary(6..9, 8..nil)
         
     | 
| 
      
 556 
     | 
    
         
            +
                  assert_equal [8..nil],  rr-(6...8)
         
     | 
| 
      
 557 
     | 
    
         
            +
             
     | 
| 
      
 558 
     | 
    
         
            +
                  # Begindless Range since Ruby 2.7
         
     | 
| 
      
 559 
     | 
    
         
            +
                  assert_equal [3..5, 8..9], rs-(...3)
         
     | 
| 
       288 
560 
     | 
    
         
             
                end	# def test_minus
         
     | 
| 
       289 
561 
     | 
    
         | 
| 
      
 562 
     | 
    
         
            +
                # Array#equal overwritten.
         
     | 
| 
      
 563 
     | 
    
         
            +
                def test_equal_array
         
     | 
| 
      
 564 
     | 
    
         
            +
                  rany = Rangeary(4..nil)
         
     | 
| 
      
 565 
     | 
    
         
            +
                  assert_equal rany, [4..nil]
         
     | 
| 
      
 566 
     | 
    
         
            +
                  assert_equal [4..nil], rany
         
     | 
| 
      
 567 
     | 
    
         
            +
                  refute_equal rany, (4..nil)
         
     | 
| 
      
 568 
     | 
    
         
            +
             
     | 
| 
      
 569 
     | 
    
         
            +
                  rany2 = Rangeary(1..2, 4..nil)
         
     | 
| 
      
 570 
     | 
    
         
            +
                  refute_equal rany2, Rangeary(0..2, 4..nil)
         
     | 
| 
      
 571 
     | 
    
         
            +
                  refute_equal rany2, [1..2, 9]
         
     | 
| 
      
 572 
     | 
    
         
            +
                  refute_equal rany2, Rangeary(1..2, 4..8)
         
     | 
| 
      
 573 
     | 
    
         
            +
             
     | 
| 
      
 574 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), []
         
     | 
| 
      
 575 
     | 
    
         
            +
                  assert_equal [], Rangeary(RangeExtd::NONE)
         
     | 
| 
      
 576 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), [RangeExtd::NONE]
         
     | 
| 
      
 577 
     | 
    
         
            +
                  assert_equal [RangeExtd::NONE], Rangeary(RangeExtd::NONE)
         
     | 
| 
      
 578 
     | 
    
         
            +
                  refute_equal rany, []
         
     | 
| 
      
 579 
     | 
    
         
            +
                  refute_equal [], rany
         
     | 
| 
      
 580 
     | 
    
         
            +
             
     | 
| 
      
 581 
     | 
    
         
            +
                  ## The following used to be all true up to Rangeary Ver.1 before Ver.2
         
     | 
| 
      
 582 
     | 
    
         
            +
                  refute_equal rany, [4..InfF]
         
     | 
| 
      
 583 
     | 
    
         
            +
                  refute_equal rany, [4...InfF]
         
     | 
| 
      
 584 
     | 
    
         
            +
                  refute_equal [4...InfF], rany
         
     | 
| 
      
 585 
     | 
    
         
            +
                  refute_equal rany2, Rangeary(1..2, 4..InfF)
         
     | 
| 
      
 586 
     | 
    
         
            +
                  refute_equal rany2, [1..2, 4..InfF]
         
     | 
| 
      
 587 
     | 
    
         
            +
                  refute_equal [1..2, 4..InfF], rany2
         
     | 
| 
      
 588 
     | 
    
         
            +
                  refute_equal Rangeary(?a..), [?a..InfP] # This raises the uncapturable SyntaxError for Ruby 2.5 and before anyway.
         
     | 
| 
      
 589 
     | 
    
         
            +
                  refute_equal [?a..InfP], Rangeary(?a..)
         
     | 
| 
      
 590 
     | 
    
         
            +
             
     | 
| 
      
 591 
     | 
    
         
            +
                  # Ruby 2.7 Beginless Range
         
     | 
| 
      
 592 
     | 
    
         
            +
                  refute_equal [..?z],     Rangeary(InfN..?z)
         
     | 
| 
      
 593 
     | 
    
         
            +
                end
         
     | 
| 
       290 
594 
     | 
    
         | 
| 
       291 
595 
     | 
    
         
             
                def test_brackets
         
     | 
| 
       292 
596 
     | 
    
         
             
                  # Square Brackets
         
     | 
| 
         @@ -296,7 +600,7 @@ end 
     | 
|
| 
       296 
600 
     | 
    
         
             
                  assert_equal ar[1..2], rs[1..2]
         
     | 
| 
       297 
601 
     | 
    
         
             
                  assert_equal ar[0,2],  rs[0,2]
         
     | 
| 
       298 
602 
     | 
    
         
             
                  assert_equal RangeExtd::NONE, RaN[0]
         
     | 
| 
       299 
     | 
    
         
            -
                   
     | 
| 
      
 603 
     | 
    
         
            +
                  assert_nil                    RaN[1]
         
     | 
| 
       300 
604 
     | 
    
         
             
                end
         
     | 
| 
       301 
605 
     | 
    
         | 
| 
       302 
606 
     | 
    
         | 
| 
         @@ -311,10 +615,10 @@ end 
     | 
|
| 
       311 
615 
     | 
    
         
             
                  r59e = RangeExtd(5...9, :exclude_begin => 1)
         
     | 
| 
       312 
616 
     | 
    
         | 
| 
       313 
617 
     | 
    
         
             
                  # Lower exclusive
         
     | 
| 
       314 
     | 
    
         
            -
                   
     | 
| 
       315 
     | 
    
         
            -
                   
     | 
| 
       316 
     | 
    
         
            -
                   
     | 
| 
       317 
     | 
    
         
            -
                   
     | 
| 
      
 618 
     | 
    
         
            +
                  assert_nil           conjRE(1..3,  5..9).begin
         
     | 
| 
      
 619 
     | 
    
         
            +
                  assert_nil           conjRE(1...5, 5..9).begin
         
     | 
| 
      
 620 
     | 
    
         
            +
                  assert_nil           conjRE(1..5,  r59).begin
         
     | 
| 
      
 621 
     | 
    
         
            +
                  assert_nil           conjRE(1...5, r59).begin
         
     | 
| 
       318 
622 
     | 
    
         
             
                  assert_equal (5..5), conjRE(1..5,  5..9)
         
     | 
| 
       319 
623 
     | 
    
         | 
| 
       320 
624 
     | 
    
         
             
                  # Lower overlap
         
     | 
| 
         @@ -374,13 +678,13 @@ end 
     | 
|
| 
       374 
678 
     | 
    
         | 
| 
       375 
679 
     | 
    
         
             
                  # Higher exclusive (almost)
         
     | 
| 
       376 
680 
     | 
    
         
             
                  assert_equal (5..5), conjRE(5..9,  1..5)
         
     | 
| 
       377 
     | 
    
         
            -
                   
     | 
| 
       378 
     | 
    
         
            -
                   
     | 
| 
       379 
     | 
    
         
            -
                   
     | 
| 
      
 681 
     | 
    
         
            +
                  assert_nil           conjRE(5..9,  1...5).begin
         
     | 
| 
      
 682 
     | 
    
         
            +
                  assert_nil           conjRE(r59,   1..5).begin
         
     | 
| 
      
 683 
     | 
    
         
            +
                  assert_nil           conjRE(r59,   1...5).begin
         
     | 
| 
       380 
684 
     | 
    
         | 
| 
       381 
685 
     | 
    
         
             
                  # Higher exclusive (almost)
         
     | 
| 
       382 
     | 
    
         
            -
                   
     | 
| 
       383 
     | 
    
         
            -
                   
     | 
| 
      
 686 
     | 
    
         
            +
                  assert_nil           conjRE(5..9,  1..3).begin
         
     | 
| 
      
 687 
     | 
    
         
            +
                  assert_nil           conjRE(r59,   1...4).begin
         
     | 
| 
       384 
688 
     | 
    
         | 
| 
       385 
689 
     | 
    
         
             
                  # String
         
     | 
| 
       386 
690 
     | 
    
         
             
                  assert_equal (?d..?f), conjRE(?a..?f, ?d..?z)
         
     | 
| 
         @@ -392,7 +696,7 @@ end 
     | 
|
| 
       392 
696 
     | 
    
         
             
                  assert_equal RangeExtd::NONE, conjRE(?a..?d, RangeExtd::NONE)
         
     | 
| 
       393 
697 
     | 
    
         | 
| 
       394 
698 
     | 
    
         
             
                  # Invalid
         
     | 
| 
       395 
     | 
    
         
            -
                  assert_raises( 
     | 
| 
      
 699 
     | 
    
         
            +
                  assert_raises(RangeError){ conjRE(true..true, true..true) } # => invalid parameter for RangeExtd
         
     | 
| 
       396 
700 
     | 
    
         
             
                  assert_raises(TypeError){ conjRE(1..5, ?a..?d) }
         
     | 
| 
       397 
701 
     | 
    
         | 
| 
       398 
702 
     | 
    
         
             
                  assert_equal RangeExtd(24...25,T), conjRE(RangeExtd(24..26,T), 24...25)
         
     | 
| 
         @@ -418,18 +722,46 @@ end 
     | 
|
| 
       418 
722 
     | 
    
         
             
                  assert          rcab.null_element?
         
     | 
| 
       419 
723 
     | 
    
         
             
                  assert          rcab.null?
         
     | 
| 
       420 
724 
     | 
    
         | 
| 
       421 
     | 
    
         
            -
                   
     | 
| 
       422 
     | 
    
         
            -
                   
     | 
| 
      
 725 
     | 
    
         
            +
                  hsinff = {negative: -InfF, positive: InfF}
         
     | 
| 
      
 726 
     | 
    
         
            +
                  assert_raises(ArgumentError){ r1 * Rangeary(RangeExtd::ALL) }  # Inconsistent given infinities: comparison of Float with RangeExtd::Infinity failed  # used to be fine up to Rangeary Ver.1
         
     | 
| 
      
 727 
     | 
    
         
            +
                  r2 = r1 * Rangeary(-inf..nil)  # Positive infinity (=Float::INFINITY) is inherited and preserved from r1
         
     | 
| 
      
 728 
     | 
    
         
            +
                  assert_equal r1,     r2
         
     | 
| 
      
 729 
     | 
    
         
            +
                  assert_equal hsinff, r2.infinities  # Hash == HashInf
         
     | 
| 
      
 730 
     | 
    
         
            +
                  # reverse
         
     | 
| 
      
 731 
     | 
    
         
            +
                  r2 = Rangeary(-inf..nil) * r1
         
     | 
| 
      
 732 
     | 
    
         
            +
                  assert_equal r1,     r2
         
     | 
| 
      
 733 
     | 
    
         
            +
                  assert_equal hsinff, r2.infinities
         
     | 
| 
      
 734 
     | 
    
         
            +
             
     | 
| 
      
 735 
     | 
    
         
            +
                  r4 = r1 * Rangeary(..nil)
         
     | 
| 
      
 736 
     | 
    
         
            +
                  assert_equal r1,     r4
         
     | 
| 
      
 737 
     | 
    
         
            +
                  assert_equal hsinff.merge({negative: nil}), r4.infinities
         
     | 
| 
       423 
738 
     | 
    
         | 
| 
       424 
739 
     | 
    
         
             
                  assert_equal RaN, r1 * RaN
         
     | 
| 
       425 
740 
     | 
    
         
             
                  assert_equal RaN, r1 * RaN
         
     | 
| 
      
 741 
     | 
    
         
            +
                  assert_equal RaN, RaA * RaN
         
     | 
| 
       426 
742 
     | 
    
         
             
                  assert_equal RaN, RaN * r1
         
     | 
| 
       427 
743 
     | 
    
         
             
                  assert_equal RaN, RaN * RaN
         
     | 
| 
       428 
744 
     | 
    
         
             
                  assert_equal RaA, RaA * RaA
         
     | 
| 
      
 745 
     | 
    
         
            +
             
     | 
| 
      
 746 
     | 
    
         
            +
                  # Eendless Range since Ruby 2.6
         
     | 
| 
      
 747 
     | 
    
         
            +
                  _ = 7..nil rescue return # before Ruby 2.6
         
     | 
| 
      
 748 
     | 
    
         
            +
                  r3 = Rangeary(1...9, 12..nil)
         
     | 
| 
      
 749 
     | 
    
         
            +
                  assert_equal [8...9, 12...13], r3 * Rangeary(8...13)
         
     | 
| 
      
 750 
     | 
    
         
            +
             
     | 
| 
      
 751 
     | 
    
         
            +
                  # Begindless Range since Ruby 2.7
         
     | 
| 
      
 752 
     | 
    
         
            +
                  r4 = Rangeary(nil..?e, ?t..?y)
         
     | 
| 
      
 753 
     | 
    
         
            +
                  assert_equal [?d..?e, ?t..?t], r4 * Rangeary(?d..?t)
         
     | 
| 
      
 754 
     | 
    
         
            +
             
     | 
| 
      
 755 
     | 
    
         
            +
                  # preserves infinities?
         
     | 
| 
      
 756 
     | 
    
         
            +
                  assert_equal([nil..],  ~(RaA * RaN))
         
     | 
| 
      
 757 
     | 
    
         
            +
                  hsinf = {negative: ?d, positive: ?q}
         
     | 
| 
      
 758 
     | 
    
         
            +
                  r5 = Rangeary(?d..?g, **hsinf) * RaN
         
     | 
| 
      
 759 
     | 
    
         
            +
                  assert_equal hsinf, r5.infinities
         
     | 
| 
      
 760 
     | 
    
         
            +
                  assert_equal([hsinf[:negative]..hsinf[:positive]], ~r5)
         
     | 
| 
       429 
761 
     | 
    
         
             
                end	# def test_conjunctionRangeary
         
     | 
| 
       430 
762 
     | 
    
         | 
| 
       431 
763 
     | 
    
         | 
| 
       432 
     | 
    
         
            -
                def  
     | 
| 
      
 764 
     | 
    
         
            +
                def test_comjunction
         
     | 
| 
       433 
765 
     | 
    
         
             
                  t = true
         
     | 
| 
       434 
766 
     | 
    
         
             
                  inf = Float::INFINITY
         
     | 
| 
       435 
767 
     | 
    
         | 
| 
         @@ -445,6 +777,18 @@ end 
     | 
|
| 
       445 
777 
     | 
    
         
             
                  assert_equal Rangeary(-inf...12, RangeExtd(12...14,t), RangeExtd(15,inf,t)), Rangeary.conjunction(Rangeary(8..12, 14..15), 12..15).negation
         
     | 
| 
       446 
778 
     | 
    
         
             
                  assert_equal Rangeary(8...12, RangeExtd(12...14,t)), Rangeary(8..12,14..15).xor(12..15)
         
     | 
| 
       447 
779 
     | 
    
         
             
                  assert_equal Rangeary(RangeExtd::NONE), Rangeary.conjunction(RangeExtd(24..26,t), 24...25)
         
     | 
| 
      
 780 
     | 
    
         
            +
             
     | 
| 
      
 781 
     | 
    
         
            +
                  # Eendless Range since Ruby 2.6
         
     | 
| 
      
 782 
     | 
    
         
            +
                  _ = 7..nil rescue return # before Ruby 2.6
         
     | 
| 
      
 783 
     | 
    
         
            +
                  r3 = Rangeary(9..11)
         
     | 
| 
      
 784 
     | 
    
         
            +
                  assert_equal [8..nil],  r3 + Rangeary(8..nil)
         
     | 
| 
      
 785 
     | 
    
         
            +
                  refute_equal [8..InfF], r3 + Rangeary(8..nil)
         
     | 
| 
      
 786 
     | 
    
         
            +
             
     | 
| 
      
 787 
     | 
    
         
            +
                  # Begindless Range since Ruby 2.7
         
     | 
| 
      
 788 
     | 
    
         
            +
                  r4 = Rangeary(9..11)
         
     | 
| 
      
 789 
     | 
    
         
            +
                  assert_equal [nil..12],  r4 + Rangeary(nil..12)
         
     | 
| 
      
 790 
     | 
    
         
            +
                  assert_equal [nil..12], Rangeary(nil..12) + r4
         
     | 
| 
      
 791 
     | 
    
         
            +
                  assert_equal [nil..11], Rangeary(nil..9) + r4
         
     | 
| 
       448 
792 
     | 
    
         
             
                end
         
     | 
| 
       449 
793 
     | 
    
         | 
| 
       450 
794 
     | 
    
         | 
| 
         @@ -464,7 +808,8 @@ end 
     | 
|
| 
       464 
808 
     | 
    
         | 
| 
       465 
809 
     | 
    
         
             
                  assert_equal r1,   r1.disjunction(RaN)
         
     | 
| 
       466 
810 
     | 
    
         
             
                  assert_equal true, r1.conjunction(RaN).null?
         
     | 
| 
       467 
     | 
    
         
            -
                  assert_equal Rangeary(RangeExtd::ALL), r1.conjunction(RaN).negation
         
     | 
| 
      
 811 
     | 
    
         
            +
                  #assert_equal Rangeary(RangeExtd::ALL), r1.conjunction(RaN).negation  # this used to be the case in up to Rangeary Ver.1
         
     | 
| 
      
 812 
     | 
    
         
            +
                  assert_equal [-InfF..InfF],      r1.conjunction(RaN).negation
         
     | 
| 
       468 
813 
     | 
    
         
             
                  assert_equal r1,                 r1 * (r1.conjunction(RaN).negation)
         
     | 
| 
       469 
814 
     | 
    
         
             
                  assert_equal r1,  r1 ^ RaN
         
     | 
| 
       470 
815 
     | 
    
         
             
                  assert_equal r1,  RaN ^ r1
         
     | 
| 
         @@ -480,32 +825,97 @@ end 
     | 
|
| 
       480 
825 
     | 
    
         
             
                  assert_equal Rangeary(-inf...3,RangeExtd(8..inf,1)), Rangeary(3..8).negation
         
     | 
| 
       481 
826 
     | 
    
         
             
                  assert_equal Rangeary(-inf...12, RangeExtd(12...14,T), RangeExtd(15,inf,T)), ~Rangeary(12..12, 14..15)
         
     | 
| 
       482 
827 
     | 
    
         | 
| 
       483 
     | 
    
         
            -
                  assert_equal 
     | 
| 
      
 828 
     | 
    
         
            +
                  assert_equal([..nil],  ~RaN)
         
     | 
| 
      
 829 
     | 
    
         
            +
                  # assert_equal Rangeary(RangeExtd::ALL), ~RaN  # used to be the case up to Rangeary Ver.1
         
     | 
| 
      
 830 
     | 
    
         
            +
             
     | 
| 
      
 831 
     | 
    
         
            +
                  # Eendless Range since Ruby 2.6 plus Beginless Range since Ruby 2.7
         
     | 
| 
      
 832 
     | 
    
         
            +
                  _ = 7..nil rescue return # before Ruby 2.6
         
     | 
| 
      
 833 
     | 
    
         
            +
                  assert_equal Rangeary(-InfF...8), ~Rangeary(8...nil)
         
     | 
| 
      
 834 
     | 
    
         
            +
                  assert_equal Rangeary(-InfF..8),  ~Rangeary(RangeExtd(8..nil, exclude_begin: true))
         
     | 
| 
      
 835 
     | 
    
         
            +
                  assert_equal Rangeary(nil...?a),  ~Rangeary(?a..nil)
         
     | 
| 
      
 836 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd(7..InfF, T)), ~Rangeary(-InfF..7)
         
     | 
| 
      
 837 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd(7..InfF, T)), ~Rangeary(..7)
         
     | 
| 
      
 838 
     | 
    
         
            +
                  assert_equal Rangeary(?c..nil),               ~Rangeary(...?c)
         
     | 
| 
      
 839 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), ~Rangeary(RangeExtd::ALL)
         
     | 
| 
      
 840 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), ~Rangeary(InfN...InfP)
         
     | 
| 
      
 841 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), ~Rangeary(..nil)
         
     | 
| 
      
 842 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), ~Rangeary(...nil)
         
     | 
| 
      
 843 
     | 
    
         
            +
                  assert_equal Rangeary(RangeExtd::NONE), ~Rangeary(RangeExtd(...nil, true))
         
     | 
| 
      
 844 
     | 
    
         
            +
             
     | 
| 
      
 845 
     | 
    
         
            +
                  assert_equal [nil..], ~Rangeary(RangeExtd::NONE)
         
     | 
| 
      
 846 
     | 
    
         
            +
                  assert   (~Rangeary(RangeExtd::NONE)).infinities.status_is_nil?(:positive)
         
     | 
| 
      
 847 
     | 
    
         
            +
                  assert  (~~Rangeary(RangeExtd::NONE)).infinities.status_is_nil?(:positive)
         
     | 
| 
      
 848 
     | 
    
         
            +
                  assert  (~~Rangeary(RangeExtd::NONE)).infinities.status_is_nil?(:negative)
         
     | 
| 
      
 849 
     | 
    
         
            +
             
     | 
| 
      
 850 
     | 
    
         
            +
                  r3 = ~Rangeary(RangeExtd(6...6, true))
         
     | 
| 
      
 851 
     | 
    
         
            +
                  assert_equal [-InfF..InfF], r3
         
     | 
| 
      
 852 
     | 
    
         
            +
                  assert  r3.infinities.guessed?(:positive), "Status should be guessed for #{r3.infinities.inspect}"
         
     | 
| 
      
 853 
     | 
    
         
            +
                  r4 = ~Rangeary(InfF..InfF) # meaningless Range
         
     | 
| 
      
 854 
     | 
    
         
            +
                  assert_equal [nil..], r4   # Because Float information is lost for the meaningless Rnage
         
     | 
| 
      
 855 
     | 
    
         
            +
                  assert  r4.infinities.status_is_nil?(:positive)
         
     | 
| 
      
 856 
     | 
    
         
            +
                  r5 = ~Rangeary(RangeExtd(?g...?g, true))
         
     | 
| 
      
 857 
     | 
    
         
            +
                  assert_equal [nil..], r5
         
     | 
| 
      
 858 
     | 
    
         
            +
                 # assert_equal RangeExtd::ALL, r5, "At the moment, (nil..)==RangeExtd::ALL (which is subject to change in the future?)"
         
     | 
| 
      
 859 
     | 
    
         
            +
                  assert  r5.infinities.guessed?(:positive)
         
     | 
| 
      
 860 
     | 
    
         
            +
             
     | 
| 
      
 861 
     | 
    
         
            +
                  assert_equal Rangeary(?a...?d, ?f..?z),   ~Rangeary(?d...?f, negative: ?a, positive: ?z)
         
     | 
| 
      
 862 
     | 
    
         
            +
                  assert_equal Rangeary(?d...?f),          ~~Rangeary(?d...?f, negative: ?a, positive: ?z)
         
     | 
| 
      
 863 
     | 
    
         
            +
                  assert_equal Rangeary(?a...?d, ?f..?z), ~~~Rangeary(?d...?f, negative: ?a, positive: ?z)
         
     | 
| 
      
 864 
     | 
    
         
            +
             
     | 
| 
      
 865 
     | 
    
         
            +
                  r2  =  Rangeary(6...8)
         
     | 
| 
      
 866 
     | 
    
         
            +
                  r2n = ~r2
         
     | 
| 
      
 867 
     | 
    
         
            +
                  assert       r2.infinities.status_is_a?(:guessed, :positive)
         
     | 
| 
      
 868 
     | 
    
         
            +
                  assert       r2.infinities.guessed?(:positive)
         
     | 
| 
      
 869 
     | 
    
         
            +
                  refute      r2n.infinities.definite?(:positive)
         
     | 
| 
      
 870 
     | 
    
         
            +
                  assert      r2n.infinities.guessed?(:positive), "Negated Range without an explicit infinity should have a status of :guessed"
         
     | 
| 
       484 
871 
     | 
    
         
             
                end	# def test_negation
         
     | 
| 
       485 
872 
     | 
    
         | 
| 
       486 
873 
     | 
    
         | 
| 
       487 
874 
     | 
    
         
             
                def test_posinega
         
     | 
| 
       488 
875 
     | 
    
         
             
                  inf = RangeExtd::Infinity::POSITIVE
         
     | 
| 
       489 
876 
     | 
    
         
             
                  assert_equal Rangeary(?a...?d, ?x..?z),  ~Rangeary(?d...?x, :negative => ?a, :positive => ?z)
         
     | 
| 
       490 
     | 
    
         
            -
                  assert_equal Rangeary(?a...?d, ?x.. 
     | 
| 
       491 
     | 
    
         
            -
                  assert_raises(ArgumentError){ Rangeary(? 
     | 
| 
       492 
     | 
    
         
            -
                   
     | 
| 
       493 
     | 
    
         
            -
             
     | 
| 
       494 
     | 
    
         
            -
             
     | 
| 
       495 
     | 
    
         
            -
                   
     | 
| 
      
 877 
     | 
    
         
            +
                  assert_equal Rangeary(?a...?d, ?x..nil), ~Rangeary(?d...?x, :negative => ?a) 
         
     | 
| 
      
 878 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(?t..?z,  :negative => -Float::INFINITY) }
         
     | 
| 
      
 879 
     | 
    
         
            +
                  #TeeIO.suppress_io{|iorw|  # Inconsistent negative infinities are found: ["a", -Infinity] (=> a is used)
         
     | 
| 
      
 880 
     | 
    
         
            +
                    assert_raises(ArgumentError){ Rangeary(1...8.5, :negative => ?a) }
         
     | 
| 
      
 881 
     | 
    
         
            +
                  #}
         
     | 
| 
      
 882 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(1...8.5, negative: InfP, positive: -InfF) }
         
     | 
| 
      
 883 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(1...8.5, positive: inf) }
         
     | 
| 
      
 884 
     | 
    
         
            +
             
     | 
| 
      
 885 
     | 
    
         
            +
                  ra = rb = rc = rd = re = rf = rg = nil
         
     | 
| 
      
 886 
     | 
    
         
            +
                  ra = Rangeary(?d...?f,      :negative => ?a)
         
     | 
| 
       496 
887 
     | 
    
         
             
                  rb = Rangeary(?g..?h, ?j...?m)
         
     | 
| 
       497 
888 
     | 
    
         
             
                  rc = ra + rb
         
     | 
| 
       498 
889 
     | 
    
         
             
                  rd = rb | ra
         
     | 
| 
       499 
890 
     | 
    
         
             
                  re = Rangeary(?e...?k, :positive => ?z)
         
     | 
| 
       500 
891 
     | 
    
         
             
                  rf = rd & re
         
     | 
| 
       501 
     | 
    
         
            -
                   
     | 
| 
       502 
     | 
    
         
            -
             
     | 
| 
       503 
     | 
    
         
            -
                  assert_equal 
     | 
| 
       504 
     | 
    
         
            -
                   
     | 
| 
       505 
     | 
    
         
            -
                  assert_equal 
     | 
| 
       506 
     | 
    
         
            -
                   
     | 
| 
       507 
     | 
    
         
            -
                  assert_equal 
     | 
| 
       508 
     | 
    
         
            -
                   
     | 
| 
      
 892 
     | 
    
         
            +
                  rg = re & rd
         
     | 
| 
      
 893 
     | 
    
         
            +
             
     | 
| 
      
 894 
     | 
    
         
            +
                  assert_equal   ?a, ra.infinities[:negative]
         
     | 
| 
      
 895 
     | 
    
         
            +
                  assert_nil         ra.infinities[:positive]
         
     | 
| 
      
 896 
     | 
    
         
            +
                  assert_equal   ?a, rc.infinities[:negative]
         
     | 
| 
      
 897 
     | 
    
         
            +
                  assert_nil         rc.infinities[:positive]
         
     | 
| 
      
 898 
     | 
    
         
            +
                  assert_equal   ?a, rd.infinities[:negative]
         
     | 
| 
      
 899 
     | 
    
         
            +
                  assert_nil         rd.infinities[:positive]
         
     | 
| 
      
 900 
     | 
    
         
            +
                  assert_equal   ?a, rf.infinities[:negative]
         
     | 
| 
      
 901 
     | 
    
         
            +
                  assert_equal   ?z, rf.infinities[:positive]
         
     | 
| 
      
 902 
     | 
    
         
            +
                  assert_equal   ?a, rg.infinities[:negative]
         
     | 
| 
      
 903 
     | 
    
         
            +
                  assert_equal   ?z, rg.infinities[:positive]
         
     | 
| 
      
 904 
     | 
    
         
            +
             
     | 
| 
      
 905 
     | 
    
         
            +
                  # Demonstrations of how to change infinities.
         
     | 
| 
      
 906 
     | 
    
         
            +
                  rn = Rangeary(5...9, negative: 1, positive: nil)  # Without positive, it becomes +Infinity
         
     | 
| 
      
 907 
     | 
    
         
            +
                  ran1 = Rangeary(1...5, 9..)
         
     | 
| 
      
 908 
     | 
    
         
            +
                  rn_inv = ~rn
         
     | 
| 
      
 909 
     | 
    
         
            +
                  assert_equal ran1, rn_inv
         
     | 
| 
      
 910 
     | 
    
         
            +
             
     | 
| 
      
 911 
     | 
    
         
            +
                  # The way to change only the infinity; basically, just Rangeary.new is suffice
         
     | 
| 
      
 912 
     | 
    
         
            +
                  # because the option has always the priority.
         
     | 
| 
      
 913 
     | 
    
         
            +
                  ri = Rangeary(rn_inv, negative: -InfF)
         
     | 
| 
      
 914 
     | 
    
         
            +
                  hsinf = {:negative=>-InfF, :positive=>nil}
         
     | 
| 
      
 915 
     | 
    
         
            +
                  assert_equal hsinf, ri.infinities  # Hash == HashInf
         
     | 
| 
      
 916 
     | 
    
         
            +
                  ran2 = Rangeary(-InfF...1, 5...9)
         
     | 
| 
      
 917 
     | 
    
         
            +
                  ri_inv = ~ri
         
     | 
| 
      
 918 
     | 
    
         
            +
                  assert_equal ran2, ri_inv
         
     | 
| 
       509 
919 
     | 
    
         
             
                end	# def test_posinega
         
     | 
| 
       510 
920 
     | 
    
         | 
| 
       511 
921 
     | 
    
         | 
| 
         @@ -554,9 +964,9 @@ end 
     | 
|
| 
       554 
964 
     | 
    
         
             
                end	# def test_empty_element
         
     | 
| 
       555 
965 
     | 
    
         | 
| 
       556 
966 
     | 
    
         | 
| 
       557 
     | 
    
         
            -
                def  
     | 
| 
       558 
     | 
    
         
            -
                  assert [6,7,11], Rangeary(RangeExtd(10...12,T), RangeExtd(5...8,T)). 
     | 
| 
       559 
     | 
    
         
            -
                  assert_raises(TypeError){ Rangeary( 10...12,    RangeExtd(5.0...8,T)). 
     | 
| 
      
 967 
     | 
    
         
            +
                def test_flatten_element
         
     | 
| 
      
 968 
     | 
    
         
            +
                  assert [6,7,11], Rangeary(RangeExtd(10...12,T), RangeExtd(5...8,T)  ).flatten_element
         
     | 
| 
      
 969 
     | 
    
         
            +
                  assert_raises(TypeError){ Rangeary( 10...12,    RangeExtd(5.0...8,T)).flatten_element }
         
     | 
| 
       560 
970 
     | 
    
         
             
                end	# def test_flatten
         
     | 
| 
       561 
971 
     | 
    
         | 
| 
       562 
972 
     | 
    
         | 
| 
         @@ -583,9 +993,17 @@ end 
     | 
|
| 
       583 
993 
     | 
    
         
             
                end	# def test_hash
         
     | 
| 
       584 
994 
     | 
    
         | 
| 
       585 
995 
     | 
    
         | 
| 
      
 996 
     | 
    
         
            +
                def test_flatten_no_rangeary
         
     | 
| 
      
 997 
     | 
    
         
            +
                  assert_equal [RaN],      Rangeary.flatten_no_rangeary(RaN)
         
     | 
| 
      
 998 
     | 
    
         
            +
                  assert_equal [RaN, RaN], Rangeary.flatten_no_rangeary(RaN, RaN)
         
     | 
| 
      
 999 
     | 
    
         
            +
                  assert_equal [RaN, RaN], Rangeary.flatten_no_rangeary([[RaN, RaN]])
         
     | 
| 
      
 1000 
     | 
    
         
            +
                  rang = Rangeary(1..2, 5...6)
         
     | 
| 
      
 1001 
     | 
    
         
            +
                  assert_equal [RaN, (2..4), RaN, RaE(5..9), rang], Rangeary.flatten_no_rangeary([[RaN, (2..4), RaN], [[RaE(5..9)], rang]])
         
     | 
| 
      
 1002 
     | 
    
         
            +
                end
         
     | 
| 
      
 1003 
     | 
    
         
            +
             
     | 
| 
       586 
1004 
     | 
    
         
             
                def test_in_document
         
     | 
| 
       587 
1005 
     | 
    
         
             
                  assert  Rangeary(RangeExtd(1,"<...",4), 5...8).equiv?(Rangeary(2..3, 5..7))      # => true
         
     | 
| 
       588 
     | 
    
         
            -
                  assert_equal 33, Rangeary(2...4, 5..6, 8..9). 
     | 
| 
      
 1006 
     | 
    
         
            +
                  assert_equal 33, Rangeary(2...4, 5..6, 8..9).flatten_element.reduce(:+)   # => 33
         
     | 
| 
       589 
1007 
     | 
    
         | 
| 
       590 
1008 
     | 
    
         
             
                  r1 = RangeExtd(?a...?d, true) # => a<...d
         
     | 
| 
       591 
1009 
     | 
    
         
             
                  ra = Rangeary(?g..?h, r1)     # => [a<...d, g..h]
         
     | 
| 
         @@ -598,7 +1016,7 @@ end 
     | 
|
| 
       598 
1016 
     | 
    
         
             
                  assert_equal 1, Rangeary.new(RangeExtd::NONE, RangeExtd::NONE).size
         
     | 
| 
       599 
1017 
     | 
    
         
             
                  assert  Rangeary(RangeExtd::NONE, RangeExtd::NONE).empty_element?
         
     | 
| 
       600 
1018 
     | 
    
         
             
                  assert_equal [1...7], Rangeary(RangeExtd::NONE, 1..5, 3...7)  # => [1...7]
         
     | 
| 
       601 
     | 
    
         
            -
                  assert_raises(ArgumentError){ Rangeary(true..true) }
         
     | 
| 
      
 1019 
     | 
    
         
            +
                  assert_raises(ArgumentError){ Rangeary(true..true) } # => invalid parameter for RangeExtd
         
     | 
| 
       602 
1020 
     | 
    
         | 
| 
       603 
1021 
     | 
    
         
             
                  #assert_equal %w(b c g h), ra.to_a
         
     | 
| 
       604 
1022 
     | 
    
         
             
                  assert_equal [RangeExtd(?a...?d,T), ?g..?h], ra.to_a
         
     | 
| 
         @@ -639,15 +1057,44 @@ end 
     | 
|
| 
       639 
1057 
     | 
    
         | 
| 
       640 
1058 
     | 
    
         
             
                  assert_equal 2, Rangeary(1..3, 5..8).size          # => 2
         
     | 
| 
       641 
1059 
     | 
    
         
             
                  assert_equal 7, Rangeary(1..3, 5..8).size_element  # => 7
         
     | 
| 
       642 
     | 
    
         
            -
                end	# def test_in_document
         
     | 
| 
       643 
1060 
     | 
    
         | 
| 
      
 1061 
     | 
    
         
            +
                  ### section of Infinities (main doc)
         
     | 
| 
      
 1062 
     | 
    
         
            +
                  ran1 = nil..Float::INFINITY
         
     | 
| 
      
 1063 
     | 
    
         
            +
                  r1 = Rangeary(ran1).conjunction( RangeExtd::NONE )
         
     | 
| 
      
 1064 
     | 
    
         
            +
                  assert_equal RaN, r1
         
     | 
| 
      
 1065 
     | 
    
         
            +
                  r2 = r1.negation
         
     | 
| 
      
 1066 
     | 
    
         
            +
                  assert_equal Rangeary(ran1), r2
         
     | 
| 
      
 1067 
     | 
    
         
            +
                  assert_equal Rangeary(ran1), ~(Rangeary(nil..Float::INFINITY) * RangeExtd::NONE)
         
     | 
| 
      
 1068 
     | 
    
         
            +
             
     | 
| 
      
 1069 
     | 
    
         
            +
                  ran2 = ("f".."k")
         
     | 
| 
      
 1070 
     | 
    
         
            +
                  rae1 = RaE("k"..nil, true)
         
     | 
| 
      
 1071 
     | 
    
         
            +
                  assert_equal Rangeary("d"..."f", rae1), Rangeary(ran2, negative: "d").negation
         
     | 
| 
      
 1072 
     | 
    
         
            +
             
     | 
| 
      
 1073 
     | 
    
         
            +
                  r3 =  Rangeary(ran2, negative: "d")
         
     | 
| 
      
 1074 
     | 
    
         
            +
                  r4 = ~r3
         
     | 
| 
      
 1075 
     | 
    
         
            +
                  assert_equal Rangeary("d"..."f", rae1), r4
         
     | 
| 
      
 1076 
     | 
    
         
            +
                  assert_equal "d", r4.infinities[:negative]
         
     | 
| 
      
 1077 
     | 
    
         
            +
                  assert            r4.infinities.definite?(:negative)
         
     | 
| 
      
 1078 
     | 
    
         
            +
                  assert_nil        r4.infinities[:positive]
         
     | 
| 
      
 1079 
     | 
    
         
            +
                  assert            r4.infinities.guessed?(:positive)
         
     | 
| 
      
 1080 
     | 
    
         
            +
                  err = assert_raises(ArgumentError){ Rangeary(r4, positive: "t") } # => specified/inherited positive infinity ("t") is not large enough or inconsistent: (<=> nil)
         
     | 
| 
      
 1081 
     | 
    
         
            +
                  assert_match(/not large enough or inconsistent\b/, err.message)
         
     | 
| 
      
 1082 
     | 
    
         
            +
                  r6 =   Rangeary(r3, positive: "t")  # OK: positive infinity is set.
         
     | 
| 
      
 1083 
     | 
    
         
            +
                  assert_equal "d", r6.infinities[:negative]
         
     | 
| 
      
 1084 
     | 
    
         
            +
                  assert            r6.infinities.definite?(:negative)
         
     | 
| 
      
 1085 
     | 
    
         
            +
                  r7 =  ~r6
         
     | 
| 
      
 1086 
     | 
    
         
            +
                  assert_equal Rangeary("d"..."f", RangeExtd("k".."t", true)), r7
         
     | 
| 
      
 1087 
     | 
    
         
            +
                  assert_equal r4[0],  r7[0]
         
     | 
| 
      
 1088 
     | 
    
         
            +
                  refute_equal r4[1],  r7[1]
         
     | 
| 
      
 1089 
     | 
    
         
            +
             
     | 
| 
      
 1090 
     | 
    
         
            +
                  assert_equal Rangeary(-InfF...7), Rangeary(7..).negation
         
     | 
| 
      
 1091 
     | 
    
         
            +
                  assert_equal Rangeary(7..),       Rangeary(7..).negation.negation
         
     | 
| 
      
 1092 
     | 
    
         
            +
                  assert_equal Rangeary(...7),      Rangeary(7.., negative: nil).negation
         
     | 
| 
      
 1093 
     | 
    
         
            +
                  assert_equal Rangeary(...7),   Rangeary(..nil).conjunction(Rangeary(7..)).negation
         
     | 
| 
      
 1094 
     | 
    
         
            +
                  assert_equal Rangeary(...7), ~(Rangeary(..nil) * Rangeary(7..))
         
     | 
| 
      
 1095 
     | 
    
         
            +
             
     | 
| 
      
 1096 
     | 
    
         
            +
                end	# def test_in_document
         
     | 
| 
       644 
1097 
     | 
    
         | 
| 
       645 
     | 
    
         
            -
                ### All false, well, and they should be.
         
     | 
| 
       646 
     | 
    
         
            -
                # def test_equal
         
     | 
| 
       647 
     | 
    
         
            -
                #   # Plus
         
     | 
| 
       648 
     | 
    
         
            -
                #   assert_equal RangeExtd(1..3), RangeExtd(1...4)
         
     | 
| 
       649 
     | 
    
         
            -
                #   assert_equal Rangeary(1..3),  Rangeary(1...4)
         
     | 
| 
       650 
     | 
    
         
            -
                # end
         
     | 
| 
       651 
1098 
     | 
    
         | 
| 
       652 
1099 
     | 
    
         
             
              end	# class TestUnitFoo < MiniTest::Unit::TestCase
         
     | 
| 
       653 
1100 
     | 
    
         |