use quickcheck::{Arbitrary, Gen};
use rand::seq::SliceRandom;
use crate::{Code, Multihash, MultihashCode, U64};
const HASHES: [Code; 16] = [
Code::Sha1,
Code::Sha2_256,
Code::Sha2_512,
Code::Sha3_224,
Code::Sha3_256,
Code::Sha3_384,
Code::Sha3_512,
Code::Keccak224,
Code::Keccak256,
Code::Keccak384,
Code::Keccak512,
Code::Blake2b256,
Code::Blake2b512,
Code::Blake2s128,
Code::Blake2s256,
Code::Blake3_256,
];
impl Arbitrary for Multihash<U64> {
fn arbitrary<G: Gen>(g: &mut G) -> Self {
let code = *HASHES.choose(g).unwrap();
let data: Vec<u8> = Arbitrary::arbitrary(g);
code.digest(&data)
}
}