🐛 Fix SequenceSet#max(n) when cardinality < n <= size#580
Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This issue was one of the motivations for #563 (and #564), but then I forgot about the bug, so it wasn't fixed in time for 0.6.0!
When
SequenceSet#max(n)is called withn > cardinality, it should return a duplicate of the whole set. But,#max(n)is implemented using#slice(-n..), and (copying the behavior ofArray), when a slicing starts from an out-of-range index, it returnsnil.It was using
-[count, size].minto keep the index from going out-of-range. Prior to #564,#sizewas the same as#count, so it would give incorrect results when the set contains an endless range. After #564, this gives incorrect results when the ordered list contains duplicates.This change should also give a small performance boost, because it bypasses the complexity of
#slice(range)and just calls#dup(or returnsselfwhen the set is frozen).