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
|
|