@@ -42,6 +42,18 @@ static void add_coin(const CAmount& nValue, int nInput, std::vector<CInputCoin>&
42
42
set.emplace_back (MakeTransactionRef (tx), nInput);
43
43
}
44
44
45
+ static void add_coin (const CAmount& nValue, int nInput, SelectionResult& result)
46
+ {
47
+ CMutableTransaction tx;
48
+ tx.vout .resize (nInput + 1 );
49
+ tx.vout [nInput].nValue = nValue;
50
+ tx.nLockTime = nextLockTime++; // so all transactions get different hashes
51
+ CInputCoin coin (MakeTransactionRef (tx), nInput);
52
+ OutputGroup group;
53
+ group.Insert (coin, 1 , false , 0 , 0 , true );
54
+ result.AddInput (group);
55
+ }
56
+
45
57
static void add_coin (const CAmount& nValue, int nInput, CoinSet& set, CAmount fee = 0 , CAmount long_term_fee = 0 )
46
58
{
47
59
CMutableTransaction tx;
@@ -175,26 +187,26 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
175
187
add_coin (4 * CENT, 4 , utxo_pool);
176
188
177
189
// Select 1 Cent
178
- add_coin (1 * CENT, 1 , expected_result. m_selected_inputs );
190
+ add_coin (1 * CENT, 1 , expected_result);
179
191
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 1 * CENT, 0.5 * CENT, selection, value_ret));
180
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
192
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
181
193
BOOST_CHECK_EQUAL (value_ret, 1 * CENT);
182
194
expected_result.Clear ();
183
195
selection.clear ();
184
196
185
197
// Select 2 Cent
186
- add_coin (2 * CENT, 2 , expected_result. m_selected_inputs );
198
+ add_coin (2 * CENT, 2 , expected_result);
187
199
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 2 * CENT, 0.5 * CENT, selection, value_ret));
188
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
200
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
189
201
BOOST_CHECK_EQUAL (value_ret, 2 * CENT);
190
202
expected_result.Clear ();
191
203
selection.clear ();
192
204
193
205
// Select 5 Cent
194
- add_coin (4 * CENT, 4 , expected_result. m_selected_inputs );
195
- add_coin (1 * CENT, 1 , expected_result. m_selected_inputs );
206
+ add_coin (4 * CENT, 4 , expected_result);
207
+ add_coin (1 * CENT, 1 , expected_result);
196
208
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 5 * CENT, 0.5 * CENT, selection, value_ret));
197
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
209
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
198
210
BOOST_CHECK_EQUAL (value_ret, 5 * CENT);
199
211
expected_result.Clear ();
200
212
selection.clear ();
@@ -205,10 +217,10 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
205
217
selection.clear ();
206
218
207
219
// Cost of change is greater than the difference between target value and utxo sum
208
- add_coin (1 * CENT, 1 , expected_result. m_selected_inputs );
220
+ add_coin (1 * CENT, 1 , expected_result);
209
221
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 0.9 * CENT, 0.5 * CENT, selection, value_ret));
210
222
BOOST_CHECK_EQUAL (value_ret, 1 * CENT);
211
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
223
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
212
224
expected_result.Clear ();
213
225
selection.clear ();
214
226
@@ -219,24 +231,24 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
219
231
220
232
// Select 10 Cent
221
233
add_coin (5 * CENT, 5 , utxo_pool);
222
- add_coin (5 * CENT, 5 , expected_result. m_selected_inputs );
223
- add_coin (4 * CENT, 4 , expected_result. m_selected_inputs );
224
- add_coin (1 * CENT, 1 , expected_result. m_selected_inputs );
234
+ add_coin (5 * CENT, 5 , expected_result);
235
+ add_coin (4 * CENT, 4 , expected_result);
236
+ add_coin (1 * CENT, 1 , expected_result);
225
237
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 10 * CENT, 0.5 * CENT, selection, value_ret));
226
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
238
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
227
239
BOOST_CHECK_EQUAL (value_ret, 10 * CENT);
228
240
expected_result.Clear ();
229
241
selection.clear ();
230
242
231
243
// Negative effective value
232
244
// Select 10 Cent but have 1 Cent not be possible because too small
233
- add_coin (5 * CENT, 5 , expected_result. m_selected_inputs );
234
- add_coin (3 * CENT, 3 , expected_result. m_selected_inputs );
235
- add_coin (2 * CENT, 2 , expected_result. m_selected_inputs );
245
+ add_coin (5 * CENT, 5 , expected_result);
246
+ add_coin (3 * CENT, 3 , expected_result);
247
+ add_coin (2 * CENT, 2 , expected_result);
236
248
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 10 * CENT, 5000 , selection, value_ret));
237
249
BOOST_CHECK_EQUAL (value_ret, 10 * CENT);
238
250
// FIXME: this test is redundant with the above, because 1 Cent is selected, not "too small"
239
- // BOOST_CHECK(equivalent_sets(selection, expected_result.m_selected_inputs ));
251
+ // BOOST_CHECK(equivalent_sets(selection, expected_result.GetInputSet() ));
240
252
241
253
// Select 0.25 Cent, not possible
242
254
BOOST_CHECK (!SelectCoinsBnB (GroupCoins (utxo_pool), 0.25 * CENT, 0.5 * CENT, selection, value_ret));
@@ -251,11 +263,11 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
251
263
252
264
// Test same value early bailout optimization
253
265
utxo_pool.clear ();
254
- add_coin (7 * CENT, 7 , expected_result. m_selected_inputs );
255
- add_coin (7 * CENT, 7 , expected_result. m_selected_inputs );
256
- add_coin (7 * CENT, 7 , expected_result. m_selected_inputs );
257
- add_coin (7 * CENT, 7 , expected_result. m_selected_inputs );
258
- add_coin (2 * CENT, 7 , expected_result. m_selected_inputs );
266
+ add_coin (7 * CENT, 7 , expected_result);
267
+ add_coin (7 * CENT, 7 , expected_result);
268
+ add_coin (7 * CENT, 7 , expected_result);
269
+ add_coin (7 * CENT, 7 , expected_result);
270
+ add_coin (2 * CENT, 7 , expected_result);
259
271
add_coin (7 * CENT, 7 , utxo_pool);
260
272
add_coin (7 * CENT, 7 , utxo_pool);
261
273
add_coin (7 * CENT, 7 , utxo_pool);
@@ -266,7 +278,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
266
278
}
267
279
BOOST_CHECK (SelectCoinsBnB (GroupCoins (utxo_pool), 30 * CENT, 5000 , selection, value_ret));
268
280
BOOST_CHECK_EQUAL (value_ret, 30 * CENT);
269
- BOOST_CHECK (equivalent_sets (selection, expected_result.m_selected_inputs ));
281
+ BOOST_CHECK (equivalent_sets (selection, expected_result.GetInputSet () ));
270
282
271
283
// //////////////////
272
284
// Behavior tests //
0 commit comments