Skip to content

Commit

Permalink
refactor!(PrimitiveWitness): Drop ArbitraryWith implementation
Browse files Browse the repository at this point in the history
Function `arbitrary_with` still exists but has been renamed to
`arbitrary_with_size_numbers`.

New name describes purpose of arguments, which are not unambiguous
otherwise. This change means that `PrimitiveWitness` does not any
longer implement trait `ArbitraryWith`, which only makes sense if
the arguments are unambiguous.
  • Loading branch information
aszepieniec authored and Sword-Smith committed Dec 19, 2024
1 parent 867a9ac commit 77d04ac
Show file tree
Hide file tree
Showing 20 changed files with 95 additions and 96 deletions.
28 changes: 15 additions & 13 deletions benches/consensus.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ mod transaction {
use neptune_cash::models::proof_abstractions::tasm::program::ConsensusProgram;
use neptune_cash::models::proof_abstractions::timestamp::Timestamp;
use neptune_cash::models::proof_abstractions::SecretWitness;
use proptest::arbitrary::Arbitrary;
use proptest::strategy::Strategy;
use proptest::strategy::ValueTree;
use proptest::test_runner::TestRunner;
Expand Down Expand Up @@ -104,10 +103,11 @@ mod transaction {
fn removal_records_integrity(args: (usize, usize)) {
let (num_inputs, num_outputs) = args;
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, num_outputs, 2))
.new_tree(&mut test_runner)
.unwrap()
.current();
let primitive_witness =
PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, num_outputs, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
let removal_records_integrity_witness =
RemovalRecordsIntegrityWitness::from(&primitive_witness);

Expand Down Expand Up @@ -183,10 +183,11 @@ mod transaction {
fn collect_lock_scripts(args: (usize, usize)) {
let (num_inputs, num_outputs) = args;
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, num_outputs, 2))
.new_tree(&mut test_runner)
.unwrap()
.current();
let primitive_witness =
PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, num_outputs, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
let collect_lock_scripts_witness = CollectLockScriptsWitness::from(&primitive_witness);
bench_and_profile_consensus_program(
CollectLockScripts,
Expand Down Expand Up @@ -228,10 +229,11 @@ mod transaction {
fn kernel_to_outputs(args: (usize, usize)) {
let (num_inputs, num_outputs) = args;
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, num_outputs, 2))
.new_tree(&mut test_runner)
.unwrap()
.current();
let primitive_witness =
PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, num_outputs, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
let kernel_to_outputs_witness = KernelToOutputsWitness::from(&primitive_witness);
bench_and_profile_consensus_program(
KernelToOutputs,
Expand Down
20 changes: 8 additions & 12 deletions src/models/blockchain/transaction/primitive_witness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -377,13 +377,12 @@ impl PrimitiveWitness {

true
}
}

impl Arbitrary for PrimitiveWitness {
type Parameters = (usize, usize, usize);
fn arbitrary_with(parameters: Self::Parameters) -> Self::Strategy {
let (num_inputs, num_outputs, num_public_announcements) = parameters;

pub fn arbitrary_with_size_numbers(
num_inputs: usize,
num_outputs: usize,
num_public_announcements: usize,
) -> BoxedStrategy<Self> {
// unwrap:
// - lock script preimages (inputs)
// - amounts (inputs)
Expand Down Expand Up @@ -497,10 +496,6 @@ impl Arbitrary for PrimitiveWitness {
.boxed()
}

type Strategy = BoxedStrategy<Self>;
}

impl PrimitiveWitness {
pub fn arbitrary_primitive_witness_with(
input_utxos: &[Utxo],
input_lock_scripts_and_witnesses: &[LockScriptAndWitness],
Expand Down Expand Up @@ -1127,7 +1122,7 @@ mod test {
#[strategy(1usize..3)] _num_inputs: usize,
#[strategy(1usize..3)] _num_outputs: usize,
#[strategy(0usize..3)] _num_public_announcements: usize,
#[strategy(PrimitiveWitness::arbitrary_with((#_num_inputs, #_num_outputs, #_num_public_announcements)
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(#_num_inputs, #_num_outputs, #_num_public_announcements
))]
transaction_primitive_witness: PrimitiveWitness,
) {
Expand Down Expand Up @@ -1188,7 +1183,8 @@ mod test {

#[proptest(cases = 5)]
fn total_amount_is_valid(
#[strategy(PrimitiveWitness::arbitrary_with((2,2,2)))] primitive_witness: PrimitiveWitness,
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2))]
primitive_witness: PrimitiveWitness,
) {
println!("generated primitive witness.");
let mut total = if let Some(amount) = primitive_witness.kernel.coinbase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,6 @@ impl From<&PrimitiveWitness> for CollectLockScriptsWitness {

#[cfg(test)]
mod test {
use proptest::arbitrary::Arbitrary;
use proptest::prop_assert_eq;
use proptest::strategy::Strategy;
use proptest::test_runner::TestCaseError;
Expand Down Expand Up @@ -249,7 +248,7 @@ mod test {

#[proptest(cases = 5)]
fn collect_lock_script_proptest(
#[strategy(PrimitiveWitness::arbitrary_with((2, 2, 2)))]
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2))]
primitive_witness: PrimitiveWitness,
) {
prop(primitive_witness)?;
Expand All @@ -259,7 +258,7 @@ mod test {
fn collect_lock_script_unit() {
let mut test_runner = TestRunner::deterministic();
for num_inputs in 0..5 {
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,6 @@ impl From<&PrimitiveWitness> for CollectTypeScriptsWitness {

#[cfg(test)]
mod test {
use proptest::arbitrary::Arbitrary;
use proptest::prop_assert_eq;
use proptest::strategy::Strategy;
use proptest::strategy::ValueTree;
Expand Down Expand Up @@ -440,7 +439,7 @@ mod test {
fn derived_witness_generates_accepting_program_proptest(
#[strategy(0usize..5)] _num_outputs: usize,
#[strategy(0usize..5)] _num_inputs: usize,
#[strategy(PrimitiveWitness::arbitrary_with((#_num_inputs,#_num_outputs,2)))]
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(#_num_inputs,#_num_outputs,2))]
primitive_witness: PrimitiveWitness,
) {
prop(primitive_witness)?;
Expand All @@ -460,7 +459,7 @@ mod test {
#[test]
fn derived_edge_case_witnesses_generate_accepting_programs_unit() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((0, 0, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(0, 0, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -485,7 +484,7 @@ mod test {
#[test]
fn collect_type_scripts_proof_generation() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,6 @@ impl ConsensusProgram for KernelToOutputs {

#[cfg(test)]
mod test {
use proptest::arbitrary::Arbitrary;
use proptest::prop_assert_eq;
use proptest::strategy::Strategy;
use proptest::test_runner::TestRunner;
Expand All @@ -363,7 +362,7 @@ mod test {
#[strategy(0usize..5)] _num_outputs: usize,
#[strategy(0usize..5)] _num_inputs: usize,
#[strategy(0usize..5)] _num_pub_announcements: usize,
#[strategy(PrimitiveWitness::arbitrary_with((#_num_inputs,#_num_outputs,#_num_pub_announcements)))]
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(#_num_inputs,#_num_outputs,#_num_pub_announcements))]
primitive_witness: PrimitiveWitness,
) {
let kernel_to_outputs_witness = KernelToOutputsWitness::from(&primitive_witness);
Expand All @@ -389,7 +388,7 @@ mod test {
#[test]
fn kernel_to_outputs_unittest() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -411,7 +410,7 @@ mod test {
#[test]
fn kernel_to_outputs_failing_proof() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ pub mod test {

#[proptest(cases = 5)]
fn can_produce_valid_collection(
#[strategy(PrimitiveWitness::arbitrary_with((2, 2, 2)))]
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2))]
primitive_witness: PrimitiveWitness,
) {
prop_assert!(ProofCollection::can_produce(&primitive_witness));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1078,7 +1078,6 @@ impl<'a> Arbitrary<'a> for RemovalRecordsIntegrityWitness {
mod tests {
use assert2::assert;
use itertools::Itertools;
use proptest::arbitrary::Arbitrary;
use proptest::prop_assert_eq;
use proptest::strategy::Strategy;
use proptest::test_runner::TestCaseResult;
Expand Down Expand Up @@ -1119,7 +1118,8 @@ mod tests {

#[proptest(cases = 5)]
fn removal_records_integrity_proptest(
#[strategy(PrimitiveWitness::arbitrary_with((2,2,2)))] primitive_witness: PrimitiveWitness,
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2))]
primitive_witness: PrimitiveWitness,
) {
let removal_records_integrity_witness =
RemovalRecordsIntegrityWitness::from(&primitive_witness);
Expand All @@ -1129,7 +1129,7 @@ mod tests {
#[test]
fn removal_records_integrity_only_rust_shadowing() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -1149,7 +1149,7 @@ mod tests {
#[test]
fn removal_records_integrity_unit_test() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -1163,7 +1163,7 @@ mod tests {
#[test]
fn removal_records_fail_on_bad_ms_acc() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -1180,7 +1180,7 @@ mod tests {
#[test]
fn removal_records_fail_on_bad_mast_path_inputs() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down Expand Up @@ -1220,7 +1220,7 @@ mod tests {
fn removal_record_fail_on_bad_absolute_indices_unit_test() {
let mut test_runner = TestRunner::deterministic();
let num_inputs = 2;
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand All @@ -1247,7 +1247,8 @@ mod tests {

#[proptest(cases = 4)]
fn removal_records_fail_on_bad_absolute_indices(
#[strategy(PrimitiveWitness::arbitrary_with((3, 2, 2)))] mut bad_pw: PrimitiveWitness,
#[strategy(PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2))]
mut bad_pw: PrimitiveWitness,
#[strategy(0..2usize)] mutated_input: usize,
#[strategy(0..NUM_TRIALS as usize)] mutated_bloom_filter_index: usize,
) {
Expand Down
4 changes: 1 addition & 3 deletions src/models/blockchain/transaction/validity/single_proof.rs
Original file line number Diff line number Diff line change
Expand Up @@ -684,7 +684,6 @@ impl ConsensusProgram for SingleProof {
#[cfg(test)]
mod test {
use assert2::let_assert;
use proptest::prelude::Arbitrary;
use proptest::prelude::Strategy;
use proptest::strategy::ValueTree;
use proptest::test_runner::TestRunner;
Expand All @@ -699,7 +698,6 @@ mod test {
use crate::models::blockchain::transaction::validity::tasm::single_proof::merge_branch::test::deterministic_merge_witness;
use crate::models::blockchain::transaction::validity::tasm::single_proof::update_branch::test::deterministic_update_witness_only_additions;
use crate::models::blockchain::type_scripts::time_lock::arbitrary_primitive_witness_with_expired_timelocks;
use crate::models::proof_abstractions::mast_hash::MastHash;
use crate::models::proof_abstractions::tasm::program::ConsensusError;
use crate::models::proof_abstractions::tasm::program::ConsensusProgram;
use crate::models::proof_abstractions::timestamp::Timestamp;
Expand Down Expand Up @@ -738,7 +736,7 @@ mod test {
#[tokio::test]
async fn can_verify_via_valid_proof_collection() {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -257,10 +257,13 @@ mod tests {
let mut rng: TestRng = TestRng::from_seed(RngAlgorithm::ChaCha, &seed);
let inputs_ptr: BFieldElement = bfe!(rng.gen_range(0..(1 << 30)));

let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
.new_tree(&mut TestRunner::new_with_rng(Default::default(), rng))
.unwrap()
.current();
let primitive_witness: PrimitiveWitness = {
let mut test_runner = TestRunner::new_with_rng(Default::default(), rng);
PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current()
};
self.correct_initial_state(inputs_ptr, primitive_witness)
}
}
Expand All @@ -278,10 +281,13 @@ mod tests {
for &field in TransactionKernelField::VARIANTS {
let snippet = AuthenticateTxkField(field);
let inputs_ptr: BFieldElement = random();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
.new_tree(&mut TestRunner::deterministic())
.unwrap()
.current();
let primitive_witness: PrimitiveWitness = {
let mut test_runner = TestRunner::deterministic();
PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current()
};
let mut bad_auth_path = snippet.correct_initial_state(inputs_ptr, primitive_witness);
bad_auth_path.nondeterminism.digests[0].0[0].increment();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ impl BasicSnippet for GenerateCollectLockScriptsClaim {
mod tests {
use std::collections::HashMap;

use proptest::prelude::Arbitrary;
use proptest::prelude::Strategy;
use proptest::test_runner::TestRunner;
use rand::Rng;
Expand Down Expand Up @@ -192,7 +191,7 @@ mod tests {
let mut rng = test_runner.new_rng();

let num_inputs = rng.gen_range(0usize..4);
let primitive_witness = PrimitiveWitness::arbitrary_with((num_inputs, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@ mod tests {
use std::collections::HashMap;

use itertools::Itertools;
use proptest::prelude::Arbitrary;
use proptest::prelude::Strategy;
use proptest::strategy::ValueTree;
use proptest::test_runner::TestRunner;
Expand Down Expand Up @@ -227,7 +226,7 @@ mod tests {

let num_inputs = 2;
let primitive_witness = if rng.gen_bool(0.5) {
PrimitiveWitness::arbitrary_with((num_inputs, 2, 2))
PrimitiveWitness::arbitrary_with_size_numbers(num_inputs, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ mod tests {
use std::collections::HashMap;

use itertools::Itertools;
use proptest::prelude::Arbitrary;
use proptest::prelude::Strategy;
use proptest::test_runner::TestRunner;
use rand::rngs::StdRng;
Expand Down Expand Up @@ -194,7 +193,7 @@ mod tests {
_bench_case: Option<BenchmarkCase>,
) -> FunctionInitialState {
let mut test_runner = TestRunner::deterministic();
let primitive_witness = PrimitiveWitness::arbitrary_with((2, 2, 2))
let primitive_witness = PrimitiveWitness::arbitrary_with_size_numbers(2, 2, 2)
.new_tree(&mut test_runner)
.unwrap()
.current();
Expand Down
Loading

0 comments on commit 77d04ac

Please sign in to comment.