@@ -99,7 +99,7 @@ def bsearch(&block)
99
99
end
100
100
101
101
private def bsearch_float ( &block )
102
- normalized_begin = Primitive . nil ?( self . begin ) ? -Float ::INFINITY : self . begin . to_f
102
+ normalized_begin = Truffle :: RangeOperations . beginless ?( self ) ? -Float ::INFINITY : self . begin . to_f
103
103
normalized_end = Truffle ::RangeOperations . endless? ( self ) ? Float ::INFINITY : self . end . to_f
104
104
normalized_end = normalized_end . prev_float if self . exclude_end?
105
105
min = normalized_begin
@@ -262,6 +262,16 @@ def bsearch(&block)
262
262
last_admissible
263
263
end
264
264
265
+ def count ( item = undefined )
266
+ if Truffle ::RangeOperations . beginless? ( self ) || Truffle ::RangeOperations . endless? ( self )
267
+ return Float ::INFINITY unless block_given? || !Primitive . undefined? ( item )
268
+ end
269
+
270
+ p "count for here"
271
+
272
+ super
273
+ end
274
+
265
275
private def each_internal ( &block )
266
276
return to_enum { size } unless block_given?
267
277
first , last = self . begin , self . end
@@ -325,6 +335,7 @@ def bsearch(&block)
325
335
end
326
336
327
337
def first ( n = undefined )
338
+ raise RangeError , 'cannot get the first element of beginless range' if Primitive . nil? ( self . begin )
328
339
return self . begin if Primitive . undefined? n
329
340
330
341
super
@@ -383,6 +394,10 @@ def last(n=undefined)
383
394
384
395
def max
385
396
raise RangeError , 'cannot get the maximum of endless range' if Truffle ::RangeOperations . endless? ( self )
397
+ if Truffle ::RangeOperations . beginless? ( self )
398
+ raise RangeError , 'cannot get the maximum of beginless range with custom comparison method' if block_given?
399
+ return exclude_end? ? self . end - 1 : self . end
400
+ end
386
401
return super if block_given? || ( exclude_end? && !self . end . kind_of? ( Numeric ) )
387
402
return nil if Comparable . compare_int ( self . end <=> self . begin ) < 0
388
403
return nil if exclude_end? && Comparable . compare_int ( self . end <=> self . begin ) == 0
@@ -400,8 +415,13 @@ def max
400
415
end
401
416
402
417
def min
418
+ raise RangeError , 'cannot get the minimum of beginless range' if Truffle ::RangeOperations . beginless? ( self )
419
+ if Truffle ::RangeOperations . endless? ( self )
420
+ raise RangeError , 'cannot get the minimum of endless range with custom comparison method' if block_given?
421
+ return self . begin
422
+ end
403
423
return super if block_given?
404
- if ! Truffle :: RangeOperations . endless? ( self ) && Comparable . compare_int ( self . end <=> self . begin ) < 0
424
+ if Comparable . compare_int ( self . end <=> self . begin ) < 0
405
425
return nil
406
426
elsif exclude_end? && self . end == self . begin
407
427
return nil
@@ -499,6 +519,7 @@ def cover?(value)
499
519
end
500
520
501
521
def size
522
+ return Float ::INFINITY if Truffle ::RangeOperations . beginless? ( self )
502
523
return nil unless self . begin . kind_of? ( Numeric )
503
524
return Float ::INFINITY if Truffle ::RangeOperations . endless? ( self )
504
525
0 commit comments