Skip to content

Commit

Permalink
api: add Gen::set_size and Gen::from_seed
Browse files Browse the repository at this point in the history
The seed still can't be set by QuickCheck users, but the new Gen
constructor is useful for other crates that use QuickCheck only for
its Arbitrary trait.

Closes BurntSushi#277
  • Loading branch information
jakoschiko authored and cloudhead committed Dec 3, 2022
1 parent 01abd13 commit 207efd1
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
24 changes: 21 additions & 3 deletions src/arbitrary.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,33 @@ pub struct Gen {
}

impl Gen {
/// Returns a `Gen` with the given size configuration.
pub(crate) const DEFAULT_SIZE: usize = 100;

/// Returns a `Gen` with a random seed and the given size configuration.
pub fn new(size: usize) -> Gen {
Gen { rng: rand::rngs::SmallRng::from_entropy(), size }
}

/// Returns a `Gen` with the given seed and a default size configuration.
///
/// Two `Gen`s created with the same seed will generate the same values. Though the values
/// may vary between QuickCheck releases.
pub fn from_seed(seed: u64) -> Gen {
Gen {
rng: rand::rngs::SmallRng::seed_from_u64(seed),
size: Self::DEFAULT_SIZE,
}
}

/// Sets the size configuration for this generator.
///
/// The `size` parameter controls the size of random values generated.
/// For example, it specifies the maximum length of a randomly generated
/// vector, but is and should not be used to control the range of a
/// randomly generated number. (Unless that number is used to control the
/// size of a data structure.)
pub fn new(size: usize) -> Gen {
Gen { rng: rand::rngs::SmallRng::from_entropy(), size }
pub fn set_size(&mut self, size: usize) {
self.size = size;
}

/// Returns the size configured with this generator.
Expand Down
2 changes: 1 addition & 1 deletion src/tester.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ fn qc_max_tests() -> u64 {
}

fn qc_gen_size() -> usize {
let default = 100;
let default = Gen::DEFAULT_SIZE;
match env::var("QUICKCHECK_GENERATOR_SIZE") {
Ok(val) => val.parse().unwrap_or(default),
Err(_) => default,
Expand Down

0 comments on commit 207efd1

Please sign in to comment.