From 3e9b95c6540387dc13498a562369c922e74fd755 Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Wed, 14 Feb 2024 01:53:47 +0100 Subject: [PATCH] fix: mean overflow --- crates/common/src/calc.rs | 8 +++++++- crates/forge/src/multi_runner.rs | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/crates/common/src/calc.rs b/crates/common/src/calc.rs index 6cd9f1fd50bb..bde75635ce7f 100644 --- a/crates/common/src/calc.rs +++ b/crates/common/src/calc.rs @@ -9,7 +9,7 @@ pub fn mean(values: &[u64]) -> u64 { return 0; } - values.iter().sum::() / (values.len() as u64) + (values.iter().map(|x| *x as u128).sum::() / values.len() as u128) as u64 } /// Returns the median of a _sorted_ slice. @@ -79,6 +79,12 @@ mod tests { assert_eq!(m, 3); } + #[test] + fn calc_mean_overflow() { + let m = mean(&[0, 1, 2, u32::MAX as u64, 3, u16::MAX as u64, u64::MAX, 6]); + assert_eq!(m, 2305843009750573057); + } + #[test] fn calc_median_empty() { let m = median_sorted(&[]); diff --git a/crates/forge/src/multi_runner.rs b/crates/forge/src/multi_runner.rs index 0c876a640f29..5d7f3c3e3206 100644 --- a/crates/forge/src/multi_runner.rs +++ b/crates/forge/src/multi_runner.rs @@ -311,9 +311,9 @@ impl MultiContractRunnerBuilder { deployable_contracts.insert(id.clone(), (abi.clone(), bytecode, libs_to_deploy)); } - linked_contract.get_deployed_bytecode_bytes().map(|b| b.into_owned()).and_then( - |bytes| known_contracts.insert(id.clone(), (abi.clone(), bytes.to_vec())), - ); + if let Some(bytes) = linked_contract.get_deployed_bytecode_bytes() { + known_contracts.insert(id.clone(), (abi.clone(), bytes.to_vec())); + } } let errors = known_contracts.flatten_errors();