aboutsummaryrefslogtreecommitdiffstats
path: root/range.c
Commit message (Collapse)AuthorAgeFilesLines
* Make Range#reverse_each raise TypeError if endlessKouhei Yanagita2023-11-281-0/+5
|
* [DOC] More on JSON extensions (#8898)Burdette Lamar2023-11-161-0/+11
|
* describe the assumption for Range#overlap?.Tanaka Akira2023-10-131-0/+13
| | | | | | | Range#overlap? assumes that there is no minimum value. This assumption makes +(...-Float::INFINITY).overlap?((...-Float::INFINITY))+ returns true while +(...-Float::INFINITY)+ is empty.
* Add Range#reverse_each implementation for performanceKouhei Yanagita2023-10-121-0/+134
|
* Optimize `Range#count` by using `range_size` if possibleKouhei Yanagita2023-10-051-7/+16
|
* [DOC] Missing comment markersNobuyoshi Nakada2023-09-271-1/+1
|
* Optimize Range#bsearch by reducing the number of Integer#+ callsKouhei Yanagita2023-09-261-23/+28
|
* Optimize Range#bsearch for beginless/endless ranges within FixnumKouhei Yanagita2023-09-211-9/+23
|
* Fix regression when testing inclusion in unbounded rangesJeremy Evans2023-09-161-0/+9
| | | | | | | | | | | | Caused by 04a92a6764bf678919cf4b68a27496a39d6b886a. This treats unbounded ranges of arbitrary objects the same as how unbounded string ranges are treated: (..x) === y # (y <=> x) <= 0 (...x) === y # (y <=> x) < 0 (x..) === y # (x <=> y) <= 0 Fixes [Bug #19864]
* Add comment markers in empty lines [ci skip]Nobuyoshi Nakada2023-09-161-3/+3
|
* [Feature #19839] Fix `Range#overlap?` for empty rangesNobuyoshi Nakada2023-09-161-5/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Empty ranges do not overlap with any range. Regarding benchmarks, PR#8242 is significantly faster in some cases, but one of these two cases is a wrong result. | |ActiveSupport| PR#8242|built-ruby| |:--------------------------|------------:|-------:|---------:| |(2..3).overlap?(1..1) | 7.761M| 15.053M| 32.368M| | | -| 1.94x| 4.17x| |(2..3).overlap?(2..4) | 25.720M| 55.070M| 21.981M| | | 1.17x| 2.51x| -| |(2..3).overlap?(4..5) | 7.616M| 15.048M| 21.730M| | | -| 1.98x| 2.85x| |(2..3).overlap?(2..1) | 25.585M| 56.545M| 32.786M| | | -| 2.21x| 1.28x| |(2..3).overlap?(0..1) | 7.554M| 14.755M| 32.545M| | | -| 1.95x| 4.31x| |(2..3).overlap?(...1) | 6.681M| 5.843M| 32.255M| | | 1.14x| -| 5.52x| |(2...3).overlap?(..2) | 6.676M| 5.817M| 21.572M| | | 1.15x| -| 3.71x| |(2...3).overlap?(3...) | 7.392M| 14.755M| 31.805M| | | -| 2.00x| 4.30x| |(2..3).overlap?('a'..'d') | 3.675M| 3.482M| 17.009M| | | 1.06x| -| 4.89x|
* [Feature #19839] Add Range#overlap?Shouichi Kamiya2023-09-161-0/+29
| | | | | | | | | Add a method that returns true if two range overlap, otherwise false. ``` (0..10).overlap?(5..15) #=> true (0..10).overlap?(20..30) #=> false ```
* Optimize Range#bsearch for beginless/endless rangesKouhei Yanagita2023-09-161-0/+2
| | | | | | | | | | | On Range#bsearch for endless ranges, we try positions at `begin + 2**i` (i = 0, 1, 2, ...) to find a point that satisfies a given condition. Subsequently, we perform binary searching with the interval `[begin, begin + 2**n]`. However, the interval `[begin + 2**(n-1), begin + 2**n]` is sufficient for binary search because `begin + 2**(n-1)` does not satisfy the condition. The same applies to beginless ranges.
* [Bug #19533] Fix infinite range inclusion with numeric valueNobuyoshi Nakada2023-04-141-3/+7
|
* Extract range type check functionsNobuyoshi Nakada2023-04-141-19/+36
|
* Remove (newly unneeded) remarks about aliasesBurdetteLamar2023-02-191-3/+0
|
* [Bug #19426] Fix endless `Range#step` with `#succ` methodNobuyoshi Nakada2023-02-091-1/+5
|
* [DOC] Fix most of Range#cover? marked as verbatimMarco Costa2022-12-231-42/+42
|
* Introduce BOP_CMP for optimized comparisonDaniel Colson2022-12-061-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prior to this commit the `OPTIMIZED_CMP` macro relied on a method lookup to determine whether `<=>` was overridden. The result of the lookup was cached, but only for the duration of the specific method that initialized the cmp_opt_data cache structure. With this method lookup, `[x,y].max` is slower than doing `x > y ? x : y` even though there's an optimized instruction for "new array max". (John noticed somebody a proposed micro-optimization based on this fact in https://github.com/mastodon/mastodon/pull/19903.) ```rb a, b = 1, 2 Benchmark.ips do |bm| bm.report('conditional') { a > b ? a : b } bm.report('method') { [a, b].max } bm.compare! end ``` Before: ``` Comparison: conditional: 22603733.2 i/s method: 19820412.7 i/s - 1.14x (± 0.00) slower ``` This commit replaces the method lookup with a new CMP basic op, which gives the examples above equivalent performance. After: ``` Comparison: method: 24022466.5 i/s conditional: 23851094.2 i/s - same-ish: difference falls within error ``` Relevant benchmarks show an improvement to Array#max and Array#min when not using the optimized newarray_max instruction as well. They are noticeably faster for small arrays with the relevant types, and the same or maybe a touch faster on larger arrays. ``` $ make benchmark COMPARE_RUBY=<master@5958c305> ITEM=array_min $ make benchmark COMPARE_RUBY=<master@5958c305> ITEM=array_max ``` The benchmarks added in this commit also look generally improved. Co-authored-by: John Hawthorn <jhawthorn@github.com>
* Raise TypeError for endless non-numeric range include?Jeremy Evans2022-11-241-12/+37
| | | | | | | | | | | | | | | | Beginless ranges previously raised TypeError for this case, except for string ranges, which had unexpected behavior: ('a'..'z').include?('ww') # false (..'z').include?('ww') # previously true, now TypeError Use of include? with endless ranges could previously result in an infinite loop. This splits off a range_string_cover_internal function from range_include_internal. Fixes [Bug #18580]
* Using UNDEF_P macroS-H-GAMELINKS2022-11-161-7/+7
|
* Range#size returns nil for (.."a") and (nil..)Yusuke Endoh2022-10-211-1/+3
| | | | Fixes [Bug #18983]
* rb_int_range_last: properly handle non-exclusive rangeJean Boussier2022-09-041-4/+4
| | | | [Bug #18994]
* Expand tabs [ci skip]Takashi Kokubun2022-07-211-281/+281
| | | | [Misc #18891]
* Fix Range#cover? returning true for beginless ranges of different typesJeremy Evans2022-06-061-1/+53
| | | | | | | | | | | | | Previously `(2..).cover?("2"..)` was false, but `(..2).cover?(.."2")` was true. This changes it so both are false, treating beginless ranges the same as endless ranges in regards to type checks. This also adds documentation to #cover? to describe behavior with beginless and endless ranges, testing each documentation example, which is how this bug was found. Fixes [Bug #18155]
* Document beginless, endless ranges in Range class documentationJeremy Evans2022-04-251-1/+10
|
* Repaired What's Here sections for Range, String, Symbol, Struct (#5735)Burdette Lamar2022-03-301-26/+26
| | | Repaired What's Here sections for Range, String, Symbol, Struct.
* [DOC] Simplify operator method referencesNobuyoshi Nakada2022-02-121-3/+2
|
* Fix Range#include? for beginless exclusive string rangesJeremy Evans2022-02-091-0/+3
| | | | | | | | | Previously, include? would return true for the end of the range, when it should return false because the range is exclusive. Research and Analysis by Victor Shepelev. Fixes [Bug #18577]
* [DOC] Fix broken links to operator methodsNobuyoshi Nakada2022-02-081-1/+1
| | | | | Once https://github.com/ruby/rdoc/pull/865 is merged, these hacks are no longer needed.
* [DOC] Fix broken links to literals.rdocNobuyoshi Nakada2022-02-081-1/+1
|
* [DOC] Use RDoc link style for links in the same class/modulePeter Zhu2022-02-071-5/+5
| | | | | | | | | | I used this regex: (?<=\[)#(?:class|module)-([A-Za-z]+)-label-([A-Za-z0-9\-\+]+) And performed a global find & replace for this: rdoc-ref:$1@$2
* [DOC] Use RDoc link style for links to other classes/modulesPeter Zhu2022-02-071-2/+2
| | | | | | | | | | I used this regex: ([A-Za-z]+)\.html#(?:class|module)-[A-Za-z]+-label-([A-Za-z0-9\-\+]+) And performed a global find & replace for this: rdoc-ref:$1@$2
* Adding links to literals and Kernel (#5192)Burdette Lamar2021-12-031-8/+10
| | | | * Adding links to literals and Kernel
* Some codes replace to `RBOOL` macro (#5023)S.H2021-11-091-4/+2
| | | | | | | * Some code replace and using RBOOL macro * Fix indent * Using RBOOL in syserr_eqq function
* [DOC] Fix code markup [ci skip]Nobuyoshi Nakada2021-10-251-2/+2
| | | | Code markup in RDoc must not be concatenated with anothr word.
* Unify iteration argumentsNobuyoshi Nakada2021-10-101-14/+2
|
* Update iteration step in step_i_iterNobuyoshi Nakada2021-10-101-10/+6
|
* Refactor sym_step_i functionS.H2021-10-101-9/+11
|
* Using NIL_P macro instead of `== Qnil`S.H2021-10-031-2/+2
|
* Remove unnecessary checks in `Range#each` [Bug #18237]Jörg W Mittag2021-10-031-1/+0
| | | | | | | | | | | | | | | In commit:7817a438eb1803e7b3358f43bd1f38479badfbdc, the implementation of `Time#succ`, which had been deprecated for 10 years, was finally removed. During that time, there was an explicit `instance_of?` check in source:range.c#L350 with a comment that the check should be removed once `Time#succ` is removed. Since `Time#succ` is now gone, this check should be removed. Note: this should be coordinated with adding a version guard to the corresponding check in ruby/spec as well.
* Correct two errors in Range RDoc (#4889)Burdette Lamar2021-09-231-2/+2
|
* What's Here for Range (#4881)Burdette Lamar2021-09-221-4/+88
|
* Enhanced RDoc for Range (#4870)Burdette Lamar2021-09-201-88/+151
| | | Introductory material revised.
* Enhanced RDoc for Range (#4847)Burdette Lamar2021-09-181-66/+190
| | | | | | | | | | | Treated: #to_s #inspect #=== #include? #cover? #count
* Enhanced RDoc for Range#minmax (#4846)Burdette Lamar2021-09-151-6/+40
|
* Enhanced RDoc for Range#max (#4844)Burdette Lamar2021-09-151-34/+78
|
* Enhanced RDoc for Range#min (#4842)Burdette Lamar2021-09-151-10/+73
|
* [DOC] Fix broken links [ci skip]Nobuyoshi Nakada2021-09-151-1/+1
| | | | | | * As the "doc/" prefix is specified by the `--page-dir` option, remove from the rdoc references. * Refer to the original .rdoc instead of the converted .html.
* Enhanced RDoc for Range (#4839)Burdette Lamar2021-09-141-46/+81
| | | | | | | | | | | | Treated: #size #to_a #each #begin #end #first #last