diff --git a/src/pow/test/eda_tests.cpp b/src/pow/test/eda_tests.cpp --- a/src/pow/test/eda_tests.cpp +++ b/src/pow/test/eda_tests.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include +#include #include #include @@ -74,6 +75,60 @@ 0x1d00e1fdU); } +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_negative_target) { + const auto consensus = + CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + BlockHash hash; + unsigned int nBits; + nBits = UintToArith256(consensus.powLimit).GetCompact(true); + hash.SetHex("0x1"); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_overflow_target) { + const auto consensus = + CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + BlockHash hash; + unsigned int nBits = ~0x00800000; + hash.SetHex("0x1"); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_too_easy_target) { + const auto consensus = + CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + BlockHash hash; + unsigned int nBits; + arith_uint256 nBits_arith = UintToArith256(consensus.powLimit); + nBits_arith *= 2; + nBits = nBits_arith.GetCompact(); + hash.SetHex("0x1"); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_biger_hash_than_target) { + const auto consensus = + CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + BlockHash hash; + unsigned int nBits; + arith_uint256 hash_arith = UintToArith256(consensus.powLimit); + nBits = hash_arith.GetCompact(); + hash_arith *= 2; // hash > nBits + hash = BlockHash(ArithToUint256(hash_arith)); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_zero_target) { + const auto consensus = + CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + BlockHash hash; + unsigned int nBits; + arith_uint256 hash_arith{0}; + nBits = hash_arith.GetCompact(); + hash = BlockHash(ArithToUint256(hash_arith)); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test) { DummyConfig config(CBaseChainParams::MAIN);