Skip to content

Commit

Permalink
Merge pull request #84 from rcvalle/master
Browse files Browse the repository at this point in the history
Implement Arbitrary for Ipv4Addr and Ipv6Addr
  • Loading branch information
Manishearth committed May 20, 2021
2 parents d14dbe5 + 26ccbe2 commit a9c8c66
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/lib.rs
Expand Up @@ -45,6 +45,7 @@ use core::time::Duration;
use std::borrow::{Cow, ToOwned};
use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
use std::ffi::{CString, OsString};
use std::net::{Ipv4Addr, Ipv6Addr};
use std::path::PathBuf;
use std::rc::Rc;
use std::sync::atomic::{AtomicBool, AtomicIsize, AtomicUsize};
Expand Down Expand Up @@ -1074,6 +1075,28 @@ implement_nonzero_int! { NonZeroU64, u64 }
implement_nonzero_int! { NonZeroU128, u128 }
implement_nonzero_int! { NonZeroUsize, usize }

impl<'a> Arbitrary<'a> for Ipv4Addr {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
Ok(Ipv4Addr::from(u32::arbitrary(u)?))
}

#[inline]
fn size_hint(_depth: usize) -> (usize, Option<usize>) {
(4, Some(4))
}
}

impl<'a> Arbitrary<'a> for Ipv6Addr {
fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
Ok(Ipv6Addr::from(u128::arbitrary(u)?))
}

#[inline]
fn size_hint(_depth: usize) -> (usize, Option<usize>) {
(16, Some(16))
}
}

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

0 comments on commit a9c8c66

Please sign in to comment.