Skip to content

Commit 87bc53f

Browse files
authored
feat: support max literal (#4678)
1 parent 6f701fd commit 87bc53f

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

config/src/fuzz.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ pub struct FuzzConfig {
3030
/// Once the fuzzer exceeds this limit, it will start evicting random entries
3131
///
3232
/// This limit is put in place to prevent memory blowup.
33+
#[serde(deserialize_with = "crate::deserialize_usize_or_max")]
3334
pub max_fuzz_dictionary_addresses: usize,
3435
/// How many values to record at most.
3536
/// Once the fuzzer exceeds this limit, it will start evicting random entries
37+
#[serde(deserialize_with = "crate::deserialize_usize_or_max")]
3638
pub max_fuzz_dictionary_values: usize,
3739
}
3840

config/src/utils.rs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::Config;
44
use ethers_core::types::{serde_helpers::Numeric, U256};
55
use ethers_solc::remappings::{Remapping, RemappingError};
66
use figment::value::Value;
7-
use serde::{Deserialize, Deserializer};
7+
use serde::{de::Error, Deserialize, Deserializer};
88
use std::{
99
path::{Path, PathBuf},
1010
str::FromStr,
@@ -182,3 +182,30 @@ where
182182
Err(serde::de::Error::custom("percent must be lte 100"))
183183
}
184184
}
185+
186+
/// Deserialize an usize or
187+
pub(crate) fn deserialize_usize_or_max<'de, D>(deserializer: D) -> Result<usize, D::Error>
188+
where
189+
D: Deserializer<'de>,
190+
{
191+
#[derive(Deserialize)]
192+
#[serde(untagged)]
193+
enum Val {
194+
Number(usize),
195+
Text(String),
196+
}
197+
198+
let num = match Val::deserialize(deserializer)? {
199+
Val::Number(num) => num,
200+
Val::Text(s) => {
201+
match s.as_str() {
202+
"max" | "MAX" | "Max" => {
203+
// toml limitation
204+
i64::MAX as usize
205+
}
206+
s => s.parse::<usize>().map_err(D::Error::custom).unwrap(),
207+
}
208+
}
209+
};
210+
Ok(num)
211+
}

forge/src/runner.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ impl<'a> ContractRunner<'a> {
287287
*should_fail,
288288
test_options.fuzzer(),
289289
setup.clone(),
290-
test_options.fuzz.clone(),
290+
test_options.fuzz,
291291
)
292292
} else {
293293
self.clone().run_test(func, *should_fail, setup.clone())

0 commit comments

Comments
 (0)