From 4c276dae64c953836d63fa0224d29f62439785d5 Mon Sep 17 00:00:00 2001 From: teor Date: Fri, 28 May 2021 22:49:28 +1000 Subject: [PATCH] Cleanup a few arbitrary impls (#2222) --- zebra-chain/src/amount.rs | 4 ++-- zebra-chain/src/parameters.rs | 3 +++ zebra-chain/src/parameters/arbitrary.rs | 21 +++++++++++++++++++++ zebra-chain/src/transaction/arbitrary.rs | 16 +--------------- zebra-chain/src/transparent/prop.rs | 4 ++++ zebra-state/src/utxo.rs | 5 ++++- 6 files changed, 35 insertions(+), 18 deletions(-) create mode 100644 zebra-chain/src/parameters/arbitrary.rs diff --git a/zebra-chain/src/amount.rs b/zebra-chain/src/amount.rs index 8cea7575..eb3110ae 100644 --- a/zebra-chain/src/amount.rs +++ b/zebra-chain/src/amount.rs @@ -313,7 +313,7 @@ pub enum Error { /// ); /// ``` #[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub struct NegativeAllowed {} +pub struct NegativeAllowed; impl Constraint for NegativeAllowed { fn valid_range() -> RangeInclusive { @@ -331,7 +331,7 @@ impl Constraint for NegativeAllowed { /// ); /// ``` #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)] -pub struct NonNegative {} +pub struct NonNegative; impl Constraint for NonNegative { fn valid_range() -> RangeInclusive { diff --git a/zebra-chain/src/parameters.rs b/zebra-chain/src/parameters.rs index ff369e79..fe62f7b6 100644 --- a/zebra-chain/src/parameters.rs +++ b/zebra-chain/src/parameters.rs @@ -17,6 +17,9 @@ mod network; mod network_upgrade; mod transaction; +#[cfg(any(test, feature = "proptest-impl"))] +pub mod arbitrary; + pub use genesis::*; pub use network::Network; pub use network_upgrade::*; diff --git a/zebra-chain/src/parameters/arbitrary.rs b/zebra-chain/src/parameters/arbitrary.rs new file mode 100644 index 00000000..def06a9d --- /dev/null +++ b/zebra-chain/src/parameters/arbitrary.rs @@ -0,0 +1,21 @@ +//! Arbitrary implementations for network parameters + +use proptest::prelude::*; + +use super::NetworkUpgrade; + +impl NetworkUpgrade { + /// Generates network upgrades with [`BranchId`]s + pub fn branch_id_strategy() -> BoxedStrategy { + prop_oneof![ + Just(NetworkUpgrade::Overwinter), + Just(NetworkUpgrade::Sapling), + Just(NetworkUpgrade::Blossom), + Just(NetworkUpgrade::Heartwood), + Just(NetworkUpgrade::Canopy), + Just(NetworkUpgrade::Nu5), + // TODO: add future network upgrades (#1974) + ] + .boxed() + } +} diff --git a/zebra-chain/src/transaction/arbitrary.rs b/zebra-chain/src/transaction/arbitrary.rs index 8dfbb909..430f4bf3 100644 --- a/zebra-chain/src/transaction/arbitrary.rs +++ b/zebra-chain/src/transaction/arbitrary.rs @@ -108,7 +108,7 @@ impl Transaction { /// Generate a proptest strategy for V5 Transactions pub fn v5_strategy(ledger_state: LedgerState) -> BoxedStrategy { ( - Self::branch_id_strategy(), + NetworkUpgrade::branch_id_strategy(), any::(), any::(), transparent::Input::vec_strategy(ledger_state, 10), @@ -140,20 +140,6 @@ impl Transaction { .boxed() } - // A custom strategy to use only some of the NetworkUpgrade values - fn branch_id_strategy() -> BoxedStrategy { - prop_oneof![ - Just(NetworkUpgrade::Overwinter), - Just(NetworkUpgrade::Sapling), - Just(NetworkUpgrade::Blossom), - Just(NetworkUpgrade::Heartwood), - Just(NetworkUpgrade::Canopy), - Just(NetworkUpgrade::Nu5), - // TODO: add future network upgrades - ] - .boxed() - } - /// Proptest Strategy for creating a Vector of transactions where the first /// transaction is always the only coinbase transaction pub fn vec_strategy( diff --git a/zebra-chain/src/transparent/prop.rs b/zebra-chain/src/transparent/prop.rs index 0f7d57df..7675c5e6 100644 --- a/zebra-chain/src/transparent/prop.rs +++ b/zebra-chain/src/transparent/prop.rs @@ -1,3 +1,7 @@ +//! Property tests for transparent inputs and outputs. +//! +//! TODO: Move this module into a `tests` submodule. + use zebra_test::prelude::*; use crate::{block, LedgerState}; diff --git a/zebra-state/src/utxo.rs b/zebra-state/src/utxo.rs index 5ccfa3a1..f9440625 100644 --- a/zebra-state/src/utxo.rs +++ b/zebra-state/src/utxo.rs @@ -5,7 +5,10 @@ use zebra_chain::{block, transparent}; /// An unspent `transparent::Output`, with accompanying metadata. #[derive(Clone, Debug, PartialEq, Eq)] -#[cfg_attr(test, derive(proptest_derive::Arbitrary))] +#[cfg_attr( + any(test, feature = "proptest-impl"), + derive(proptest_derive::Arbitrary) +)] pub struct Utxo { /// The output itself. pub output: transparent::Output,