Skip to content
Bitcoin Roots

v31.1-roots.1 · Commit 3: [PATCH 03/17] feat(policy): preserve cluster accounting and repair dynamic dust

src/test/amount_tests.cpp

Before: src/test/amount_tests.cpp · After: src/test/amount_tests.cpp

File metadata
index e1630b41948dc47849ea670d8c8e90613afddf37..c65c67ed10df733780441e2a90343e64ad4fd8b4 100644

Download original patch · Release notes

Diff rows 1–46 of 46. Line numbers refer to the original before/after files.

+ Added− RemovedUnmarked lines are context.

Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.

src/test/amount_tests.cpp CHANGED
@@ -4,6 +4,7 @@
4
 
5
  #include <consensus/amount.h>
6
  #include <policy/feerate.h>
 
7
 
8
  #include <limits>
9
 
@@ -116,6 +117,20 @@ BOOST_AUTO_TEST_CASE(GetFeeTest)
116
  BOOST_CHECK(5 * feeRate == CFeeRate(0));
117
  }
118
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  BOOST_AUTO_TEST_CASE(BinaryOperatorTest)
120
  {
121
  CFeeRate a, b;
@@ -142,4 +157,19 @@ BOOST_AUTO_TEST_CASE(ToStringTest)
142
  BOOST_CHECK_EQUAL(feeRate.ToString(FeeRateFormat::SAT_VB), "0.001 sat/vB");
143
  }
144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  BOOST_AUTO_TEST_SUITE_END()
 
4
 
5
  #include <consensus/amount.h>
6
  #include <policy/feerate.h>
7
+ #include <policy/policy.h>
8
 
9
  #include <limits>
10
 
 
117
  BOOST_CHECK(5 * feeRate == CFeeRate(0));
118
  }
119
 
120
+ BOOST_AUTO_TEST_CASE(FeeRateSaturatedEvaluation)
121
+ {
122
+ constexpr CAmount maximum{std::numeric_limits<CAmount>::max()};
123
+ constexpr CAmount minimum{std::numeric_limits<CAmount>::min()};
124
+ BOOST_CHECK_EQUAL(CFeeRate(maximum, 1).GetFee(2), maximum);
125
+ BOOST_CHECK_EQUAL(CFeeRate(minimum, 1).GetFee(2), minimum);
126
+ BOOST_CHECK_EQUAL(CFeeRate(maximum, 1).GetFee(1), maximum);
127
+ BOOST_CHECK_EQUAL(CFeeRate(minimum, 1).GetFee(1), minimum);
128
+ BOOST_CHECK_EQUAL(CFeeRate(maximum).GetFee(0), 0);
129
+ const CTxOut large_output{0, CScript{} << std::vector<unsigned char>(1000, 1) << OP_DROP << OP_TRUE};
130
+ BOOST_CHECK_EQUAL(GetDustThreshold(large_output, CFeeRate{maximum}), maximum);
131
+ BOOST_CHECK_EQUAL(CFeeRate(maximum).GetFee(999), maximum / 1000 * 999 + (maximum % 1000 * 999 + 999) / 1000);
132
+ }
133
+
134
  BOOST_AUTO_TEST_CASE(BinaryOperatorTest)
135
  {
136
  CFeeRate a, b;
 
157
  BOOST_CHECK_EQUAL(feeRate.ToString(FeeRateFormat::SAT_VB), "0.001 sat/vB");
158
  }
159
 
160
+ BOOST_AUTO_TEST_CASE(DynamicDustScaling)
161
+ {
162
+ constexpr CAmount maximum{std::numeric_limits<CAmount>::max()};
163
+ BOOST_CHECK_EQUAL(CFeeRate(maximum, 1).GetFeePerK(), maximum);
164
+ BOOST_CHECK_EQUAL(CFeeRate(std::numeric_limits<CAmount>::min(), 1).GetFeePerK(), std::numeric_limits<CAmount>::min());
165
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{1234}, 1000).GetFeePerK(), 1234);
166
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{1234}, 3000).GetFeePerK(), 3702);
167
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{1234}, 1).GetFeePerK(), 1);
168
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{maximum}, 1000).GetFeePerK(), maximum);
169
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{maximum}, INT32_MAX).GetFeePerK(), maximum);
170
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{-1}, INT32_MAX).GetFeePerK(), 0);
171
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{0}, INT32_MAX).GetFeePerK(), 0);
172
+ BOOST_CHECK_EQUAL(ScaleDustFee(CFeeRate{maximum / 3000 * 1000}, 3000).GetFeePerK(), maximum / 3000 * 3000);
173
+ }
174
+
175
  BOOST_AUTO_TEST_SUITE_END()