wolfpack 0.3.1

A package manager and a build tool that supports major package formats (deb, RPM, ipk, pkg, MSIX).
Documentation
use std::fmt::Debug;
use std::fmt::Display;
use std::str::FromStr;

use arbitrary::Arbitrary;
use arbtest::arbtest;
use rand::rngs::OsRng;
use rand::RngCore;

use super::*;
use crate::hash::BUFFER_LEN;

pub fn same_as_computing_hash_of_the_whole_file<H: Hasher>()
where
    H::Output: PartialEq + Debug,
{
    arbtest(|u| {
        let spread = BUFFER_LEN / 2;
        let mut data = vec![0_u8; BUFFER_LEN - spread + u.int_in_range::<usize>(0..=2 * spread)?];
        OsRng.fill_bytes(&mut data);
        let (actual_hash, size) = HashingReader::<&[u8], H>::new(&data[..]).digest().unwrap();
        assert_eq!(data.len() as u64, size);
        let mut hasher = H::new();
        hasher.update(&data);
        let expected_hash = hasher.finalize();
        assert_eq!(expected_hash, actual_hash);
        Ok(())
    });
}

pub fn display_parse<T: Display + FromStr + Debug + PartialEq + for<'a> Arbitrary<'a>>() {
    arbtest(|u| {
        let expected: T = u.arbitrary()?;
        let string = expected.to_string();
        let actual: T = string
            .parse()
            .map_err(|_| panic!("string {:?}", string))
            .unwrap();
        assert_eq!(
            expected, actual,
            "expected = {:?}, actual = {:?}, string = {:?}",
            expected, actual, string
        );
        Ok(())
    });
}