Skip to content

Commit

Permalink
Update quickcheck to 1.0.3 (#239)
Browse files Browse the repository at this point in the history
Co-authored-by: tyshkor <tyshko1@gmail.com>
  • Loading branch information
tyshko5 and tyshkor authored Oct 26, 2022
1 parent 52b4a7f commit bfd7e38
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 29 deletions.
70 changes: 57 additions & 13 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ ripemd = ["ripemd-rs"]

[dependencies]
parity-scale-codec = { version = "3.0.0", default-features = false, features = ["derive"], optional = true }
quickcheck = { version = "0.9.2", optional = true }
rand = { version = "0.7.3", optional = true }
quickcheck = { version = "1.0.3", optional = true }
rand = { version = "0.7.3", optional = true, features = ["small_rng"] }
serde = { version = "1.0.116", optional = true, default-features = false, features = ["derive"] }
serde-big-array = { version = "0.3.2", optional = true, features = ["const-generics"] }
multihash-derive = { version = "0.8.0", path = "derive", default-features = false, optional = true }
Expand All @@ -60,7 +60,7 @@ core2 = { version = "0.4.0", default-features = false }
criterion = "0.3.3"
hex = "0.4.2"
serde_json = "1.0.58"
quickcheck = "0.9.2"
quickcheck = "1.0.3"
rand = "0.7.3"
arbitrary = "1.1.0"
multihash = { path = ".", features = ["sha1", "strobe"] }
Expand Down
27 changes: 14 additions & 13 deletions src/arb.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use quickcheck::Gen;
use rand::{
distributions::{weighted::WeightedIndex, Distribution},
Rng,
Rng, RngCore, SeedableRng,
};

use arbitrary::{size_hint, Unstructured};
Expand All @@ -10,27 +10,28 @@ use crate::MultihashGeneric;

/// Generates a random valid multihash.
impl<const S: usize> quickcheck::Arbitrary for MultihashGeneric<S> {
fn arbitrary<G: Gen>(g: &mut G) -> Self {
fn arbitrary(g: &mut Gen) -> MultihashGeneric<S> {
// In real world lower multihash codes are more likely to happen, hence distribute them
// with bias towards smaller values.
let weights = [128, 64, 32, 16, 8, 4, 2, 1];
let dist = WeightedIndex::new(weights.iter()).unwrap();
let code = match dist.sample(g) {
0 => g.gen_range(0, u64::pow(2, 7)),
1 => g.gen_range(u64::pow(2, 7), u64::pow(2, 14)),
2 => g.gen_range(u64::pow(2, 14), u64::pow(2, 21)),
3 => g.gen_range(u64::pow(2, 21), u64::pow(2, 28)),
4 => g.gen_range(u64::pow(2, 28), u64::pow(2, 35)),
5 => g.gen_range(u64::pow(2, 35), u64::pow(2, 42)),
6 => g.gen_range(u64::pow(2, 42), u64::pow(2, 49)),
7 => g.gen_range(u64::pow(2, 56), u64::pow(2, 63)),
let mut rng = rand::rngs::SmallRng::seed_from_u64(u64::arbitrary(g));
let code = match dist.sample(&mut rng) {
0 => rng.gen_range(0, u64::pow(2, 7)),
1 => rng.gen_range(u64::pow(2, 7), u64::pow(2, 14)),
2 => rng.gen_range(u64::pow(2, 14), u64::pow(2, 21)),
3 => rng.gen_range(u64::pow(2, 21), u64::pow(2, 28)),
4 => rng.gen_range(u64::pow(2, 28), u64::pow(2, 35)),
5 => rng.gen_range(u64::pow(2, 35), u64::pow(2, 42)),
6 => rng.gen_range(u64::pow(2, 42), u64::pow(2, 49)),
7 => rng.gen_range(u64::pow(2, 56), u64::pow(2, 63)),
_ => unreachable!(),
};

// Maximum size is S byte due to the generic.
let size = g.gen_range(0, S);
let size = rng.gen_range(0, S);
let mut data = [0; S];
g.fill_bytes(&mut data);
rng.fill_bytes(&mut data);
MultihashGeneric::wrap(code, &data[..size]).unwrap()
}
}
Expand Down

0 comments on commit bfd7e38

Please sign in to comment.