From 851080d3b19eecea147224f8a36f9788d3e7d328 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Mon, 3 Mar 2025 07:26:16 +1100 Subject: [PATCH] Add more add/sub tests Add units tests for various values including negative values. --- units/src/amount/tests.rs | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/units/src/amount/tests.rs b/units/src/amount/tests.rs index f4b101023..fc2dd2f59 100644 --- a/units/src/amount/tests.rs +++ b/units/src/amount/tests.rs @@ -1181,6 +1181,61 @@ fn add_sub_combos() { } } +#[test] +fn unsigned_addition() { + let sat = Amount::from_sat; + + assert_eq!(sat(0) + sat(0), NumOpResult::from(sat(0))); + assert_eq!(sat(0) + sat(307), NumOpResult::from(sat(307))); + assert_eq!(sat(307) + sat(0), NumOpResult::from(sat(307))); + assert_eq!(sat(307) + sat(461), NumOpResult::from(sat(768))); + assert_eq!(sat(0) + Amount::MAX_MONEY, NumOpResult::from(Amount::MAX_MONEY)); +} + +#[test] +fn signed_addition() { + let ssat = SignedAmount::from_sat; + + assert_eq!(ssat(0) + ssat(0), NumOpResult::from(ssat(0))); + assert_eq!(ssat(0) + ssat(307), NumOpResult::from(ssat(307))); + assert_eq!(ssat(307) + ssat(0), NumOpResult::from(ssat(307))); + assert_eq!(ssat(307) + ssat(461), NumOpResult::from(ssat(768))); + assert_eq!(ssat(0) + SignedAmount::MAX_MONEY, NumOpResult::from(SignedAmount::MAX_MONEY)); + + assert_eq!(ssat(0) + ssat(-307), NumOpResult::from(ssat(-307))); + assert_eq!(ssat(-307) + ssat(0), NumOpResult::from(ssat(-307))); + 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)); +} + +#[test] +fn unsigned_subtraction() { + let sat = Amount::from_sat; + + assert_eq!(sat(0) - sat(0), NumOpResult::from(sat(0))); + assert_eq!(sat(307) - sat(0), NumOpResult::from(sat(307))); + assert_eq!(sat(461) - sat(307), NumOpResult::from(sat(154))); +} + +#[test] +fn signed_subtraction() { + let ssat = SignedAmount::from_sat; + + assert_eq!(ssat(0) - ssat(0), NumOpResult::from(ssat(0))); + assert_eq!(ssat(0) - ssat(307), NumOpResult::from(ssat(-307))); + assert_eq!(ssat(307) - ssat(0), NumOpResult::from(ssat(307))); + assert_eq!(ssat(307) - ssat(461), NumOpResult::from(ssat(-154))); + assert_eq!(ssat(0) - SignedAmount::MAX_MONEY, NumOpResult::from(-SignedAmount::MAX_MONEY)); + + assert_eq!(ssat(0) - ssat(-307), NumOpResult::from(ssat(307))); + assert_eq!(ssat(-307) - ssat(0), NumOpResult::from(ssat(-307))); + assert_eq!(ssat(-307) - ssat(461), NumOpResult::from(ssat(-768))); + assert_eq!(ssat(307) - ssat(-461), NumOpResult::from(ssat(768))); + assert_eq!(ssat(-307) - ssat(-461), NumOpResult::from(ssat(154))); +} + #[test] fn check_const() { assert_eq!(SignedAmount::ONE_BTC.to_sat(), 100_000_000);