diff --git a/src/test/blockindex_tests.cpp b/src/test/blockindex_tests.cpp --- a/src/test/blockindex_tests.cpp +++ b/src/test/blockindex_tests.cpp @@ -161,4 +161,37 @@ } } +BOOST_AUTO_TEST_CASE(index_isvalid) { + CBlockIndex index; + + // Test against all validity values + std::set validityValues{ + BlockValidity::UNKNOWN, BlockValidity::HEADER, + BlockValidity::TREE, BlockValidity::TRANSACTIONS, + BlockValidity::CHAIN, BlockValidity::SCRIPTS}; + std::set boolValues = {false, true}; + for (BlockValidity validity : validityValues) { + index.nStatus = BlockStatus().withValidity(validity); + + for (bool withFailed : boolValues) { + index.nStatus = index.nStatus.withFailed(withFailed); + + for (bool withFailedParent : boolValues) { + index.nStatus = + index.nStatus.withFailedParent(withFailedParent); + + for (BlockValidity validUpTo : validityValues) { + bool isValid = index.IsValid(validUpTo); + if (validUpTo <= validity && !withFailed && + !withFailedParent) { + BOOST_CHECK(isValid); + } else { + BOOST_CHECK(!isValid); + } + } + } + } + } +} + BOOST_AUTO_TEST_SUITE_END()