@ -35,7 +35,7 @@ static CAmount balance = 0;
CoinEligibilityFilter filter_standard ( 1 , 6 , 0 ) ;
CoinEligibilityFilter filter_confirmed ( 1 , 1 , 0 ) ;
CoinEligibilityFilter filter_standard_extra ( 6 , 6 , 0 ) ;
CoinSelectionParams coin_selection_params ( /* use_bnb= */ false , /* change_output_size= */ 0 ,
CoinSelectionParams coin_selection_params ( /* change_output_size= */ 0 ,
/* change_spend_size= */ 0 , /* effective_feerate= */ CFeeRate ( 0 ) ,
/* long_term_feerate= */ CFeeRate ( 0 ) , /* discard_feerate= */ CFeeRate ( 0 ) ,
/* tx_no_inputs_size= */ 0 , /* avoid_partial= */ false ) ;
@ -271,25 +271,23 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
}
// Make sure that effective value is working in SelectCoinsMinConf when BnB is used
CoinSelectionParams coin_selection_params_bnb ( /* use_bnb= */ true , /* change_output_size= */ 0 ,
CoinSelectionParams coin_selection_params_bnb ( /* change_output_size= */ 0 ,
/* change_spend_size= */ 0 , /* effective_feerate= */ CFeeRate ( 3000 ) ,
/* long_term_feerate= */ CFeeRate ( 1000 ) , /* discard_feerate= */ CFeeRate ( 1000 ) ,
/* tx_no_inputs_size= */ 0 , /* avoid_partial= */ false ) ;
CoinSet setCoinsRet ;
CAmount nValueRet ;
bool bnb_used ;
empty_wallet ( ) ;
add_coin ( 1 ) ;
vCoins . at ( 0 ) . nInputBytes = 40 ; // Make sure that it has a negative effective value. The next check should assert if this somehow got through. Otherwise it will fail
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params_bnb , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params_bnb )) ;
// Test fees subtracted from output:
empty_wallet ( ) ;
add_coin ( 1 * CENT ) ;
vCoins . at ( 0 ) . nInputBytes = 40 ;
coin_selection_params_bnb . m_subtract_fee_outputs = true ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params_bnb , bnb_used ) ) ;
BOOST_CHECK ( bnb_used ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params_bnb ) ) ;
BOOST_CHECK_EQUAL ( nValueRet , 1 * CENT ) ;
// Make sure that can use BnB when there are preset inputs
@ -307,9 +305,7 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
coin_control . fAllowOtherInputs = true ;
coin_control . Select ( COutPoint ( vCoins . at ( 0 ) . tx - > GetHash ( ) , vCoins . at ( 0 ) . i ) ) ;
coin_selection_params_bnb . m_effective_feerate = CFeeRate ( 0 ) ;
BOOST_CHECK ( wallet - > SelectCoins ( vCoins , 10 * CENT , setCoinsRet , nValueRet , coin_control , coin_selection_params_bnb , bnb_used ) ) ;
BOOST_CHECK ( bnb_used ) ;
BOOST_CHECK ( coin_selection_params_bnb . use_bnb ) ;
BOOST_CHECK ( wallet - > SelectCoins ( vCoins , 10 * CENT , setCoinsRet , nValueRet , coin_control , coin_selection_params_bnb ) ) ;
}
}
@ -317,7 +313,6 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
{
CoinSet setCoinsRet , setCoinsRet2 ;
CAmount nValueRet ;
bool bnb_used ;
LOCK ( testWallet . cs_wallet ) ;
testWallet . SetupLegacyScriptPubKeyMan ( ) ;
@ -328,24 +323,24 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
empty_wallet ( ) ;
// with an empty wallet we can't even pay one cent
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
add_coin ( 1 * CENT , 4 ) ; // add a new 1 cent coin
// with a new 1 cent coin, we still can't find a mature 1 cent
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 1 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
// but we can find a new 1 cent
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1 * CENT ) ;
add_coin ( 2 * CENT ) ; // add a mature 2 cent coin
// we can't make 3 cents of mature coins
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 3 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 3 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
// we can make 3 cents of new coins
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 3 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 3 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 3 * CENT ) ;
add_coin ( 5 * CENT ) ; // add a mature 5 cent coin,
@ -355,33 +350,33 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
// now we have new: 1+10=11 (of which 10 was self-sent), and mature: 2+5+20=27. total = 38
// we can't make 38 cents only if we disallow new coins:
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 38 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 38 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
// we can't even make 37 cents if we don't allow new coins even if they're from us
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 38 * CENT , filter_standard_extra , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 38 * CENT , filter_standard_extra , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
// but we can make 37 cents if we accept new coins from ourself
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 37 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 37 * CENT , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 37 * CENT ) ;
// and we can make 38 cents if we accept all new coins
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 38 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 38 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 38 * CENT ) ;
// try making 34 cents from 1,2,5,10,20 - we can't do it exactly
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 34 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 34 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 35 * CENT ) ; // but 35 cents is closest
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 3U ) ; // the best should be 20+10+5. it's incredibly unlikely the 1 or 2 got included (but possible)
// when we try making 7 cents, the smaller coins (1,2,5) are enough. We should see just 2+5
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 7 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 7 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 7 * CENT ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 2U ) ;
// when we try making 8 cents, the smaller coins (1,2,5) are exactly enough.
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 8 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 8 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK ( nValueRet = = 8 * CENT ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 3U ) ;
// when we try making 9 cents, no subset of smaller coins is enough, and we get the next bigger coin (10)
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 9 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 9 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 10 * CENT ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ;
@ -395,30 +390,30 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( 30 * CENT ) ; // now we have 6+7+8+20+30 = 71 cents total
// check that we have 71 and not 72
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 71 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 72 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 71 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK ( ! testWallet . SelectCoinsMinConf ( 72 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
// now try making 16 cents. the best smaller coins can do is 6+7+8 = 21; not as good at the next biggest coin, 20
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 20 * CENT ) ; // we should get 20 in one coin
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ;
add_coin ( 5 * CENT ) ; // now we have 5+6+7+8+20+30 = 75 cents total
// now if we try making 16 cents again, the smaller coins can make 5+6+7 = 18 cents, better than the next biggest coin, 20
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 18 * CENT ) ; // we should get 18 in 3 coins
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 3U ) ;
add_coin ( 18 * CENT ) ; // now we have 5+6+7+8+18+20+30
// and now if we try making 16 cents again, the smaller coins can make 5+6+7 = 18 cents, the same as the next biggest coin, 18
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 16 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 18 * CENT ) ; // we should get 18 in 1 coin
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ; // because in the event of a tie, the biggest coin wins
// now try making 11 cents. we should get 5+6
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 11 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 11 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 11 * CENT ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 2U ) ;
@ -427,11 +422,11 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( 2 * COIN ) ;
add_coin ( 3 * COIN ) ;
add_coin ( 4 * COIN ) ; // now we have 5+6+7+8+18+20+30+100+200+300+400 = 1094 cents
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 95 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 95 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1 * COIN ) ; // we should get 1 BTC in 1 coin
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 195 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 195 * CENT , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 2 * COIN ) ; // we should get 2 BTC in 1 coin
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ;
@ -446,14 +441,14 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
// try making 1 * MIN_CHANGE from the 1.5 * MIN_CHANGE
// we'll get change smaller than MIN_CHANGE whatever happens, so can expect MIN_CHANGE exactly
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , MIN_CHANGE ) ;
// but if we add a bigger coin, small change is avoided
add_coin ( 1111 * MIN_CHANGE ) ;
// try making 1 from 0.1 + 0.2 + 0.3 + 0.4 + 0.5 + 1111 = 1112.5
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1 * MIN_CHANGE ) ; // we should get the exact amount
// if we add more small coins:
@ -461,7 +456,7 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( MIN_CHANGE * 7 / 10 ) ;
// and try again to make 1.0 * MIN_CHANGE
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1 * MIN_CHANGE ) ; // we should get the exact amount
// run the 'mtgox' test (see https://blockexplorer.com/tx/29a3efd3ef04f9153d47a990bd7b048a4b2d213daaa5fb8ed670fb85f13bdbcf)
@ -470,7 +465,7 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
for ( int j = 0 ; j < 20 ; j + + )
add_coin ( 50000 * COIN ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 500000 * COIN , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 500000 * COIN , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 500000 * COIN ) ; // we should get the exact amount
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 10U ) ; // in ten coins
@ -483,7 +478,7 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( MIN_CHANGE * 6 / 10 ) ;
add_coin ( MIN_CHANGE * 7 / 10 ) ;
add_coin ( 1111 * MIN_CHANGE ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1 * MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1111 * MIN_CHANGE ) ; // we get the bigger coin
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 1U ) ;
@ -493,7 +488,7 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( MIN_CHANGE * 6 / 10 ) ;
add_coin ( MIN_CHANGE * 8 / 10 ) ;
add_coin ( 1111 * MIN_CHANGE ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , MIN_CHANGE ) ; // we should get the exact amount
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 2U ) ; // in two coins 0.4+0.6
@ -504,12 +499,12 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
add_coin ( MIN_CHANGE * 100 ) ;
// trying to make 100.01 from these three coins
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE * 10001 / 100 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE * 10001 / 100 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , MIN_CHANGE * 10105 / 100 ) ; // we should get all coins
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 3U ) ;
// but if we try to make 99.9, we should take the bigger of the two small coins to avoid small change
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE * 9990 / 100 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( MIN_CHANGE * 9990 / 100 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 101 * MIN_CHANGE ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 2U ) ;
}
@ -523,7 +518,7 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
// We only create the wallet once to save time, but we still run the coin selection RUN_TESTS times.
for ( int i = 0 ; i < RUN_TESTS ; i + + ) {
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 2000 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 2000 , filter_confirmed , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
if ( amt - 2000 < MIN_CHANGE ) {
// needs more than one input:
@ -597,7 +592,6 @@ BOOST_AUTO_TEST_CASE(ApproximateBestSubset)
{
CoinSet setCoinsRet ;
CAmount nValueRet ;
bool bnb_used ;
LOCK ( testWallet . cs_wallet ) ;
testWallet . SetupLegacyScriptPubKeyMan ( ) ;
@ -609,7 +603,7 @@ BOOST_AUTO_TEST_CASE(ApproximateBestSubset)
add_coin ( 1000 * COIN ) ;
add_coin ( 3 * COIN ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1003 * COIN , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params , bnb_used )) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( 1003 * COIN , filter_standard , vCoins , setCoinsRet , nValueRet , coin_selection_params )) ;
BOOST_CHECK_EQUAL ( nValueRet , 1003 * COIN ) ;
BOOST_CHECK_EQUAL ( setCoinsRet . size ( ) , 2U ) ;
@ -644,19 +638,18 @@ BOOST_AUTO_TEST_CASE(SelectCoins_test)
CAmount target = rand . randrange ( balance - 1000 ) + 1000 ;
// Perform selection
CoinSelectionParams coin_selection_params_knapsack ( /* use_bnb= */ false , /* change_output_size= */ 34 ,
CoinSelectionParams coin_selection_params_knapsack ( /* change_output_size= */ 34 ,
/* change_spend_size= */ 148 , /* effective_feerate= */ CFeeRate ( 0 ) ,
/* long_term_feerate= */ CFeeRate ( 0 ) , /* discard_feerate= */ CFeeRate ( 0 ) ,
/* tx_no_inputs_size= */ 0 , /* avoid_partial= */ false ) ;
CoinSelectionParams coin_selection_params_bnb ( /* use_bnb= */ true , /* change_output_size= */ 34 ,
CoinSelectionParams coin_selection_params_bnb ( /* change_output_size= */ 34 ,
/* change_spend_size= */ 148 , /* effective_feerate= */ CFeeRate ( 0 ) ,
/* long_term_feerate= */ CFeeRate ( 0 ) , /* discard_feerate= */ CFeeRate ( 0 ) ,
/* tx_no_inputs_size= */ 0 , /* avoid_partial= */ false ) ;
CoinSet out_set ;
CAmount out_value = 0 ;
bool bnb_used = false ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( target , filter_standard , vCoins , out_set , out_value , coin_selection_params_bnb , bnb_used ) | |
testWallet . SelectCoinsMinConf ( target , filter_standard , vCoins , out_set , out_value , coin_selection_params_knapsack , bnb_used ) ) ;
BOOST_CHECK ( testWallet . SelectCoinsMinConf ( target , filter_standard , vCoins , out_set , out_value , coin_selection_params_bnb ) | |
testWallet . SelectCoinsMinConf ( target , filter_standard , vCoins , out_set , out_value , coin_selection_params_knapsack ) ) ;
BOOST_CHECK_GE ( out_value , target ) ;
}
}