@@ -109,9 +109,18 @@ static void TestBnBSuccess(std::string test_title, std::vector<OutputGroup>& utx
109
109
BOOST_CHECK_MESSAGE (result->GetSelectedValue () == expected_amount, strprintf (" Selected amount mismatch in BnB-Success: %s. Expected %d, but got %d" , test_title, expected_amount, result->GetSelectedValue ()));
110
110
}
111
111
112
+ static void TestBnBFail (std::string test_title, std::vector<OutputGroup>& utxo_pool, const CAmount& selection_target)
113
+ {
114
+ BOOST_CHECK_MESSAGE (!SelectCoinsBnB (utxo_pool, selection_target, /* cost_of_change=*/ default_cs_params.m_cost_of_change , /* max_selection_weight=*/ MAX_STANDARD_TX_WEIGHT), " BnB-Fail: " + test_title);
115
+ }
116
+
112
117
BOOST_AUTO_TEST_CASE (bnb_test)
113
118
{
114
119
std::vector<OutputGroup> utxo_pool;
120
+
121
+ // Fail for empty UTXO pool
122
+ TestBnBFail (" Empty UTXO pool" , utxo_pool, /* selection_target=*/ 1 * CENT);
123
+
115
124
AddCoins (utxo_pool, {1 * CENT, 3 * CENT, 5 * CENT});
116
125
117
126
// Simple success cases
@@ -124,6 +133,14 @@ BOOST_AUTO_TEST_CASE(bnb_test)
124
133
// BnB finds changeless solution while overshooting by up to cost_of_change
125
134
TestBnBSuccess (" Select upper bound" , utxo_pool, /* selection_target=*/ 4 * CENT - default_cs_params.m_cost_of_change , /* expected_input_amounts=*/ {1 * CENT, 3 * CENT});
126
135
136
+ // BnB fails to find changeless solution when overshooting by cost_of_change + 1 sat
137
+ TestBnBFail (" Overshoot upper bound" , utxo_pool, /* selection_target=*/ 4 * CENT - default_cs_params.m_cost_of_change - 1 );
138
+
139
+ // Simple cases without BnB solution
140
+ TestBnBFail (" Smallest combination too big" , utxo_pool, /* selection_target=*/ 0.5 * CENT);
141
+ TestBnBFail (" No UTXO combination in target window" , utxo_pool, /* selection_target=*/ 7 * CENT);
142
+ TestBnBFail (" Select more than available" , utxo_pool, /* selection_target=*/ 10 * CENT);
143
+
127
144
// Test skipping of equivalent input sets
128
145
std::vector<OutputGroup> clone_pool;
129
146
AddCoins (clone_pool, {2 * CENT, 7 * CENT, 7 * CENT});
0 commit comments