@@ -462,14 +462,19 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
462
462
BOOST_CHECK (testWallet.SelectCoinsMinConf (MIN_CHANGE * 9990 / 100 , filter_confirmed, GroupCoins (vCoins), setCoinsRet, nValueRet, coin_selection_params, bnb_used));
463
463
BOOST_CHECK_EQUAL (nValueRet, 101 * MIN_CHANGE);
464
464
BOOST_CHECK_EQUAL (setCoinsRet.size (), 2U );
465
+ }
465
466
466
- // test with many inputs
467
- for (CAmount amt=1500 ; amt < COIN; amt*=10 ) {
468
- empty_wallet ();
469
- // Create 676 inputs (= (old MAX_STANDARD_TX_SIZE == 100000) / 148 bytes per input)
470
- for (uint16_t j = 0 ; j < 676 ; j++)
471
- add_coin (amt);
467
+ // test with many inputs
468
+ for (CAmount amt=1500 ; amt < COIN; amt*=10 ) {
469
+ empty_wallet ();
470
+ // Create 676 inputs (= (old MAX_STANDARD_TX_SIZE == 100000) / 148 bytes per input)
471
+ for (uint16_t j = 0 ; j < 676 ; j++)
472
+ add_coin (amt);
473
+
474
+ // We only create the wallet once to save time, but we still run the coin selection RUN_TESTS times.
475
+ for (int i = 0 ; i < RUN_TESTS; i++) {
472
476
BOOST_CHECK (testWallet.SelectCoinsMinConf (2000 , filter_confirmed, GroupCoins (vCoins), setCoinsRet, nValueRet, coin_selection_params, bnb_used));
477
+
473
478
if (amt - 2000 < MIN_CHANGE) {
474
479
// needs more than one input:
475
480
uint16_t returnSize = std::ceil ((2000.0 + MIN_CHANGE)/amt);
@@ -481,14 +486,17 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
481
486
BOOST_CHECK_EQUAL (nValueRet, amt);
482
487
BOOST_CHECK_EQUAL (setCoinsRet.size (), 1U );
483
488
}
484
- }
489
+ }
490
+ }
485
491
486
- // test randomness
487
- {
488
- empty_wallet ();
489
- for (int i2 = 0 ; i2 < 100 ; i2++)
490
- add_coin (COIN);
492
+ // test randomness
493
+ {
494
+ empty_wallet ();
495
+ for (int i2 = 0 ; i2 < 100 ; i2++)
496
+ add_coin (COIN);
491
497
498
+ // Again, we only create the wallet once to save time, but we still run the coin selection RUN_TESTS times.
499
+ for (int i = 0 ; i < RUN_TESTS; i++) {
492
500
// picking 50 from 100 coins doesn't depend on the shuffle,
493
501
// but does depend on randomness in the stochastic approximation code
494
502
BOOST_CHECK (testWallet.SelectCoinsMinConf (50 * COIN, filter_standard, GroupCoins (vCoins), setCoinsRet , nValueRet, coin_selection_params, bnb_used));
@@ -506,17 +514,19 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
506
514
fails++;
507
515
}
508
516
BOOST_CHECK_NE (fails, RANDOM_REPEATS);
509
-
510
- // add 75 cents in small change. not enough to make 90 cents,
511
- // then try making 90 cents. there are multiple competing "smallest bigger" coins,
512
- // one of which should be picked at random
513
- add_coin (5 * CENT);
514
- add_coin (10 * CENT);
515
- add_coin (15 * CENT);
516
- add_coin (20 * CENT);
517
- add_coin (25 * CENT);
518
-
519
- fails = 0 ;
517
+ }
518
+
519
+ // add 75 cents in small change. not enough to make 90 cents,
520
+ // then try making 90 cents. there are multiple competing "smallest bigger" coins,
521
+ // one of which should be picked at random
522
+ add_coin (5 * CENT);
523
+ add_coin (10 * CENT);
524
+ add_coin (15 * CENT);
525
+ add_coin (20 * CENT);
526
+ add_coin (25 * CENT);
527
+
528
+ for (int i = 0 ; i < RUN_TESTS; i++) {
529
+ int fails = 0 ;
520
530
for (int j = 0 ; j < RANDOM_REPEATS; j++)
521
531
{
522
532
// selecting 1 from 100 identical coins depends on the shuffle; this test will fail 1% of the time
@@ -527,8 +537,9 @@ BOOST_AUTO_TEST_CASE(knapsack_solver_test)
527
537
fails++;
528
538
}
529
539
BOOST_CHECK_NE (fails, RANDOM_REPEATS);
530
- }
531
- }
540
+ }
541
+ }
542
+
532
543
empty_wallet ();
533
544
}
534
545
0 commit comments