Browse Source

Merge #9909: tests: Add FindEarliestAtLeast test for edge cases

cf66f04 Add FindEarliestAtLeast test for edge cases (Russell Yanofsky)

Tree-SHA512: bed2e9b2eefe0014414f1be8f0ba236b1dcc6744a670ffa546100c62817dd06a117cc62cdff80c4988d2b374cae9a57f2bb135fc582ffb51ca2d34ab07bb3fe0
0.15
Wladimir J. van der Laan 8 years ago
parent
commit
300f8e7a82
No known key found for this signature in database
GPG Key ID: 1E4AED62986CD25D
  1. 35
      src/test/skiplist_tests.cpp

35
src/test/skiplist_tests.cpp

@ -143,4 +143,39 @@ BOOST_AUTO_TEST_CASE(findearliestatleast_test) @@ -143,4 +143,39 @@ BOOST_AUTO_TEST_CASE(findearliestatleast_test)
BOOST_CHECK(vBlocksMain[r].GetAncestor(ret->nHeight) == ret);
}
}
BOOST_AUTO_TEST_CASE(findearliestatleast_edge_test)
{
std::list<CBlockIndex> blocks;
for (unsigned int timeMax : {100, 100, 100, 200, 200, 200, 300, 300, 300}) {
CBlockIndex* prev = blocks.empty() ? nullptr : &blocks.back();
blocks.emplace_back();
blocks.back().nHeight = prev ? prev->nHeight + 1 : 0;
blocks.back().pprev = prev;
blocks.back().BuildSkip();
blocks.back().nTimeMax = timeMax;
}
CChain chain;
chain.SetTip(&blocks.back());
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(50)->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(100)->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(150)->nHeight, 3);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(200)->nHeight, 3);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(250)->nHeight, 6);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(300)->nHeight, 6);
BOOST_CHECK(!chain.FindEarliestAtLeast(350));
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(0)->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(-1)->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(std::numeric_limits<int64_t>::min())->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(std::numeric_limits<unsigned int>::min())->nHeight, 0);
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(-int64_t(std::numeric_limits<unsigned int>::max()) - 1)->nHeight, 0);
BOOST_CHECK(!chain.FindEarliestAtLeast(std::numeric_limits<int64_t>::max()));
BOOST_CHECK(!chain.FindEarliestAtLeast(std::numeric_limits<unsigned int>::max()));
BOOST_CHECK(!chain.FindEarliestAtLeast(int64_t(std::numeric_limits<unsigned int>::max()) + 1));
}
BOOST_AUTO_TEST_SUITE_END()

Loading…
Cancel
Save