Impl Arbitrary for SproutShieldedAddress and add roundtrip test
This commit is contained in:
parent
fae9da7dd9
commit
66b33172e4
|
|
@ -5,7 +5,7 @@ use std::{fmt, io};
|
||||||
use bs58;
|
use bs58;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use proptest::{arbitrary::Arbitrary, collection::vec, prelude::*};
|
use proptest::{arbitrary::Arbitrary, array, prelude::*};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
keys::sprout,
|
keys::sprout,
|
||||||
|
|
@ -93,3 +93,43 @@ impl ZcashDeserialize for SproutShieldedAddress {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
impl Arbitrary for SproutShieldedAddress {
|
||||||
|
type Parameters = ();
|
||||||
|
|
||||||
|
fn arbitrary_with(_args: Self::Parameters) -> Self::Strategy {
|
||||||
|
(
|
||||||
|
any::<Network>(),
|
||||||
|
array::uniform32(any::<u8>()),
|
||||||
|
array::uniform32(any::<u8>()),
|
||||||
|
)
|
||||||
|
.prop_map(|(network, paying_key_bytes, transmission_key_bytes)| {
|
||||||
|
return Self {
|
||||||
|
network,
|
||||||
|
paying_key: sprout::PayingKey(paying_key_bytes),
|
||||||
|
transmission_key: sprout::TransmissionKey::from(transmission_key_bytes),
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.boxed()
|
||||||
|
}
|
||||||
|
|
||||||
|
type Strategy = BoxedStrategy<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
proptest! {
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sprout_address_roundtrip(zaddr in any::<SproutShieldedAddress>()) {
|
||||||
|
|
||||||
|
let mut data = Vec::new();
|
||||||
|
|
||||||
|
zaddr.zcash_serialize(&mut data).expect("sprout z-addr should serialize");
|
||||||
|
|
||||||
|
let zaddr2 = SproutShieldedAddress::zcash_deserialize(&data[..])
|
||||||
|
.expect("randomized sprout z-addr should deserialize");
|
||||||
|
|
||||||
|
prop_assert_eq![zaddr, zaddr2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue