-
Notifications
You must be signed in to change notification settings - Fork 76
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP] feat: introduce ArbitraryInRange #192
base: main
Are you sure you want to change the base?
[WIP] feat: introduce ArbitraryInRange #192
Conversation
I'd like to see this get added as well. I've tested |
Actually, the trait #[test] │On branch add-test-to-in-range
fn arbitrary_in_range_for_integers() { │Changes not staged for commit:
let x = [1, 2, 3, 4]; │ (use "git add <file>..." to update what will be committed)
let mut u = Unstructured::new(&x); │ (use "git restore <file>..." to discard changes in working directory)
let result_one = i32::arbitrary_in_range(&mut u, &(0..=10)); │ modified: src/tests.rs
│
let y = [1, 2, 3]; │Untracked files:
let mut u = Unstructured::new(&y); │ (use "git add <file>..." to include in what will be committed)
let result_two = i32::arbitrary_in_range(&mut u, &(0..=10)); │ src/.tests.rs.swp
│ tags
assert_ne!(result_one, result_two); │
} The result is always |
c28e5fa
to
d97bd18
Compare
In let minimum = map_bound(range.start_bound(), |x| *x as Self);
let maximum = map_bound(range.start_bound(), |x| *x as Self);
u.int_in_range((minimum, maximum)) Note the second |
Thanks, that makes sense. Will give it a test when I can. |
This PR introduces the trait
ArbitraryInRange
, which allows limiting the range of possible values for some types. The intention is to use this trait in an not-yet-implemented[arbitrary(range(min = …, max = …))]
field-attribute. A separate trait is necessary, because 1. not all types can be meaningful used as ranges, 2. I like to use#[arbitrary(range(min = 23, max = 42))]
onOption<u8>
.However, there are certainly some implementations missing, so still WIP.