@@ -344,6 +344,48 @@ BOOST_AUTO_TEST_CASE(bnb_search_test)
344
344
const auto result10 = SelectCoins (*wallet, coins, 10 * CENT, coin_control, coin_selection_params_bnb);
345
345
BOOST_CHECK (result10);
346
346
}
347
+ {
348
+ std::unique_ptr<CWallet> wallet = std::make_unique<CWallet>(m_node.chain .get (), " " , m_args, CreateMockWalletDatabase ());
349
+ wallet->LoadWallet ();
350
+ LOCK (wallet->cs_wallet );
351
+ wallet->SetWalletFlag (WALLET_FLAG_DESCRIPTORS);
352
+ wallet->SetupDescriptorScriptPubKeyMans ();
353
+
354
+ std::vector<COutput> coins;
355
+
356
+ add_coin (coins, *wallet, 10 * CENT, 6 * 24 , false , 0 , true );
357
+ add_coin (coins, *wallet, 9 * CENT, 6 * 24 , false , 0 , true );
358
+ add_coin (coins, *wallet, 1 * CENT, 6 * 24 , false , 0 , true );
359
+
360
+ // single coin should be selected when effective fee > long term fee
361
+ expected_result.Clear ();
362
+ add_coin (10 * CENT, 2 , expected_result);
363
+ CCoinControl coin_control;
364
+ coin_selection_params_bnb.m_effective_feerate = CFeeRate (5000 );
365
+ coin_selection_params_bnb.m_long_term_feerate = CFeeRate (3000 );
366
+ const auto result11 = SelectCoins (*wallet, coins, 10 * CENT, coin_control, coin_selection_params_bnb);
367
+ BOOST_CHECK (EquivalentResult (expected_result, *result11));
368
+
369
+ // more coins should be selected when effective fee < long term fee
370
+ expected_result.Clear ();
371
+ add_coin (9 * CENT, 2 , expected_result);
372
+ add_coin (1 * CENT, 2 , expected_result);
373
+ coin_selection_params_bnb.m_effective_feerate = CFeeRate (3000 );
374
+ coin_selection_params_bnb.m_long_term_feerate = CFeeRate (5000 );
375
+ const auto result12 = SelectCoins (*wallet, coins, 10 * CENT, coin_control, coin_selection_params_bnb);
376
+ BOOST_CHECK (EquivalentResult (expected_result, *result12));
377
+
378
+ // pre selected coin should be selected even if disadvantageous
379
+ expected_result.Clear ();
380
+ add_coin (9 * CENT, 2 , expected_result);
381
+ add_coin (1 * CENT, 2 , expected_result);
382
+ coin_control.fAllowOtherInputs = true ;
383
+ coin_control.Select (coins.at (1 ).outpoint ); // pre select 9 coin
384
+ coin_selection_params_bnb.m_effective_feerate = CFeeRate (5000 );
385
+ coin_selection_params_bnb.m_long_term_feerate = CFeeRate (3000 );
386
+ const auto result13 = SelectCoins (*wallet, coins, 10 * CENT, coin_control, coin_selection_params_bnb);
387
+ BOOST_CHECK (EquivalentResult (expected_result, *result13));
388
+ }
347
389
}
348
390
349
391
BOOST_AUTO_TEST_CASE (knapsack_solver_test)
0 commit comments