Skip to content

Commit cf66f04

Browse files
committed
Add FindEarliestAtLeast test for edge cases
E.g. repeated max timestamps, extreme int64_t & unsigned int search values.
1 parent 3fabae7 commit cf66f04

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

src/test/skiplist_tests.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,39 @@ BOOST_AUTO_TEST_CASE(findearliestatleast_test)
143143
BOOST_CHECK(vBlocksMain[r].GetAncestor(ret->nHeight) == ret);
144144
}
145145
}
146+
147+
BOOST_AUTO_TEST_CASE(findearliestatleast_edge_test)
148+
{
149+
std::list<CBlockIndex> blocks;
150+
for (unsigned int timeMax : {100, 100, 100, 200, 200, 200, 300, 300, 300}) {
151+
CBlockIndex* prev = blocks.empty() ? nullptr : &blocks.back();
152+
blocks.emplace_back();
153+
blocks.back().nHeight = prev ? prev->nHeight + 1 : 0;
154+
blocks.back().pprev = prev;
155+
blocks.back().BuildSkip();
156+
blocks.back().nTimeMax = timeMax;
157+
}
158+
159+
CChain chain;
160+
chain.SetTip(&blocks.back());
161+
162+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(50)->nHeight, 0);
163+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(100)->nHeight, 0);
164+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(150)->nHeight, 3);
165+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(200)->nHeight, 3);
166+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(250)->nHeight, 6);
167+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(300)->nHeight, 6);
168+
BOOST_CHECK(!chain.FindEarliestAtLeast(350));
169+
170+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(0)->nHeight, 0);
171+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(-1)->nHeight, 0);
172+
173+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(std::numeric_limits<int64_t>::min())->nHeight, 0);
174+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(std::numeric_limits<unsigned int>::min())->nHeight, 0);
175+
BOOST_CHECK_EQUAL(chain.FindEarliestAtLeast(-int64_t(std::numeric_limits<unsigned int>::max()) - 1)->nHeight, 0);
176+
BOOST_CHECK(!chain.FindEarliestAtLeast(std::numeric_limits<int64_t>::max()));
177+
BOOST_CHECK(!chain.FindEarliestAtLeast(std::numeric_limits<unsigned int>::max()));
178+
BOOST_CHECK(!chain.FindEarliestAtLeast(int64_t(std::numeric_limits<unsigned int>::max()) + 1));
179+
}
180+
146181
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)