Test amount ops that involve an integer

From the amount types `Div`, `Mul`, and `Rem` can have an integer on one
side. Test them - includes commented out test for one missing combo.
This commit is contained in:
Tobin C. Harding 2025-03-03 07:47:33 +11:00
parent 851080d3b1
commit 501c9ab89e
No known key found for this signature in database
GPG Key ID: 40BF9E4C269D6607
1 changed files with 45 additions and 1 deletions

View File

@ -1207,7 +1207,10 @@ fn signed_addition() {
assert_eq!(ssat(-307) + ssat(461), NumOpResult::from(ssat(154)));
assert_eq!(ssat(307) + ssat(-461), NumOpResult::from(ssat(-154)));
assert_eq!(ssat(-307) + ssat(-461), NumOpResult::from(ssat(-768)));
assert_eq!(SignedAmount::MAX_MONEY + -SignedAmount::MAX_MONEY, NumOpResult::from(SignedAmount::ZERO));
assert_eq!(
SignedAmount::MAX_MONEY + -SignedAmount::MAX_MONEY,
NumOpResult::from(SignedAmount::ZERO)
);
}
#[test]
@ -1236,6 +1239,47 @@ fn signed_subtraction() {
assert_eq!(ssat(-307) - ssat(-461), NumOpResult::from(ssat(154)));
}
#[test]
fn op_int_combos() {
let sat = Amount::from_sat;
let ssat = SignedAmount::from_sat;
let res = |sat| NumOpResult::from(Amount::from_sat(sat));
let sres = |ssat| NumOpResult::from(SignedAmount::from_sat(ssat));
assert_eq!(sat(23) * 31, res(713));
assert_eq!(ssat(23) * 31, sres(713));
assert_eq!(res(23) * 31, res(713));
assert_eq!(sres(23) * 31, sres(713));
// assert_eq!(31 * sat(23), res(713));
// assert_eq!(31 * ssat(23), sres(713));
// No remainder.
assert_eq!(sat(1897) / 7, res(271));
assert_eq!(ssat(1897) / 7, sres(271));
assert_eq!(res(1897) / 7, res(271));
assert_eq!(sres(1897) / 7, sres(271));
// Truncation works as expected.
assert_eq!(sat(1901) / 7, res(271));
assert_eq!(ssat(1901) / 7, sres(271));
assert_eq!(res(1901) / 7, res(271));
assert_eq!(sres(1901) / 7, sres(271));
// No remainder.
assert_eq!(sat(1897) % 7, res(0));
assert_eq!(ssat(1897) % 7, sres(0));
assert_eq!(res(1897) % 7, res(0));
assert_eq!(sres(1897) % 7, sres(0));
// Remainder works as expected.
assert_eq!(sat(1901) % 7, res(4));
assert_eq!(ssat(1901) % 7, sres(4));
assert_eq!(res(1901) % 7, res(4));
assert_eq!(sres(1901) % 7, sres(4));
}
#[test]
fn check_const() {
assert_eq!(SignedAmount::ONE_BTC.to_sat(), 100_000_000);