fuzz: Improve oracle for existing CCoinControl tests

This commit is contained in:
Chandra Pratap
2025-12-11 10:28:06 +00:00
parent 04480c2558
commit 43b09b993d

View File

@@ -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<COutPoint> selected = coin_control.ListSelected();
for (const auto& out : selected) {
assert(coin_control.IsSelected(out));
}
},
[&] {
int64_t weight{fuzzed_data_provider.ConsumeIntegral<int64_t>()};
(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);
});
}
}