From 58914ab459c46c518c47c5082aec25ac0d03ab11 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Mon, 10 Feb 2025 13:57:39 -0500 Subject: [PATCH] fuzz: assert min diff between FeeFrac and CFeeRate Co-Authored-By: Greg Sanders --- src/test/fuzz/feefrac.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/fuzz/feefrac.cpp b/src/test/fuzz/feefrac.cpp index 4c0f0555028..afa04b00ae1 100644 --- a/src/test/fuzz/feefrac.cpp +++ b/src/test/fuzz/feefrac.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include +#include #include #include #include @@ -217,5 +218,16 @@ FUZZ_TARGET(feefrac_mul_div) FeeFrac{mul64, div}.EvaluateFeeDown(mul32) : FeeFrac{mul64, div}.EvaluateFeeUp(mul32); assert(res == res_fee); + + // Compare approximately with CFeeRate. + if (mul64 <= std::numeric_limits::max() / 1000 && + mul64 >= std::numeric_limits::min() / 1000 && + quot_abs <= arith_uint256{std::numeric_limits::max() / 1000}) { + CFeeRate feerate(mul64, (uint32_t)div); + CAmount feerate_fee{feerate.GetFee(mul32)}; + auto allowed_gap = static_cast(mul32 / 1000 + 3 + round_down); + assert(feerate_fee - res_fee >= -allowed_gap); + assert(feerate_fee - res_fee <= allowed_gap); + } } }