Add unit test for FindEarliestAtLeast
This commit is contained in:
parent
997a98a674
commit
4b06e41c30
1 changed files with 43 additions and 0 deletions
|
@ -100,4 +100,47 @@ BOOST_AUTO_TEST_CASE(getlocator_test)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(findearliestatleast_test)
|
||||||
|
{
|
||||||
|
std::vector<uint256> vHashMain(100000);
|
||||||
|
std::vector<CBlockIndex> vBlocksMain(100000);
|
||||||
|
for (unsigned int i=0; i<vBlocksMain.size(); i++) {
|
||||||
|
vHashMain[i] = ArithToUint256(i); // Set the hash equal to the height
|
||||||
|
vBlocksMain[i].nHeight = i;
|
||||||
|
vBlocksMain[i].pprev = i ? &vBlocksMain[i - 1] : NULL;
|
||||||
|
vBlocksMain[i].phashBlock = &vHashMain[i];
|
||||||
|
vBlocksMain[i].BuildSkip();
|
||||||
|
if (i < 10) {
|
||||||
|
vBlocksMain[i].nTime = i;
|
||||||
|
vBlocksMain[i].nTimeMax = i;
|
||||||
|
} else {
|
||||||
|
// randomly choose something in the range [MTP, MTP*2]
|
||||||
|
int64_t medianTimePast = vBlocksMain[i].GetMedianTimePast();
|
||||||
|
int r = insecure_rand() % medianTimePast;
|
||||||
|
vBlocksMain[i].nTime = r + medianTimePast;
|
||||||
|
vBlocksMain[i].nTimeMax = std::max(vBlocksMain[i].nTime, vBlocksMain[i-1].nTimeMax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check that we set nTimeMax up correctly.
|
||||||
|
unsigned int curTimeMax = 0;
|
||||||
|
for (unsigned int i=0; i<vBlocksMain.size(); ++i) {
|
||||||
|
curTimeMax = std::max(curTimeMax, vBlocksMain[i].nTime);
|
||||||
|
BOOST_CHECK(curTimeMax == vBlocksMain[i].nTimeMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build a CChain for the main branch.
|
||||||
|
CChain chain;
|
||||||
|
chain.SetTip(&vBlocksMain.back());
|
||||||
|
|
||||||
|
// Verify that FindEarliestAtLeast is correct.
|
||||||
|
for (unsigned int i=0; i<10000; ++i) {
|
||||||
|
// Pick a random element in vBlocksMain.
|
||||||
|
int r = insecure_rand() % vBlocksMain.size();
|
||||||
|
int64_t test_time = vBlocksMain[r].nTime;
|
||||||
|
CBlockIndex *ret = chain.FindEarliestAtLeast(test_time);
|
||||||
|
BOOST_CHECK(ret->nTimeMax >= test_time);
|
||||||
|
BOOST_CHECK((ret->pprev==NULL) || ret->pprev->nTimeMax < test_time);
|
||||||
|
BOOST_CHECK(vBlocksMain[r].GetAncestor(ret->nHeight) == ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|
Loading…
Reference in a new issue