1#include <test/csf/ledgers.h> 
    3#include <xrpld/consensus/LedgerTrie.h> 
    5#include <xrpl/beast/unit_test.h> 
   21            LedgerHistoryHelper h;
 
   35            LedgerHistoryHelper h;
 
   59            LedgerHistoryHelper h;
 
   85            LedgerHistoryHelper h;
 
  103            LedgerHistoryHelper h;
 
  124            LedgerHistoryHelper h;
 
 
  148            LedgerHistoryHelper h;
 
  151            BEAST_EXPECT(!t.
remove(h[
"ab"]));
 
  153            BEAST_EXPECT(!t.
remove(h[
"a"]));
 
  159            LedgerHistoryHelper h;
 
  165            BEAST_EXPECT(!t.
remove(h[
"abc"]));
 
  173            LedgerHistoryHelper h;
 
  177            BEAST_EXPECT(t.
remove(h[
"abc"]));
 
  183            BEAST_EXPECT(t.
remove(h[
"abc"], 2));
 
  189            BEAST_EXPECT(t.
remove(h[
"abc"], 300));
 
  196            LedgerHistoryHelper h;
 
  205            BEAST_EXPECT(t.
remove(h[
"abc"]));
 
  215            LedgerHistoryHelper h;
 
  225            BEAST_EXPECT(t.
remove(h[
"abc"]));
 
  235            LedgerHistoryHelper h;
 
  244            BEAST_EXPECT(t.
remove(h[
"abc"]));
 
  253            LedgerHistoryHelper h;
 
 
  278        LedgerHistoryHelper h;
 
  279        BEAST_EXPECT(t.
empty());
 
  283        BEAST_EXPECT(!t.
empty());
 
  285        BEAST_EXPECT(t.
empty());
 
  288        BEAST_EXPECT(!t.
empty());
 
  290        BEAST_EXPECT(t.
empty());
 
 
  299        LedgerHistoryHelper h;
 
 
  344        using Seq = Ledger::Seq;
 
  354            LedgerHistoryHelper h;
 
  357            BEAST_EXPECT(t.
getPreferred(Seq{0})->id == genesis.id());
 
  358            BEAST_EXPECT(t.
remove(genesis));
 
  360            BEAST_EXPECT(!t.
remove(genesis));
 
  365            LedgerHistoryHelper h;
 
  367            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  372            LedgerHistoryHelper h;
 
  375            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  376            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  381            LedgerHistoryHelper h;
 
  384            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abcd"].id());
 
  385            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abcd"].id());
 
  390            LedgerHistoryHelper h;
 
  394            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  395            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  398            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  399            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  404            LedgerHistoryHelper h;
 
  408            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  409            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  412            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abcd"].id());
 
  413            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abcd"].id());
 
  418            LedgerHistoryHelper h;
 
  422            BEAST_EXPECT(h[
"abce"].
id() > h[
"abcd"].
id());
 
  423            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abce"].id());
 
  426            BEAST_EXPECT(h[
"abce"].
id() > h[
"abcd"].
id());
 
  427            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abcd"].id());
 
  433            LedgerHistoryHelper h;
 
  438            BEAST_EXPECT(h[
"abce"].
id() > h[
"abcd"].
id());
 
  439            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abce"].id());
 
  440            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abce"].id());
 
  445            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  446            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  452            LedgerHistoryHelper h;
 
  456            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abcde"].id());
 
  457            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abcde"].id());
 
  458            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"abcde"].id());
 
  464            LedgerHistoryHelper h;
 
  469            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abc"].id());
 
  470            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abc"].id());
 
  471            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"abc"].id());
 
  478            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abcde"].id());
 
  479            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"abcde"].id());
 
  484            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"abc"].id());
 
  501            LedgerHistoryHelper h;
 
  508            BEAST_EXPECT(t.
getPreferred(Seq{1})->id == h[
"ab"].id());
 
  509            BEAST_EXPECT(t.
getPreferred(Seq{2})->id == h[
"ab"].id());
 
  512            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"a"].id());
 
  513            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"a"].id());
 
  529            BEAST_EXPECT(t.
getPreferred(Seq{1})->id == h[
"ab"].id());
 
  530            BEAST_EXPECT(t.
getPreferred(Seq{2})->id == h[
"ab"].id());
 
  531            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"a"].id());
 
  532            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"a"].id());
 
  533            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"a"].id());
 
  548            BEAST_EXPECT(t.
getPreferred(Seq{1})->id == h[
"ab"].id());
 
  549            BEAST_EXPECT(t.
getPreferred(Seq{2})->id == h[
"ab"].id());
 
  550            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"ab"].id());
 
  551            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"a"].id());
 
  552            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"a"].id());
 
  567            BEAST_EXPECT(t.
getPreferred(Seq{1})->id == h[
"abde"].id());
 
  568            BEAST_EXPECT(t.
getPreferred(Seq{2})->id == h[
"abde"].id());
 
  569            BEAST_EXPECT(t.
getPreferred(Seq{3})->id == h[
"abde"].id());
 
  570            BEAST_EXPECT(t.
getPreferred(Seq{4})->id == h[
"ab"].id());
 
  571            BEAST_EXPECT(t.
getPreferred(Seq{5})->id == h[
"ab"].id());
 
 
  583        LedgerHistoryHelper h;
 
  584        BEAST_EXPECT(!t.
remove(h[
""]));
 
  598        BEAST_EXPECT(t.
remove(h[
"e"]));
 
 
  609        LedgerHistoryHelper h;
 
  630            char depth = depthDist(gen);
 
  632            for (
char d = 0; d < depth; ++d)
 
  634                char a = offset + widthDist(gen);
 
  636                offset = (a + 1) * width;
 
 
 
Ancestry trie of ledgers.
 
bool empty() const
Return whether the trie is tracking any ledgers.
 
std::uint32_t tipSupport(Ledger const &ledger) const
Return count of tip support for the specific ledger.
 
void insert(Ledger const &ledger, std::uint32_t count=1)
Insert and/or increment the support for the given ledger.
 
std::optional< SpanTip< Ledger > > getPreferred(Seq const largestIssued) const
Return the preferred ledger ID.
 
std::uint32_t branchSupport(Ledger const &ledger) const
Return the count of branch support for the specific ledger.
 
bool remove(Ledger const &ledger, std::uint32_t count=1)
Decrease support for a ledger, removing and compressing if possible.
 
bool checkInvariants() const
Check the compressed trie and support invariants.
 
void run() override
Runs the suite.
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.