Skip to content

Commit

Permalink
Merge pull request #79 from AljoschaMeyer/master
Browse files Browse the repository at this point in the history
Implement Arbitrary for nonzero integers
  • Loading branch information
fitzgen committed Mar 29, 2021
2 parents 6b72fd8 + 4edc0c3 commit a2ce10b
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/lib.rs
Expand Up @@ -37,6 +37,8 @@ pub mod size_hint;
use core::cell::{Cell, RefCell, UnsafeCell};
use core::iter;
use core::mem;
use core::num::{NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize};
use core::num::{NonZeroU128, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize};
use core::ops::{Range, RangeBounds, RangeFrom, RangeInclusive, RangeTo, RangeToInclusive};
use core::str;
use core::time::Duration;
Expand Down Expand Up @@ -1040,6 +1042,37 @@ impl<'a, A: Arbitrary<'a>> Arbitrary<'a> for ::std::num::Wrapping<A> {
}
}

macro_rules! implement_nonzero_int {
($nonzero:ty, $int:ty) => {
impl<'a> Arbitrary<'a> for $nonzero {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
match Self::new(<$int as Arbitrary<'a>>::arbitrary(u)?) {
Some(n) => Ok(n),
None => Err(Error::IncorrectFormat),
}
}

#[inline]
fn size_hint(depth: usize) -> (usize, Option<usize>) {
<$int as Arbitrary<'a>>::size_hint(depth)
}
}
};
}

implement_nonzero_int! { NonZeroI8, i8 }
implement_nonzero_int! { NonZeroI16, i16 }
implement_nonzero_int! { NonZeroI32, i32 }
implement_nonzero_int! { NonZeroI64, i64 }
implement_nonzero_int! { NonZeroI128, i128 }
implement_nonzero_int! { NonZeroIsize, isize }
implement_nonzero_int! { NonZeroU8, u8 }
implement_nonzero_int! { NonZeroU16, u16 }
implement_nonzero_int! { NonZeroU32, u32 }
implement_nonzero_int! { NonZeroU64, u64 }
implement_nonzero_int! { NonZeroU128, u128 }
implement_nonzero_int! { NonZeroUsize, usize }

#[cfg(test)]
mod test {
use super::*;
Expand Down

0 comments on commit a2ce10b

Please sign in to comment.