Merge rust-bitcoin/rust-bitcoin#4542: Fix FeeRate::checked_add/sub
395252c6d9
Fix FeeRate::checked_add/sub (Tobin C. Harding)
Pull request description:
Currently the `checked_add` and `checked_sub` functions use a `u64` for the right hand side. This leaks the inner unit because the RHS value is implicitly in the same unit.
Make the functions have `FeeRate` on the RHS.
ACKs for top commit:
apoelstra:
ACK 395252c6d95fdd581ce5e8ad5d7978515aafea23; successfully ran local tests; will one-ACK merge as this is units-only
Tree-SHA512: 1f0893f75c47f720ac741ace0274171ed24efcb6d2724d0fed941899d43b213e165b97aa050d6e40eea78c527af45d090a81b9d6cbd95835ef7105585786fca6
This commit is contained in:
commit
7dcff506dd
|
@ -110,9 +110,9 @@ impl FeeRate {
|
|||
///
|
||||
/// Computes `self + rhs` returning [`None`] if overflow occurred.
|
||||
#[must_use]
|
||||
pub const fn checked_add(self, rhs: u64) -> Option<Self> {
|
||||
pub const fn checked_add(self, rhs: FeeRate) -> Option<Self> {
|
||||
// No `map()` in const context.
|
||||
match self.to_sat_per_kwu().checked_add(rhs) {
|
||||
match self.to_sat_per_kwu().checked_add(rhs.to_sat_per_kwu()) {
|
||||
Some(res) => Some(Self::from_sat_per_kwu(res)),
|
||||
None => None,
|
||||
}
|
||||
|
@ -122,9 +122,9 @@ impl FeeRate {
|
|||
///
|
||||
/// Computes `self - rhs` returning [`None`] if overflow occurred.
|
||||
#[must_use]
|
||||
pub const fn checked_sub(self, rhs: u64) -> Option<Self> {
|
||||
pub const fn checked_sub(self, rhs: FeeRate) -> Option<Self> {
|
||||
// No `map()` in const context.
|
||||
match self.to_sat_per_kwu().checked_sub(rhs) {
|
||||
match self.to_sat_per_kwu().checked_sub(rhs.to_sat_per_kwu()) {
|
||||
Some(res) => Some(Self::from_sat_per_kwu(res)),
|
||||
None => None,
|
||||
}
|
||||
|
@ -250,19 +250,24 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn checked_add() {
|
||||
let f = FeeRate::from_sat_per_kwu(1).checked_add(2).unwrap();
|
||||
assert_eq!(FeeRate::from_sat_per_kwu(3), f);
|
||||
let one = FeeRate::from_sat_per_kwu(1);
|
||||
let two = FeeRate::from_sat_per_kwu(2);
|
||||
let three = FeeRate::from_sat_per_kwu(3);
|
||||
|
||||
let f = FeeRate::from_sat_per_kwu(u64::MAX).checked_add(1);
|
||||
assert_eq!(one.checked_add(two).unwrap(), three);
|
||||
|
||||
let f = FeeRate::from_sat_per_kwu(u64::MAX).checked_add(one);
|
||||
assert!(f.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn checked_sub() {
|
||||
let f = FeeRate::from_sat_per_kwu(2).checked_sub(1).unwrap();
|
||||
assert_eq!(FeeRate::from_sat_per_kwu(1), f);
|
||||
let one = FeeRate::from_sat_per_kwu(1);
|
||||
let two = FeeRate::from_sat_per_kwu(2);
|
||||
let three = FeeRate::from_sat_per_kwu(3);
|
||||
assert_eq!(three.checked_sub(two).unwrap(), one);
|
||||
|
||||
let f = FeeRate::ZERO.checked_sub(1);
|
||||
let f = FeeRate::ZERO.checked_sub(one);
|
||||
assert!(f.is_none());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue