@@ -710,72 +710,106 @@ BOOST_AUTO_TEST_CASE(block__is_invalid_merkle_root__block100k__false)
710710
711711BOOST_AUTO_TEST_CASE (block__merkle_branch__leaf_zero__empty)
712712{
713- BOOST_REQUIRE (block::merkle_branch (0 ).empty ());
713+ BOOST_REQUIRE (block::merkle_branch (0 , 0 ).empty ());
714714}
715715
716716BOOST_AUTO_TEST_CASE (block__merkle_branch__one__zero)
717717{
718- const std::vector<size_t > expected{ 0 };
719- BOOST_REQUIRE (block::merkle_branch (1 ) == expected);
718+ const auto result = block::merkle_branch (1 , 2 );
719+ BOOST_REQUIRE_EQUAL (result.size (), 1u );
720+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 0u );
721+ BOOST_REQUIRE_EQUAL (result[0 ].width , 1u );
720722}
721723
722724BOOST_AUTO_TEST_CASE (block__merkle_branch__two_for_odd_length__zero)
723725{
724- const std::vector<size_t > expected{ 0 };
725- BOOST_REQUIRE (block::merkle_branch (2 ) == expected);
726+ const auto result = block::merkle_branch (2 , 3 );
727+ BOOST_REQUIRE_EQUAL (result.size (), 1u );
728+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 0u );
729+ BOOST_REQUIRE_EQUAL (result[0 ].width , 2u );
726730}
727731
728732BOOST_AUTO_TEST_CASE (block__merkle_branch__three__two_and_zero)
729733{
730- const std::vector<size_t > expected{ 2 , 0 };
731- BOOST_REQUIRE (block::merkle_branch (3 ) == expected);
734+ const auto result = block::merkle_branch (3 , 4 );
735+ BOOST_REQUIRE_EQUAL (result.size (), 2u );
736+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 2u );
737+ BOOST_REQUIRE_EQUAL (result[0 ].width , 1u );
738+ BOOST_REQUIRE_EQUAL (result[1 ].sibling , 0u );
739+ BOOST_REQUIRE_EQUAL (result[1 ].width , 2u );
732740}
733741
734742BOOST_AUTO_TEST_CASE (block__merkle_branch__seven__six_four_and_zero)
735743{
736- const std::vector<size_t > expected{ 6 , 4 , 0 };
737- BOOST_REQUIRE (block::merkle_branch (7 ) == expected);
744+ const auto result = block::merkle_branch (7 , 8 );
745+ BOOST_REQUIRE_EQUAL (result.size (), 3u );
746+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 6u );
747+ BOOST_REQUIRE_EQUAL (result[0 ].width , 1u );
748+ BOOST_REQUIRE_EQUAL (result[1 ].sibling , 2u );
749+ BOOST_REQUIRE_EQUAL (result[1 ].width , 2u );
750+ BOOST_REQUIRE_EQUAL (result[2 ].sibling , 0u );
751+ BOOST_REQUIRE_EQUAL (result[2 ].width , 4u );
738752}
739753
740754BOOST_AUTO_TEST_CASE (block__merkle_branch__ten_for_odd__eight_and_zero)
741755{
742- const std::vector<size_t > expected{ 8 , 0 };
743- BOOST_REQUIRE (block::merkle_branch (10 ) == expected);
756+ const auto result = block::merkle_branch (10 , 11 );
757+ BOOST_REQUIRE_EQUAL (result.size (), 2u );
758+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 4u );
759+ BOOST_REQUIRE_EQUAL (result[0 ].width , 2u );
760+ BOOST_REQUIRE_EQUAL (result[1 ].sibling , 0u );
761+ BOOST_REQUIRE_EQUAL (result[1 ].width , 8u );
744762}
745763
746764BOOST_AUTO_TEST_CASE (block__merkle_branch__medium_power_of_two__expected)
747765{
748- const std::vector<size_t > expected{ 14u , 12u , 8u , 0u };
749- BOOST_REQUIRE (block::merkle_branch (15u ) == expected);
766+ const block::positions expected{ { 14 , 1 }, { 6 , 2 }, { 2 , 4 }, { 0 , 8 } };
767+
768+ const auto result = block::merkle_branch (15 , 16 );
769+ BOOST_REQUIRE_EQUAL (result.size (), 4u );
770+ BOOST_REQUIRE_EQUAL (result[0 ].sibling , 14u );
771+ BOOST_REQUIRE_EQUAL (result[0 ].width , 1u );
772+ BOOST_REQUIRE_EQUAL (result[1 ].sibling , 6u );
773+ BOOST_REQUIRE_EQUAL (result[1 ].width , 2u );
774+ BOOST_REQUIRE_EQUAL (result[2 ].sibling , 2u );
775+ BOOST_REQUIRE_EQUAL (result[2 ].width , 4u );
776+ BOOST_REQUIRE_EQUAL (result[3 ].sibling , 0u );
777+ BOOST_REQUIRE_EQUAL (result[3 ].width , 8u );
750778}
751779
752780BOOST_AUTO_TEST_CASE (block__merkle_branch__power_of_two_minus_one__expected)
753781{
754782 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 );
783+ constexpr auto size = sub1 (ceilinged_log2 (add1 (leaf)));
784+ const auto branch = block::merkle_branch (leaf, add1 (leaf));
785+ BOOST_REQUIRE_EQUAL (branch.size (), size);
786+ BOOST_REQUIRE_EQUAL (branch.front ().sibling , 1022u );
787+ BOOST_REQUIRE_EQUAL (branch.front ().width , 1u );
788+ BOOST_REQUIRE_EQUAL (branch.back ().sibling , 0u );
789+ BOOST_REQUIRE_EQUAL (branch.back ().width , power2 (sub1 (size)));
760790}
761791
762792BOOST_AUTO_TEST_CASE (block__merkle_branch__odd_large_leaf_with_duplication__expected)
763793{
764794 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 );
795+ constexpr auto size = sub1 (ceilinged_log2 (add1 (leaf)));
796+ const auto branch = block::merkle_branch (leaf, add1 (leaf));
797+ BOOST_REQUIRE_EQUAL (branch.size (), size);
798+ BOOST_REQUIRE_EQUAL (branch.front ().sibling , 2046u );
799+ BOOST_REQUIRE_EQUAL (branch.front ().width , 1u );
800+ BOOST_REQUIRE_EQUAL (branch.back ().sibling , 0u );
801+ BOOST_REQUIRE_EQUAL (branch.back ().width , power2 (sub1 (size)));
770802}
771803
772804BOOST_AUTO_TEST_CASE (block__merkle_branch__maximum_non_overflow__expected)
773805{
774806 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 );
807+ const auto branch = block::merkle_branch (maximum, add1 (maximum));
808+ BOOST_REQUIRE_EQUAL (branch.size (), sub1 (bits<size_t >));
809+ BOOST_REQUIRE_EQUAL (branch.front ().sibling , sub1 (maximum));
810+ BOOST_REQUIRE_EQUAL (branch.front ().width , 1u );
811+ BOOST_REQUIRE_EQUAL (branch.back ().sibling , 0u );
812+ BOOST_REQUIRE_EQUAL (branch.back ().width , power2 (sub1 (sub1 (bits<size_t >))));
779813}
780814
781815// is_overweight
0 commit comments