//! Strategies for `u128` and `i128`, since proptest doesn't provide them for the wasm target. macro_rules! impl_num { { $name:ident } => { pub(crate) mod $name { type InnerStrategy = crate::array::UniformArrayStrategy; use proptest::strategy::{Strategy, ValueTree, NewTree}; #[must_use = "strategies do nothing unless used"] #[derive(Clone, Copy, Debug)] pub struct Any { strategy: InnerStrategy, } pub struct BinarySearch { inner: ::Tree, } impl ValueTree for BinarySearch { type Value = $name; fn current(&self) -> $name { unsafe { core::mem::transmute(self.inner.current()) } } fn simplify(&mut self) -> bool { self.inner.simplify() } fn complicate(&mut self) -> bool { self.inner.complicate() } } impl Strategy for Any { type Tree = BinarySearch; type Value = $name; fn new_tree(&self, runner: &mut proptest::test_runner::TestRunner) -> NewTree { Ok(BinarySearch { inner: self.strategy.new_tree(runner)? }) } } pub const ANY: Any = Any { strategy: InnerStrategy::new(proptest::num::u64::ANY) }; } } } impl_num! { u128 } impl_num! { i128 }