use quickcheck::Arbitrary; use crate::{test::signer::MockSigner, KeyPair, PublicKey, Seed}; impl Arbitrary for MockSigner { fn arbitrary(g: &mut quickcheck::Gen) -> Self { let bytes: ByteArray<32> = Arbitrary::arbitrary(g); let seed = Seed::new(bytes.into_inner()); let sk = KeyPair::from_seed(seed).sk; MockSigner::from(sk) } } impl Arbitrary for PublicKey { fn arbitrary(g: &mut quickcheck::Gen) -> Self { let bytes: ByteArray<32> = Arbitrary::arbitrary(g); let seed = Seed::new(bytes.into_inner()); let keypair = KeyPair::from_seed(seed); PublicKey(keypair.pk) } } #[derive(Clone, Debug)] pub struct ByteArray([u8; N]); impl ByteArray { pub fn into_inner(self) -> [u8; N] { self.0 } pub fn as_slice(&self) -> &[u8] { self.0.as_slice() } } impl Arbitrary for ByteArray { fn arbitrary(g: &mut quickcheck::Gen) -> Self { let mut bytes: [u8; N] = [0; N]; for byte in &mut bytes { *byte = u8::arbitrary(g); } Self(bytes) } }