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