@@ -143,4 +143,39 @@ BOOST_AUTO_TEST_CASE(findearliestatleast_test)
143
143
BOOST_CHECK (vBlocksMain[r].GetAncestor (ret->nHeight ) == ret);
144
144
}
145
145
}
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
+
146
181
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments