diff --git a/packages/std/src/math/uint128.rs b/packages/std/src/math/uint128.rs index 6d9899ab06..63c21b508b 100644 --- a/packages/std/src/math/uint128.rs +++ b/packages/std/src/math/uint128.rs @@ -232,7 +232,7 @@ impl Uint128 { if denominator == 0 { panic!("Denominator must not be zero"); } - // TODO: minimize rounding that takes place (using gcd algorithm) + // TODO: avoid overflow in multiplication (https://github.com/CosmWasm/cosmwasm/issues/920) let val = self.u128() * numerator / denominator; Uint128::from(val) } @@ -414,6 +414,8 @@ mod tests { assert_eq!(base.multiply_ratio(1u128, 1u128), Uint128(500)); assert_eq!(base.multiply_ratio(3u128, 3u128), Uint128(500)); assert_eq!(base.multiply_ratio(654321u128, 654321u128), Uint128(500)); + // Reactivate after https://github.com/CosmWasm/cosmwasm/issues/920 + // assert_eq!(base.multiply_ratio(u128::MAX, u128::MAX), Uint128(500)); // factor 3/2 assert_eq!(base.multiply_ratio(3u128, 2u128), Uint128(750)); diff --git a/packages/std/src/math/uint64.rs b/packages/std/src/math/uint64.rs index 4d8db1065b..4136b376ae 100644 --- a/packages/std/src/math/uint64.rs +++ b/packages/std/src/math/uint64.rs @@ -221,7 +221,7 @@ impl Uint64 { if denominator == 0 { panic!("Denominator must not be zero"); } - // TODO: minimize rounding that takes place (using gcd algorithm) + // TODO: avoid overflow in multiplication (https://github.com/CosmWasm/cosmwasm/issues/920) let val = self.u64() * numerator / denominator; Uint64::from(val) } @@ -400,6 +400,8 @@ mod tests { assert_eq!(base.multiply_ratio(1u64, 1u64), Uint64(500)); assert_eq!(base.multiply_ratio(3u64, 3u64), Uint64(500)); assert_eq!(base.multiply_ratio(654321u64, 654321u64), Uint64(500)); + // Reactivate after https://github.com/CosmWasm/cosmwasm/issues/920 + // assert_eq!(base.multiply_ratio(u64::MAX, u64::MAX), Uint64(500)); // factor 3/2 assert_eq!(base.multiply_ratio(3u64, 2u64), Uint64(750));