| 484 | } |
| 485 | |
| 486 | BOOST_AUTO_TEST_CASE(feerate_chunks_utilities) |
| 487 | { |
| 488 | // Sanity check the correctness of the feerate chunks comparison. |
| 489 | |
| 490 | // A strictly better case. |
| 491 | std::vector<FeeFrac> old_chunks{{{950, 300}, {100, 100}}}; |
| 492 | std::vector<FeeFrac> new_chunks{{{1000, 300}, {50, 100}}}; |
| 493 | |
| 494 | BOOST_CHECK(std::is_lt(CompareChunks(old_chunks, new_chunks))); |
| 495 | BOOST_CHECK(std::is_gt(CompareChunks(new_chunks, old_chunks))); |
| 496 | |
| 497 | // Incomparable diagrams |
| 498 | old_chunks = {{950, 300}, {100, 100}}; |
| 499 | new_chunks = {{1000, 300}, {0, 100}}; |
| 500 | |
| 501 | BOOST_CHECK(CompareChunks(old_chunks, new_chunks) == std::partial_ordering::unordered); |
| 502 | BOOST_CHECK(CompareChunks(new_chunks, old_chunks) == std::partial_ordering::unordered); |
| 503 | |
| 504 | // Strictly better but smaller size. |
| 505 | old_chunks = {{950, 300}, {100, 100}}; |
| 506 | new_chunks = {{1100, 300}}; |
| 507 | |
| 508 | BOOST_CHECK(std::is_lt(CompareChunks(old_chunks, new_chunks))); |
| 509 | BOOST_CHECK(std::is_gt(CompareChunks(new_chunks, old_chunks))); |
| 510 | |
| 511 | // New diagram is strictly better due to the first chunk, even though |
| 512 | // second chunk contributes no fees |
| 513 | old_chunks = {{950, 300}, {100, 100}}; |
| 514 | new_chunks = {{1100, 100}, {0, 100}}; |
| 515 | |
| 516 | BOOST_CHECK(std::is_lt(CompareChunks(old_chunks, new_chunks))); |
| 517 | BOOST_CHECK(std::is_gt(CompareChunks(new_chunks, old_chunks))); |
| 518 | |
| 519 | // Feerate of first new chunk is better with, but second chunk is worse |
| 520 | old_chunks = {{950, 300}, {100, 100}}; |
| 521 | new_chunks = {{750, 100}, {249, 250}, {151, 650}}; |
| 522 | |
| 523 | BOOST_CHECK(CompareChunks(old_chunks, new_chunks) == std::partial_ordering::unordered); |
| 524 | BOOST_CHECK(CompareChunks(new_chunks, old_chunks) == std::partial_ordering::unordered); |
| 525 | |
| 526 | // If we make the second chunk slightly better, the new diagram now wins. |
| 527 | old_chunks = {{950, 300}, {100, 100}}; |
| 528 | new_chunks = {{750, 100}, {250, 250}, {150, 150}}; |
| 529 | |
| 530 | BOOST_CHECK(std::is_lt(CompareChunks(old_chunks, new_chunks))); |
| 531 | BOOST_CHECK(std::is_gt(CompareChunks(new_chunks, old_chunks))); |
| 532 | |
| 533 | // Identical diagrams, cannot be strictly better |
| 534 | old_chunks = {{950, 300}, {100, 100}}; |
| 535 | new_chunks = {{950, 300}, {100, 100}}; |
| 536 | |
| 537 | BOOST_CHECK(std::is_eq(CompareChunks(old_chunks, new_chunks))); |
| 538 | BOOST_CHECK(std::is_eq(CompareChunks(new_chunks, old_chunks))); |
| 539 | |
| 540 | // Same aggregate fee, but different total size (trigger single tail fee check step) |
| 541 | old_chunks = {{950, 300}, {100, 99}}; |
| 542 | new_chunks = {{950, 300}, {100, 100}}; |
| 543 |
nothing calls this directly
no test coverage detected