git / moonbite-core / src/libmw/test/tests/mmr/Test_MMR.cpp · raw

// Copyright (c) 2021 The Litecoin Core developers// Distributed under the MIT software license, see the accompanying// file COPYING or http://www.opensource.org/licenses/mit-license.php.#include <mw/mmr/MMR.h>#include <test_framework/TestMWEB.h>using namespace mmr;BOOST_FIXTURE_TEST_SUITE(TestMMR, MWEBTestingSetup)BOOST_AUTO_TEST_CASE(MMRTest){    auto pmmr = PMMR::Open(        'O',        GetDataDir() / "mmr",        0,        GetDB(),        nullptr    );    std::vector<uint8_t> leaf0({ 0, 1, 2 });    std::vector<uint8_t> leaf1({ 1, 2, 3 });    std::vector<uint8_t> leaf2({ 2, 3, 4 });    std::vector<uint8_t> leaf3({ 3, 4, 5 });    std::vector<uint8_t> leaf4({ 4, 5, 6 });    pmmr->Add(leaf0);    pmmr->Add(leaf1);    pmmr->Add(leaf2);    pmmr->Add(leaf3);    BOOST_REQUIRE(pmmr->GetLeaf(LeafIndex::At(0)) == Leaf::Create(LeafIndex::At(0), leaf0));    BOOST_REQUIRE(pmmr->GetLeaf(LeafIndex::At(1)) == Leaf::Create(LeafIndex::At(1), leaf1));    BOOST_REQUIRE(pmmr->GetLeaf(LeafIndex::At(2)) == Leaf::Create(LeafIndex::At(2), leaf2));    BOOST_REQUIRE(pmmr->GetLeaf(LeafIndex::At(3)) == Leaf::Create(LeafIndex::At(3), leaf3));    BOOST_REQUIRE(pmmr->GetNumLeaves() == 4);    BOOST_REQUIRE(pmmr->GetNumNodes() == 7);    BOOST_CHECK_EQUAL(pmmr->Root().ToHex(), "9ab6e3c4a8594b9846b39b6beefe8f704c1de720f28426ddf3898bd4f8d6e45f");    pmmr->Add(leaf4);    BOOST_REQUIRE(pmmr->GetLeaf(LeafIndex::At(4)) == Leaf::Create(LeafIndex::At(4), leaf4));    BOOST_REQUIRE(pmmr->GetNumLeaves() == 5);    BOOST_REQUIRE(pmmr->GetNumNodes() == 8);    BOOST_CHECK_EQUAL(pmmr->Root().ToHex(), "376ef1612abbb461ab78f317569c9a19d054f2c928c79410d50403564b91c5f7");    pmmr->Rewind(4);    BOOST_REQUIRE(pmmr->GetNumLeaves() == 4);    BOOST_REQUIRE(pmmr->GetNumNodes() == 7);    BOOST_CHECK_EQUAL(pmmr->Root().ToHex(), "9ab6e3c4a8594b9846b39b6beefe8f704c1de720f28426ddf3898bd4f8d6e45f");}BOOST_AUTO_TEST_CASE(PMMRCacheTest){    PMMR::Ptr pmmr = PMMR::Open(        'O',        GetDataDir() / "mmr",        0,        GetDB(),        nullptr    );    PMMRCache cache(pmmr);    std::vector<uint8_t> leaf0({ 0, 1, 2 });    std::vector<uint8_t> leaf1({ 1, 2, 3 });    std::vector<uint8_t> leaf2({ 2, 3, 4 });    std::vector<uint8_t> leaf3({ 3, 4, 5 });    std::vector<uint8_t> leaf4({ 4, 5, 6 });    cache.Add(leaf0);    cache.Add(leaf1);    cache.Add(leaf2);    cache.Add(leaf3);    BOOST_REQUIRE(cache.GetLeaf(LeafIndex::At(0)) == Leaf::Create(LeafIndex::At(0), leaf0));    BOOST_REQUIRE(cache.GetLeaf(LeafIndex::At(1)) == Leaf::Create(LeafIndex::At(1), leaf1));    BOOST_REQUIRE(cache.GetLeaf(LeafIndex::At(2)) == Leaf::Create(LeafIndex::At(2), leaf2));    BOOST_REQUIRE(cache.GetLeaf(LeafIndex::At(3)) == Leaf::Create(LeafIndex::At(3), leaf3));    BOOST_REQUIRE(cache.GetNumLeaves() == 4);    BOOST_CHECK_EQUAL(cache.Root().ToHex(), "9ab6e3c4a8594b9846b39b6beefe8f704c1de720f28426ddf3898bd4f8d6e45f");    cache.Add(leaf4);    BOOST_REQUIRE(cache.GetLeaf(LeafIndex::At(4)) == Leaf::Create(LeafIndex::At(4), leaf4));    BOOST_REQUIRE(cache.GetNumLeaves() == 5);    BOOST_CHECK_EQUAL(cache.Root().ToHex(), "376ef1612abbb461ab78f317569c9a19d054f2c928c79410d50403564b91c5f7");    cache.Rewind(4);    BOOST_REQUIRE(cache.GetNumLeaves() == 4);    BOOST_CHECK_EQUAL(cache.Root().ToHex(), "9ab6e3c4a8594b9846b39b6beefe8f704c1de720f28426ddf3898bd4f8d6e45f");    cache.Flush(1, nullptr);}BOOST_AUTO_TEST_SUITE_END()