Skip to content

Commit e3847f7

Browse files
committed
Merge bitcoin#29037: Add multiplication operator to CFeeRate
1757452 test: Add tests for CFeeRate multiplication operator (Kashif Smith) 1553c80 Add multiplication operator to CFeeRate (Murch) Pull request description: Allows us to use `coin_selection_params.m_long_term_feerate * 3` or `3 * coin_selection_params.m_long_term_feerate` instead of `CFeeRate{coin_selection_params.m_long_term_feerate.GetFee(3000)}` inspired by bitcoin#27877 (comment) ACKs for top commit: kevkevinpal: reACK [1757452](bitcoin@1757452) achow101: ACK 1757452 ajtowns: ACK 1757452 ; lgtm ismaelsadeeq: ACK 1757452 Tree-SHA512: a86faac1efd1b7688630cd811246533d184d56b62064a7fd9007de95dbf81fa668aa2252253d102fba67517b6a4ca2dc367c5388b8ab936215734d7d370740cf
2 parents dd39194 + 1757452 commit e3847f7

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/policy/feerate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class CFeeRate
7171
friend bool operator!=(const CFeeRate& a, const CFeeRate& b) { return a.nSatoshisPerK != b.nSatoshisPerK; }
7272
CFeeRate& operator+=(const CFeeRate& a) { nSatoshisPerK += a.nSatoshisPerK; return *this; }
7373
std::string ToString(const FeeEstimateMode& fee_estimate_mode = FeeEstimateMode::BTC_KVB) const;
74+
friend CFeeRate operator*(const CFeeRate& f, int a) { return CFeeRate(a * f.nSatoshisPerK); }
75+
friend CFeeRate operator*(int a, const CFeeRate& f) { return CFeeRate(a * f.nSatoshisPerK); }
7476

7577
SERIALIZE_METHODS(CFeeRate, obj) { READWRITE(obj.nSatoshisPerK); }
7678
};

src/test/amount_tests.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,32 @@ BOOST_AUTO_TEST_CASE(GetFeeTest)
8585
BOOST_CHECK(CFeeRate(CAmount(27), 789) == CFeeRate(34));
8686
// Maximum size in bytes, should not crash
8787
CFeeRate(MAX_MONEY, std::numeric_limits<uint32_t>::max()).GetFeePerK();
88+
89+
// check multiplication operator
90+
// check multiplying by zero
91+
feeRate = CFeeRate(1000);
92+
BOOST_CHECK(0 * feeRate == CFeeRate(0));
93+
BOOST_CHECK(feeRate * 0 == CFeeRate(0));
94+
// check multiplying by a positive integer
95+
BOOST_CHECK(3 * feeRate == CFeeRate(3000));
96+
BOOST_CHECK(feeRate * 3 == CFeeRate(3000));
97+
// check multiplying by a negative integer
98+
BOOST_CHECK(-3 * feeRate == CFeeRate(-3000));
99+
BOOST_CHECK(feeRate * -3 == CFeeRate(-3000));
100+
// check commutativity
101+
BOOST_CHECK(2 * feeRate == feeRate * 2);
102+
// check with large numbers
103+
int largeNumber = 1000000;
104+
BOOST_CHECK(largeNumber * feeRate == feeRate * largeNumber);
105+
// check boundary values
106+
int maxInt = std::numeric_limits<int>::max();
107+
feeRate = CFeeRate(maxInt);
108+
BOOST_CHECK(feeRate * 2 == CFeeRate(static_cast<int64_t>(maxInt) * 2));
109+
BOOST_CHECK(2 * feeRate == CFeeRate(static_cast<int64_t>(maxInt) * 2));
110+
// check with zero fee rate
111+
feeRate = CFeeRate(0);
112+
BOOST_CHECK(feeRate * 5 == CFeeRate(0));
113+
BOOST_CHECK(5 * feeRate == CFeeRate(0));
88114
}
89115

90116
BOOST_AUTO_TEST_CASE(BinaryOperatorTest)

0 commit comments

Comments
 (0)