From 43b09b993d0a5a8178d70a0149a5301aed82bb8d Mon Sep 17 00:00:00 2001 From: Chandra Pratap Date: Thu, 11 Dec 2025 10:28:06 +0000 Subject: [PATCH] fuzz: Improve oracle for existing CCoinControl tests --- src/wallet/test/fuzz/coincontrol.cpp | 34 +++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/wallet/test/fuzz/coincontrol.cpp b/src/wallet/test/fuzz/coincontrol.cpp index 6774a21d01b..e46a469f9ea 100644 --- a/src/wallet/test/fuzz/coincontrol.cpp +++ b/src/wallet/test/fuzz/coincontrol.cpp @@ -57,26 +57,48 @@ FUZZ_TARGET(coincontrol, .init = initialize_coincontrol) }, [&] { (void)coin_control.Select(out_point); + assert(coin_control.IsSelected(out_point)); }, [&] { const CTxOut tx_out{ConsumeMoney(fuzzed_data_provider), ConsumeScript(fuzzed_data_provider)}; - (void)coin_control.Select(out_point).SetTxOut(tx_out); + auto& input = coin_control.Select(out_point); + const auto set_tx_out{fuzzed_data_provider.ConsumeBool()}; + if (set_tx_out) { + input.SetTxOut(tx_out); + } + auto has_tx_out{input.HasTxOut()}; + auto is_external_selected{coin_control.IsExternalSelected(out_point)}; + if (set_tx_out) { + assert(has_tx_out); + assert(input.GetTxOut() == tx_out); + assert(is_external_selected); + } else if (!has_tx_out) { + assert(!is_external_selected); + } }, [&] { - (void)coin_control.UnSelect(out_point); + coin_control.UnSelect(out_point); + assert(!coin_control.IsSelected(out_point)); }, [&] { - (void)coin_control.UnSelectAll(); + coin_control.UnSelectAll(); + assert(!coin_control.HasSelected()); }, [&] { - (void)coin_control.ListSelected(); + const std::vector selected = coin_control.ListSelected(); + for (const auto& out : selected) { + assert(coin_control.IsSelected(out)); + } }, [&] { int64_t weight{fuzzed_data_provider.ConsumeIntegral()}; - (void)coin_control.SetInputWeight(out_point, weight); + coin_control.SetInputWeight(out_point, weight); + assert(coin_control.GetInputWeight(out_point) == weight); }, [&] { - (void)coin_control.GetInputWeight(out_point); + const bool is_selected = coin_control.IsSelected(out_point); + assert(!coin_control.GetInputWeight(out_point) || is_selected); + assert(!coin_control.GetSequence(out_point) || is_selected); }); } }