From 501c9ab89e6cee63b4ba8e493393bfc1c544a225 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Mon, 3 Mar 2025 07:47:33 +1100 Subject: [PATCH] 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. --- units/src/amount/tests.rs | 46 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/units/src/amount/tests.rs b/units/src/amount/tests.rs index fc2dd2f59..3ab69af1d 100644 --- a/units/src/amount/tests.rs +++ b/units/src/amount/tests.rs @@ -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);