@@ -731,12 +731,25 @@ BOOST_AUTO_TEST_CASE(waste_test)
731731 BOOST_CHECK_LT (waste_nochange2, waste_nochange1);
732732 selection.clear ();
733733
734- // 0 Waste only when fee == long term fee , no change, and no excess
734+ // No Waste when fee == long_term_fee , no change, and no excess
735735 add_coin (1 * COIN, 1 , selection, fee, fee);
736736 add_coin (2 * COIN, 2 , selection, fee, fee);
737- const CAmount exact_target = in_amt - 2 * fee;
738- BOOST_CHECK_EQUAL (0 , GetSelectionWaste (selection, 0 , exact_target));
737+ const CAmount exact_target{in_amt - fee * 2 };
738+ BOOST_CHECK_EQUAL (0 , GetSelectionWaste (selection, /* change_cost */ 0 , exact_target));
739+ selection.clear ();
739740
741+ // No Waste when (fee - long_term_fee) == (-cost_of_change), and no excess
742+ const CAmount new_change_cost{fee_diff * 2 };
743+ add_coin (1 * COIN, 1 , selection, fee, fee + fee_diff);
744+ add_coin (2 * COIN, 2 , selection, fee, fee + fee_diff);
745+ BOOST_CHECK_EQUAL (0 , GetSelectionWaste (selection, new_change_cost, target));
746+ selection.clear ();
747+
748+ // No Waste when (fee - long_term_fee) == (-excess), no change cost
749+ const CAmount new_target{in_amt - fee * 2 - fee_diff * 2 };
750+ add_coin (1 * COIN, 1 , selection, fee, fee + fee_diff);
751+ add_coin (2 * COIN, 2 , selection, fee, fee + fee_diff);
752+ BOOST_CHECK_EQUAL (0 , GetSelectionWaste (selection, /* change cost */ 0 , new_target));
740753}
741754
742755BOOST_AUTO_TEST_SUITE_END ()
0 commit comments