MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / BOOST_AUTO_TEST_CASE

Function BOOST_AUTO_TEST_CASE

src/test/rbf_tests.cpp:486–559  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

484}
485
486BOOST_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

Callers

nothing calls this directly

Calls 1

CompareChunksFunction · 0.85

Tested by

no test coverage detected