From 1553c8078698df1058b62e8fdadaf74160977b30 Mon Sep 17 00:00:00 2001 From: Murch Date: Fri, 8 Dec 2023 13:53:46 -0500 Subject: [PATCH 1/2] Add multiplication operator to CFeeRate --- src/policy/feerate.h | 2 ++ src/test/amount_tests.cpp | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/policy/feerate.h b/src/policy/feerate.h index 41f4a4d06bd..2e501729148 100644 --- a/src/policy/feerate.h +++ b/src/policy/feerate.h @@ -71,6 +71,8 @@ public: friend bool operator!=(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK != b.nSatoshisPerK; } CFeeRate& operator+=(const CFeeRate& a) { nSatoshisPerK += a.nSatoshisPerK; return *this; } std::string ToString(const FeeEstimateMode& fee_estimate_mode = FeeEstimateMode::BTC_KVB) const; + friend CFeeRate operator*(const CFeeRate& f, int a) { return CFeeRate(a * f.nSatoshisPerK); } + friend CFeeRate operator*(int a, const CFeeRate& f) { return CFeeRate(a * f.nSatoshisPerK); } SERIALIZE_METHODS(CFeeRate, obj) { READWRITE(obj.nSatoshisPerK); } }; diff --git a/src/test/amount_tests.cpp b/src/test/amount_tests.cpp index 3815a5bba66..1a9c63a8765 100644 --- a/src/test/amount_tests.cpp +++ b/src/test/amount_tests.cpp @@ -85,6 +85,12 @@ BOOST_AUTO_TEST_CASE(GetFeeTest) BOOST_CHECK(CFeeRate(CAmount(27), 789) == CFeeRate(34)); // Maximum size in bytes, should not crash CFeeRate(MAX_MONEY, std::numeric_limits::max()).GetFeePerK(); + + // check multiplication operator + feeRate = CFeeRate(1000); + BOOST_CHECK(0 * feeRate == CFeeRate(0)); + BOOST_CHECK(3 * feeRate == CFeeRate(3000)); + BOOST_CHECK(-3 * feeRate == CFeeRate(-3000)); } BOOST_AUTO_TEST_CASE(BinaryOperatorTest) From 1757452cc55a6dacc62e4258043ee4d711fd281a Mon Sep 17 00:00:00 2001 From: Kashif Smith <1489460+kashifs@users.noreply.github.com> Date: Mon, 11 Dec 2023 16:27:58 -0500 Subject: [PATCH 2/2] test: Add tests for CFeeRate multiplication operator --- src/test/amount_tests.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/amount_tests.cpp b/src/test/amount_tests.cpp index 1a9c63a8765..e5ab1cfb902 100644 --- a/src/test/amount_tests.cpp +++ b/src/test/amount_tests.cpp @@ -87,10 +87,30 @@ BOOST_AUTO_TEST_CASE(GetFeeTest) CFeeRate(MAX_MONEY, std::numeric_limits::max()).GetFeePerK(); // check multiplication operator + // check multiplying by zero feeRate = CFeeRate(1000); BOOST_CHECK(0 * feeRate == CFeeRate(0)); + BOOST_CHECK(feeRate * 0 == CFeeRate(0)); + // check multiplying by a positive integer BOOST_CHECK(3 * feeRate == CFeeRate(3000)); + BOOST_CHECK(feeRate * 3 == CFeeRate(3000)); + // check multiplying by a negative integer BOOST_CHECK(-3 * feeRate == CFeeRate(-3000)); + BOOST_CHECK(feeRate * -3 == CFeeRate(-3000)); + // check commutativity + BOOST_CHECK(2 * feeRate == feeRate * 2); + // check with large numbers + int largeNumber = 1000000; + BOOST_CHECK(largeNumber * feeRate == feeRate * largeNumber); + // check boundary values + int maxInt = std::numeric_limits::max(); + feeRate = CFeeRate(maxInt); + BOOST_CHECK(feeRate * 2 == CFeeRate(static_cast(maxInt) * 2)); + BOOST_CHECK(2 * feeRate == CFeeRate(static_cast(maxInt) * 2)); + // check with zero fee rate + feeRate = CFeeRate(0); + BOOST_CHECK(feeRate * 5 == CFeeRate(0)); + BOOST_CHECK(5 * feeRate == CFeeRate(0)); } BOOST_AUTO_TEST_CASE(BinaryOperatorTest)