From 8d34e621145c87a7078fae0c62d38af6a9542d25 Mon Sep 17 00:00:00 2001 From: Kris Nuttycombe Date: Tue, 4 Jan 2022 15:31:20 -0700 Subject: [PATCH] Clean up proptest generation for unified containers. --- .../zcash_address/src/kind/unified/address.rs | 17 ++++++++--------- .../zcash_address/src/kind/unified/fvk.rs | 13 ++++--------- .../zcash_address/src/kind/unified/ivk.rs | 15 +++++---------- 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/components/zcash_address/src/kind/unified/address.rs b/components/zcash_address/src/kind/unified/address.rs index d2aa9dc24..2aa5b593e 100644 --- a/components/zcash_address/src/kind/unified/address.rs +++ b/components/zcash_address/src/kind/unified/address.rs @@ -136,21 +136,20 @@ mod tests { /// A strategy to generate an arbitrary valid set of typecodes without /// duplication and containing only one of P2sh and P2pkh transparent - /// typecodes. + /// typecodes. The resulting vector will be sorted in encoding order. fn arb_typecodes() -> impl Strategy> { - prop::option::of(arb_transparent_typecode()) - .prop_flat_map(|transparent| { - prop::collection::hash_set(arb_shielded_typecode(), 1..4) - .prop_map(move |xs| xs.into_iter().chain(transparent).collect()) - .boxed() + prop::option::of(arb_transparent_typecode()).prop_flat_map(|transparent| { + prop::collection::hash_set(arb_shielded_typecode(), 1..4).prop_map(move |xs| { + let mut typecodes: Vec<_> = xs.into_iter().chain(transparent).collect(); + typecodes.sort_unstable_by(Typecode::encoding_order); + typecodes }) - .prop_shuffle() + }) } fn arb_unified_address_for_typecodes( - mut typecodes: Vec, + typecodes: Vec, ) -> impl Strategy> { - typecodes.sort_unstable_by(Typecode::encoding_order); typecodes .into_iter() .map(|tc| match tc { diff --git a/components/zcash_address/src/kind/unified/fvk.rs b/components/zcash_address/src/kind/unified/fvk.rs index 51636ac7f..2afc80de6 100644 --- a/components/zcash_address/src/kind/unified/fvk.rs +++ b/components/zcash_address/src/kind/unified/fvk.rs @@ -171,16 +171,11 @@ mod tests { } fn arb_shielded_fvk() -> impl Strategy> { - let p = prop_oneof![ + prop_oneof![ vec![arb_sapling_fvk().boxed()], vec![arb_orchard_fvk().boxed()], - vec![arb_orchard_fvk().boxed(), arb_sapling_fvk().boxed()], - ]; - - p.prop_map(|mut items| { - items.sort_unstable_by(Fvk::encoding_order); - items - }) + vec![arb_sapling_fvk().boxed(), arb_orchard_fvk().boxed()], + ] } fn arb_transparent_fvk() -> BoxedStrategy { @@ -192,7 +187,7 @@ mod tests { shielded in arb_shielded_fvk(), transparent in prop::option::of(arb_transparent_fvk()), ) -> Ufvk { - let mut items: Vec<_> = shielded.into_iter().chain(transparent).collect(); + let mut items: Vec<_> = transparent.into_iter().chain(shielded).collect(); items.sort_unstable_by(Fvk::encoding_order); Ufvk(items) } diff --git a/components/zcash_address/src/kind/unified/ivk.rs b/components/zcash_address/src/kind/unified/ivk.rs index 77e8938a2..31c2ad56f 100644 --- a/components/zcash_address/src/kind/unified/ivk.rs +++ b/components/zcash_address/src/kind/unified/ivk.rs @@ -161,19 +161,14 @@ mod tests { } fn arb_shielded_ivk() -> impl Strategy> { - let p = prop_oneof![ + prop_oneof![ vec![uniform64().prop_map(Ivk::Sapling)], vec![uniform64().prop_map(Ivk::Orchard)], vec![ - uniform64().prop_map(Ivk::Orchard as fn([u8; 64]) -> Ivk), - uniform64().prop_map(Ivk::Sapling) + uniform64().prop_map(Ivk::Sapling as fn([u8; 64]) -> Ivk), + uniform64().prop_map(Ivk::Orchard) ], - ]; - - p.prop_map(|mut items| { - items.sort_unstable_by(Ivk::encoding_order); - items - }) + ] } fn arb_transparent_ivk() -> impl Strategy { @@ -185,7 +180,7 @@ mod tests { shielded in arb_shielded_ivk(), transparent in prop::option::of(arb_transparent_ivk()), ) -> Uivk { - let mut items: Vec<_> = shielded.into_iter().chain(transparent).collect(); + let mut items: Vec<_> = transparent.into_iter().chain(shielded).collect(); items.sort_unstable_by(Ivk::encoding_order); Uivk(items) }