expose feature gated quickcheck arbitrary impl for uints
This commit is contained in:
parent
08d458976c
commit
206529b7f9
|
@ -15,6 +15,7 @@ rustc_version = "0.2"
|
|||
byteorder = { version = "1", default-features = false }
|
||||
heapsize = { version = "0.4.2", optional = true }
|
||||
rustc-hex = { version = "1.0", optional = true }
|
||||
quickcheck = { version = "0.6", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
crunchy = "0.1.5"
|
||||
|
@ -23,6 +24,7 @@ crunchy = "0.1.5"
|
|||
std = ["rustc-hex", "byteorder/std"]
|
||||
heapsizeof = ["heapsize"]
|
||||
use_asm = []
|
||||
impl_quickcheck_arbitrary = ["quickcheck"]
|
||||
|
||||
[[example]]
|
||||
name = "modular"
|
||||
|
|
|
@ -26,5 +26,9 @@ pub extern crate core;
|
|||
#[doc(hidden)]
|
||||
pub extern crate rustc_hex;
|
||||
|
||||
#[cfg(feature="impl_quickcheck_arbitrary")]
|
||||
#[doc(hidden)]
|
||||
pub extern crate quickcheck;
|
||||
|
||||
mod uint;
|
||||
pub use uint::*;
|
||||
|
|
38
src/uint.rs
38
src/uint.rs
|
@ -1229,6 +1229,9 @@ macro_rules! construct_uint {
|
|||
|
||||
impl_std_for_uint!($name, $n_words);
|
||||
impl_heapsize_for_uint!($name);
|
||||
// `$n_words * 8` because macro expects bytes and
|
||||
// uints use 64 bit (8 byte) words
|
||||
impl_quickcheck_arbitrary_for_uint!($name, ($n_words * 8));
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -1358,3 +1361,38 @@ macro_rules! impl_heapsize_for_uint {
|
|||
macro_rules! impl_heapsize_for_uint {
|
||||
($name: ident) => {}
|
||||
}
|
||||
|
||||
#[cfg(feature="impl_quickcheck_arbitrary")]
|
||||
#[macro_export]
|
||||
#[doc(hidden)]
|
||||
macro_rules! impl_quickcheck_arbitrary_for_uint {
|
||||
($uint: ty, $n_bytes: tt) => {
|
||||
impl $crate::quickcheck::Arbitrary for $uint {
|
||||
fn arbitrary<G: $crate::quickcheck::Gen>(g: &mut G) -> Self {
|
||||
let mut res = [0u8; $n_bytes];
|
||||
|
||||
let p = g.next_f64();
|
||||
let range =
|
||||
if p < 0.1 {
|
||||
$n_bytes
|
||||
} else if p < 0.2 {
|
||||
$n_bytes / 2
|
||||
} else {
|
||||
$n_bytes / 5
|
||||
};
|
||||
|
||||
let size = g.gen_range(0, range);
|
||||
g.fill_bytes(&mut res[..size]);
|
||||
|
||||
res.as_ref().into()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(feature="impl_quickcheck_arbitrary"))]
|
||||
#[macro_export]
|
||||
#[doc(hidden)]
|
||||
macro_rules! impl_quickcheck_arbitrary_for_uint {
|
||||
($uint: ty, $n_bytes: tt) => {}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue