@@ -287,9 +287,9 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
287
287
empty_wallet ();
288
288
add_coin (1 * CENT);
289
289
vCoins.at (0 ).nInputBytes = 40 ;
290
- BOOST_CHECK (!testWallet.SelectCoinsMinConf ( 1 * CENT, filter_standard, vCoins, setCoinsRet, nValueRet, coin_selection_params_bnb, bnb_used));
291
290
coin_selection_params_bnb.m_subtract_fee_outputs = true ;
292
291
BOOST_CHECK (testWallet.SelectCoinsMinConf ( 1 * CENT, filter_standard, vCoins, setCoinsRet, nValueRet, coin_selection_params_bnb, bnb_used));
292
+ BOOST_CHECK (bnb_used);
293
293
BOOST_CHECK_EQUAL (nValueRet, 1 * CENT);
294
294
295
295
// Make sure that can use BnB when there are preset inputs
@@ -549,17 +549,19 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
549
549
for (int i = 0 ; i < RUN_TESTS; i++) {
550
550
// picking 50 from 100 coins doesn't depend on the shuffle,
551
551
// but does depend on randomness in the stochastic approximation code
552
- BOOST_CHECK (testWallet. SelectCoinsMinConf (50 * COIN, filter_standard, vCoins, setCoinsRet , nValueRet, coin_selection_params, bnb_used ));
553
- BOOST_CHECK (testWallet. SelectCoinsMinConf (50 * COIN, filter_standard, vCoins, setCoinsRet2, nValueRet, coin_selection_params, bnb_used ));
552
+ BOOST_CHECK (KnapsackSolver (50 * COIN, GroupCoins ( vCoins) , setCoinsRet, nValueRet));
553
+ BOOST_CHECK (KnapsackSolver (50 * COIN, GroupCoins ( vCoins) , setCoinsRet2, nValueRet));
554
554
BOOST_CHECK (!equal_sets (setCoinsRet, setCoinsRet2));
555
555
556
556
int fails = 0 ;
557
557
for (int j = 0 ; j < RANDOM_REPEATS; j++)
558
558
{
559
- // selecting 1 from 100 identical coins depends on the shuffle; this test will fail 1% of the time
560
- // run the test RANDOM_REPEATS times and only complain if all of them fail
561
- BOOST_CHECK (testWallet.SelectCoinsMinConf (COIN, filter_standard, vCoins, setCoinsRet , nValueRet, coin_selection_params, bnb_used));
562
- BOOST_CHECK (testWallet.SelectCoinsMinConf (COIN, filter_standard, vCoins, setCoinsRet2, nValueRet, coin_selection_params, bnb_used));
559
+ // Test that the KnapsackSolver selects randomly from equivalent coins (same value and same input size).
560
+ // When choosing 1 from 100 identical coins, 1% of the time, this test will choose the same coin twice
561
+ // which will cause it to fail.
562
+ // To avoid that issue, run the test RANDOM_REPEATS times and only complain if all of them fail
563
+ BOOST_CHECK (KnapsackSolver (COIN, GroupCoins (vCoins), setCoinsRet, nValueRet));
564
+ BOOST_CHECK (KnapsackSolver (COIN, GroupCoins (vCoins), setCoinsRet2, nValueRet));
563
565
if (equal_sets (setCoinsRet, setCoinsRet2))
564
566
fails++;
565
567
}
@@ -579,10 +581,8 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
579
581
int fails = 0 ;
580
582
for (int j = 0 ; j < RANDOM_REPEATS; j++)
581
583
{
582
- // selecting 1 from 100 identical coins depends on the shuffle; this test will fail 1% of the time
583
- // run the test RANDOM_REPEATS times and only complain if all of them fail
584
- BOOST_CHECK (testWallet.SelectCoinsMinConf (90 *CENT, filter_standard, vCoins, setCoinsRet , nValueRet, coin_selection_params, bnb_used));
585
- BOOST_CHECK (testWallet.SelectCoinsMinConf (90 *CENT, filter_standard, vCoins, setCoinsRet2, nValueRet, coin_selection_params, bnb_used));
584
+ BOOST_CHECK (KnapsackSolver (90 *CENT, GroupCoins (vCoins), setCoinsRet, nValueRet));
585
+ BOOST_CHECK (KnapsackSolver (90 *CENT, GroupCoins (vCoins), setCoinsRet2, nValueRet));
586
586
if (equal_sets (setCoinsRet, setCoinsRet2))
587
587
fails++;
588
588
}
0 commit comments