diff --git a/crates/config/README.md b/crates/config/README.md index 105aaffc6e77..04fd53bb6ea7 100644 --- a/crates/config/README.md +++ b/crates/config/README.md @@ -195,7 +195,6 @@ call_override = false dictionary_weight = 80 include_storage = true include_push_bytes = true -shrink_sequence = true [fmt] line_length = 100 diff --git a/crates/config/src/invariant.rs b/crates/config/src/invariant.rs index 0442d467b77c..fa9e5489f79d 100644 --- a/crates/config/src/invariant.rs +++ b/crates/config/src/invariant.rs @@ -24,9 +24,6 @@ pub struct InvariantConfig { /// The fuzz dictionary configuration #[serde(flatten)] pub dictionary: FuzzDictionaryConfig, - /// Attempt to shrink the failure case to its smallest sequence of calls - /// TODO: remove this setting as it is now redundant with shrink_run_limit = 0 - pub shrink_sequence: bool, /// The maximum number of attempts to shrink the sequence pub shrink_run_limit: usize, /// The maximum number of rejects via `vm.assume` which can be encountered during a single @@ -44,7 +41,6 @@ impl Default for InvariantConfig { fail_on_revert: false, call_override: false, dictionary: FuzzDictionaryConfig { dictionary_weight: 80, ..Default::default() }, - shrink_sequence: true, shrink_run_limit: 2usize.pow(18_u32), max_assume_rejects: 65536, gas_report_samples: 256, @@ -75,7 +71,6 @@ impl InlineConfigParser for InvariantConfig { "depth" => conf_clone.depth = parse_config_u32(key, value)?, "fail-on-revert" => conf_clone.fail_on_revert = parse_config_bool(key, value)?, "call-override" => conf_clone.call_override = parse_config_bool(key, value)?, - "shrink-sequence" => conf_clone.shrink_sequence = parse_config_bool(key, value)?, _ => Err(InlineConfigParserError::InvalidConfigProperty(key.to_string()))?, } } diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 8b65bfa7813f..96cd23a63fdd 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -3714,7 +3714,6 @@ mod tests { depth = 15 fail_on_revert = false call_override = false - shrink_sequence = true "#, )?; diff --git a/crates/evm/evm/src/executors/invariant/error.rs b/crates/evm/evm/src/executors/invariant/error.rs index e797174a5353..6e8dc929b58c 100644 --- a/crates/evm/evm/src/executors/invariant/error.rs +++ b/crates/evm/evm/src/executors/invariant/error.rs @@ -63,8 +63,6 @@ pub struct FailedInvariantCaseData { pub func: Bytes, /// Inner fuzzing Sequence coming from overriding calls. pub inner_sequence: Vec>, - /// Shrink the failed test case to the smallest sequence. - pub shrink_sequence: bool, /// Shrink run limit pub shrink_run_limit: usize, /// Fail on revert, used to check sequence when shrinking. @@ -103,7 +101,6 @@ impl FailedInvariantCaseData { addr: invariant_contract.address, func: func.selector().to_vec().into(), inner_sequence: inner_sequence.to_vec(), - shrink_sequence: invariant_config.shrink_sequence, shrink_run_limit: invariant_config.shrink_run_limit, fail_on_revert: invariant_config.fail_on_revert, } diff --git a/crates/evm/evm/src/executors/invariant/mod.rs b/crates/evm/evm/src/executors/invariant/mod.rs index 2818018cbc7c..a15f98f8bd60 100644 --- a/crates/evm/evm/src/executors/invariant/mod.rs +++ b/crates/evm/evm/src/executors/invariant/mod.rs @@ -144,10 +144,6 @@ impl<'a> InvariantExecutor<'a> { return Err(eyre!("Invariant test function should have no inputs")) } - if !self.config.shrink_sequence { - error!(target: "forge::test", "shrink_sequence config is deprecated and will be removed, use shrink_run_limit = 0") - } - let (fuzz_state, targeted_contracts, strat) = self.prepare_fuzzing(&invariant_contract, fuzz_fixtures)?; diff --git a/crates/evm/evm/src/executors/invariant/replay.rs b/crates/evm/evm/src/executors/invariant/replay.rs index 941df781aacf..e555811745dc 100644 --- a/crates/evm/evm/src/executors/invariant/replay.rs +++ b/crates/evm/evm/src/executors/invariant/replay.rs @@ -100,12 +100,7 @@ pub fn replay_error( TestError::Abort(_) => Ok(None), TestError::Fail(_, ref calls) => { // Shrink sequence of failed calls. - let calls = if failed_case.shrink_sequence { - shrink_sequence(failed_case, calls, &executor)? - } else { - trace!(target: "forge::test", "Shrinking disabled."); - calls.clone() - }; + let calls = shrink_sequence(failed_case, calls, &executor)?; set_up_inner_replay(&mut executor, &failed_case.inner_sequence); // Replay calls to get the counterexample and to collect logs, traces and coverage. diff --git a/crates/evm/evm/src/executors/invariant/shrink.rs b/crates/evm/evm/src/executors/invariant/shrink.rs index bfa592136eaf..7b78ae028bf5 100644 --- a/crates/evm/evm/src/executors/invariant/shrink.rs +++ b/crates/evm/evm/src/executors/invariant/shrink.rs @@ -84,7 +84,7 @@ pub(crate) fn shrink_sequence( calls: &[BasicTxDetails], executor: &Executor, ) -> eyre::Result> { - trace!(target: "forge::test", "Shrinking."); + trace!(target: "forge::test", "Shrinking sequence of {} calls.", calls.len()); // Special case test: the invariant is *unsatisfiable* - it took 0 calls to // break the invariant -- consider emitting a warning. diff --git a/crates/forge/tests/it/test_helpers.rs b/crates/forge/tests/it/test_helpers.rs index cf3d5757dbef..be87b9ce9348 100644 --- a/crates/forge/tests/it/test_helpers.rs +++ b/crates/forge/tests/it/test_helpers.rs @@ -104,7 +104,6 @@ impl ForgeTestProfile { max_fuzz_dictionary_addresses: 10_000, max_fuzz_dictionary_values: 10_000, }, - shrink_sequence: true, shrink_run_limit: 2usize.pow(18u32), max_assume_rejects: 65536, gas_report_samples: 256, diff --git a/testdata/foundry.toml b/testdata/foundry.toml index 22df7b3e586a..1fd8c610f730 100644 --- a/testdata/foundry.toml +++ b/testdata/foundry.toml @@ -16,7 +16,6 @@ ffi = false force = false invariant_fail_on_revert = false invariant_call_override = false -invariant_shrink_sequence = true invariant_preserve_state = false gas_limit = 9223372036854775807 gas_price = 0