| 187 | BOOST_FIXTURE_TEST_SUITE(versionbits_tests, BasicTestingSetup) |
| 188 | |
| 189 | BOOST_AUTO_TEST_CASE(versionbits_test) |
| 190 | { |
| 191 | for (int i = 0; i < 64; i++) { |
| 192 | // DEFINED -> STARTED after timeout reached -> FAILED |
| 193 | VersionBitsTester(m_rng, VERSIONBITS_TOP_BITS).TestDefined().TestStateSinceHeight(0) |
| 194 | .Mine(1, TestTime(1), 0x100).TestDefined().TestStateSinceHeight(0) |
| 195 | .Mine(11, TestTime(11), 0x100).TestDefined().TestStateSinceHeight(0) |
| 196 | .Mine(989, TestTime(989), 0x100).TestDefined().TestStateSinceHeight(0) |
| 197 | .Mine(999, TestTime(20000), 0x100).TestDefined().TestStateSinceHeight(0) // Timeout and start time reached simultaneously |
| 198 | .Mine(1000, TestTime(20000), 0).TestStarted().TestStateSinceHeight(1000) // Hit started, stop signalling |
| 199 | .Mine(1999, TestTime(30001), 0).TestStarted().TestStateSinceHeight(1000) |
| 200 | .Mine(2000, TestTime(30002), 0x100).TestFailed().TestStateSinceHeight(2000) // Hit failed, start signalling again |
| 201 | .Mine(2001, TestTime(30003), 0x100).TestFailed().TestStateSinceHeight(2000) |
| 202 | .Mine(2999, TestTime(30004), 0x100).TestFailed().TestStateSinceHeight(2000) |
| 203 | .Mine(3000, TestTime(30005), 0x100).TestFailed().TestStateSinceHeight(2000) |
| 204 | .Mine(4000, TestTime(30006), 0x100).TestFailed().TestStateSinceHeight(2000) |
| 205 | |
| 206 | // DEFINED -> STARTED -> FAILED |
| 207 | .Reset().TestDefined().TestStateSinceHeight(0) |
| 208 | .Mine(1, TestTime(1), 0).TestDefined().TestStateSinceHeight(0) |
| 209 | .Mine(1000, TestTime(10000) - 1, 0x100).TestDefined().TestStateSinceHeight(0) // One second more and it would be defined |
| 210 | .Mine(2000, TestTime(10000), 0x100).TestStarted().TestStateSinceHeight(2000) // So that's what happens the next period |
| 211 | .Mine(2051, TestTime(10010), 0).TestStarted().TestStateSinceHeight(2000) // 51 old blocks |
| 212 | .Mine(2950, TestTime(10020), 0x100).TestStarted().TestStateSinceHeight(2000) // 899 new blocks |
| 213 | .Mine(3000, TestTime(20000), 0).TestFailed().TestStateSinceHeight(3000) // 50 old blocks (so 899 out of the past 1000) |
| 214 | .Mine(4000, TestTime(20010), 0x100).TestFailed().TestStateSinceHeight(3000) |
| 215 | |
| 216 | // DEFINED -> STARTED -> LOCKEDIN after timeout reached -> ACTIVE |
| 217 | .Reset().TestDefined().TestStateSinceHeight(0) |
| 218 | .Mine(1, TestTime(1), 0).TestDefined().TestStateSinceHeight(0) |
| 219 | .Mine(1000, TestTime(10000) - 1, 0x101).TestDefined().TestStateSinceHeight(0) // One second more and it would be defined |
| 220 | .Mine(2000, TestTime(10000), 0x101).TestStarted().TestStateSinceHeight(2000) // So that's what happens the next period |
| 221 | .Mine(2999, TestTime(30000), 0x100).TestStarted().TestStateSinceHeight(2000) // 999 new blocks |
| 222 | .Mine(3000, TestTime(30000), 0x100).TestLockedIn().TestStateSinceHeight(3000) // 1 new block (so 1000 out of the past 1000 are new) |
| 223 | .Mine(3999, TestTime(30001), 0).TestLockedIn().TestStateSinceHeight(3000) |
| 224 | .Mine(4000, TestTime(30002), 0).TestActiveDelayed().TestStateSinceHeight(4000, 3000) |
| 225 | .Mine(14333, TestTime(30003), 0).TestActiveDelayed().TestStateSinceHeight(4000, 3000) |
| 226 | .Mine(24000, TestTime(40000), 0).TestActive().TestStateSinceHeight(4000, 15000) |
| 227 | |
| 228 | // DEFINED -> STARTED -> LOCKEDIN before timeout -> ACTIVE |
| 229 | .Reset().TestDefined() |
| 230 | .Mine(1, TestTime(1), 0).TestDefined().TestStateSinceHeight(0) |
| 231 | .Mine(1000, TestTime(10000) - 1, 0x101).TestDefined().TestStateSinceHeight(0) // One second more and it would be defined |
| 232 | .Mine(2000, TestTime(10000), 0x101).TestStarted().TestStateSinceHeight(2000) // So that's what happens the next period |
| 233 | .Mine(2050, TestTime(10010), 0x200).TestStarted().TestStateSinceHeight(2000) // 50 old blocks |
| 234 | .Mine(2950, TestTime(10020), 0x100).TestStarted().TestStateSinceHeight(2000) // 900 new blocks |
| 235 | .Mine(2999, TestTime(19999), 0x200).TestStarted().TestStateSinceHeight(2000) // 49 old blocks |
| 236 | .Mine(3000, TestTime(29999), 0x200).TestLockedIn().TestStateSinceHeight(3000) // 1 old block (so 900 out of the past 1000) |
| 237 | .Mine(3999, TestTime(30001), 0).TestLockedIn().TestStateSinceHeight(3000) |
| 238 | .Mine(4000, TestTime(30002), 0).TestActiveDelayed().TestStateSinceHeight(4000, 3000) // delayed will not become active until height=15000 |
| 239 | .Mine(14333, TestTime(30003), 0).TestActiveDelayed().TestStateSinceHeight(4000, 3000) |
| 240 | .Mine(15000, TestTime(40000), 0).TestActive().TestStateSinceHeight(4000, 15000) |
| 241 | .Mine(24000, TestTime(40000), 0).TestActive().TestStateSinceHeight(4000, 15000) |
| 242 | |
| 243 | // DEFINED multiple periods -> STARTED multiple periods -> FAILED |
| 244 | .Reset().TestDefined().TestStateSinceHeight(0) |
| 245 | .Mine(999, TestTime(999), 0).TestDefined().TestStateSinceHeight(0) |
| 246 | .Mine(1000, TestTime(1000), 0).TestDefined().TestStateSinceHeight(0) |
nothing calls this directly
no test coverage detected