fix: use range-aware shrinker in Int64Range to stay within bounds#92
Open
Yanhu007 wants to merge 1 commit intoleanovate:masterfrom
Open
fix: use range-aware shrinker in Int64Range to stay within bounds#92Yanhu007 wants to merge 1 commit intoleanovate:masterfrom
Yanhu007 wants to merge 1 commit intoleanovate:masterfrom
Conversation
Int64Range used the generic Int64Shrinker which shrinks toward 0, producing values outside the [min, max] range during shrinking. While the Sieve filters these out, some property-based test frameworks (like stateful commands) may not apply the sieve during the shrink phase, causing panics from out-of-bounds values. Add int64RangeShrinker that shrinks toward min by halving the distance from min, guaranteeing all shrunk values stay within [min, max]. Fixes leanovate#81
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #81
Problem
gen.IntRange(min, max)uses the genericInt64Shrinkerwhich shrinks toward 0. When the range doesn't include 0 (e.g.,IntRange(5, 10)), the shrinker produces values outside the range during shrinking.While the
Sievefilters these out in some contexts, stateful command-based tests may not apply the sieve during the shrink phase, causing panics from out-of-bounds values.Fix
Add a range-aware
int64RangeShrinker(min, max)that shrinks towardminby halving the distance frommin, guaranteeing all shrunk values stay within[min, max].All existing tests pass with
-race.