@@ -109,9 +109,18 @@ static void TestBnBSuccess(std::string test_title, std::vector<OutputGroup>& utx
109109 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 ()));
110110}
111111
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+
112117BOOST_AUTO_TEST_CASE (bnb_test)
113118{
114119 std::vector<OutputGroup> utxo_pool;
120+
121+ // Fail for empty UTXO pool
122+ TestBnBFail (" Empty UTXO pool" , utxo_pool, /* selection_target=*/ 1 * CENT);
123+
115124 AddCoins (utxo_pool, {1 * CENT, 3 * CENT, 5 * CENT});
116125
117126 // Simple success cases
@@ -124,6 +133,14 @@ BOOST_AUTO_TEST_CASE(bnb_test)
124133 // BnB finds changeless solution while overshooting by up to cost_of_change
125134 TestBnBSuccess (" Select upper bound" , utxo_pool, /* selection_target=*/ 4 * CENT - default_cs_params.m_cost_of_change , /* expected_input_amounts=*/ {1 * CENT, 3 * CENT});
126135
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+
127144 // Test skipping of equivalent input sets
128145 std::vector<OutputGroup> clone_pool;
129146 AddCoins (clone_pool, {2 * CENT, 7 * CENT, 7 * CENT});
0 commit comments