@@ -706,6 +706,78 @@ BOOST_AUTO_TEST_CASE(block__is_invalid_merkle_root__block100k__false)
706706 BOOST_REQUIRE (!instance.is_invalid_merkle_root ());
707707}
708708
709+ // merkle_branch
710+
711+ BOOST_AUTO_TEST_CASE (block__merkle_branch__leaf_zero__empty)
712+ {
713+ BOOST_REQUIRE (block::merkle_branch (0 ).empty ());
714+ }
715+
716+ BOOST_AUTO_TEST_CASE (block__merkle_branch__one__zero)
717+ {
718+ const std::vector<size_t > expected{ 0 };
719+ BOOST_REQUIRE (block::merkle_branch (1 ) == expected);
720+ }
721+
722+ BOOST_AUTO_TEST_CASE (block__merkle_branch__two_for_odd_length__zero)
723+ {
724+ const std::vector<size_t > expected{ 0 };
725+ BOOST_REQUIRE (block::merkle_branch (2 ) == expected);
726+ }
727+
728+ BOOST_AUTO_TEST_CASE (block__merkle_branch__three__two_and_zero)
729+ {
730+ const std::vector<size_t > expected{ 2 , 0 };
731+ BOOST_REQUIRE (block::merkle_branch (3 ) == expected);
732+ }
733+
734+ BOOST_AUTO_TEST_CASE (block__merkle_branch__seven__six_four_and_zero)
735+ {
736+ const std::vector<size_t > expected{ 6 , 4 , 0 };
737+ BOOST_REQUIRE (block::merkle_branch (7 ) == expected);
738+ }
739+
740+ BOOST_AUTO_TEST_CASE (block__merkle_branch__ten_for_odd__eight_and_zero)
741+ {
742+ const std::vector<size_t > expected{ 8 , 0 };
743+ BOOST_REQUIRE (block::merkle_branch (10 ) == expected);
744+ }
745+
746+ BOOST_AUTO_TEST_CASE (block__merkle_branch__medium_power_of_two__expected)
747+ {
748+ const std::vector<size_t > expected{ 14u , 12u , 8u , 0u };
749+ BOOST_REQUIRE (block::merkle_branch (15u ) == expected);
750+ }
751+
752+ BOOST_AUTO_TEST_CASE (block__merkle_branch__power_of_two_minus_one__expected)
753+ {
754+ constexpr auto leaf = 1023u ;
755+ constexpr auto size = ceilinged_log2 (leaf);
756+ const auto positions = block::merkle_branch (leaf);
757+ BOOST_CHECK_EQUAL (positions.size (), size);
758+ BOOST_CHECK_EQUAL (positions.front (), 1022u );
759+ BOOST_CHECK_EQUAL (positions.back (), 0u );
760+ }
761+
762+ BOOST_AUTO_TEST_CASE (block__merkle_branch__odd_large_leaf_with_duplication__expected)
763+ {
764+ constexpr auto leaf = 2047u ;
765+ constexpr auto size = ceilinged_log2 (leaf);
766+ const auto positions = block::merkle_branch (leaf);
767+ BOOST_CHECK_EQUAL (positions.size (), size);
768+ BOOST_CHECK_EQUAL (positions.front (), 2046u );
769+ BOOST_CHECK_EQUAL (positions.back (), 0u );
770+ }
771+
772+ BOOST_AUTO_TEST_CASE (block__merkle_branch__maximum_non_overflow__expected)
773+ {
774+ constexpr auto maximum = sub1 (power2 (sub1 (bits<size_t >)));
775+ const auto positions = block::merkle_branch (maximum);
776+ BOOST_CHECK_EQUAL (positions.size (), sub1 (bits<size_t >));
777+ BOOST_CHECK_EQUAL (positions.front (), sub1 (maximum));
778+ BOOST_CHECK_EQUAL (positions.back (), 0u );
779+ }
780+
709781// is_overweight
710782// is_invalid_coinbase_script
711783// is_hash_limit_exceeded
0 commit comments