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.
@@ -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
- # print '$LOAD_PATH=';p $LOAD_PATH
6
- arlibrelpath = []
8
+ print "$LOAD_PATH=#{$LOAD_PATH}" if $DEBUG
7
9
  arlibbase = %w(rangeary)
8
10
 
9
- arlibbase.each do |elibbase|
10
- #elibbase
11
-
12
- arAllPaths = []
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 arlibrelpath
44
- print "NOTE: Library full paths:\n"
45
- arlibbase.each do |elibbase|
46
- p $LOADED_FEATURES.grep(/#{Regexp.quote(File.basename(elibbase)+'.rb')}$/)
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
- assert_raises(ArgumentError){ Rangeary.new(3..5, 3..1) } # => invalid parameter
184
- assert_raises(ArgumentError){ Rangeary.new(3..5, 4...4) } # => invalid parameter
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
- assert_equal nil, ra.begin
226
- assert_equal nil, ra.end
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
- assert_equal nil, RaN[1]
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
- assert_equal nil, conjRE(1..3, 5..9).begin
315
- assert_equal nil, conjRE(1...5, 5..9).begin
316
- assert_equal nil, conjRE(1..5, r59).begin
317
- assert_equal nil, conjRE(1...5, r59).begin
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
- assert_equal nil, conjRE(5..9, 1...5).begin
378
- assert_equal nil, conjRE(r59, 1..5).begin
379
- assert_equal nil, conjRE(r59, 1...5).begin
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
- assert_equal nil, conjRE(5..9, 1..3).begin
383
- assert_equal nil, conjRE(r59, 1...4).begin
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(ArgumentError){ conjRE(true..true, true..true) }
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
- assert_equal r1, r1 * Rangeary(RangeExtd::ALL)
422
- assert_equal r1, Rangeary(RangeExtd::ALL) * r1
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 test_combinations
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 Rangeary(RangeExtd::ALL), ~RaN
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..inf), ~Rangeary(?d...?x, :negative => ?a)
491
- assert_raises(ArgumentError){ Rangeary(?a..?z, :negative => -Float::INFINITY) }
492
- assert_raises(ArgumentError){ Rangeary(1...8.5, :negative => ?a) }
493
- _ = Rangeary(1...8.5, :positive => inf) # => No error.
494
-
495
- ra = Rangeary(?d...?f, :negative => ?a)
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
- assert_equal ?a, ra.infinities[:negative]
502
- assert_equal inf, ra.infinities[:positive]
503
- assert_equal ?a, rc.infinities[:negative]
504
- assert_equal inf, rc.infinities[:positive]
505
- assert_equal ?a, rd.infinities[:negative]
506
- assert_equal inf, rd.infinities[:positive]
507
- assert_equal ?a, rf.infinities[:negative]
508
- assert_equal ?z, rf.infinities[:positive]
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 test_flatten
558
- assert [6,7,11], Rangeary(RangeExtd(10...12,T), RangeExtd(5...8,T)).flatten
559
- assert_raises(TypeError){ Rangeary( 10...12, RangeExtd(5.0...8,T)).flatten }
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).flatten.reduce(:+) # => 33
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