diff options
| author | soroosh-sdi <[email protected]> | 2019-09-21 22:33:17 +0430 |
|---|---|---|
| committer | soroosh-sdi <[email protected]> | 2019-09-27 16:06:34 +0330 |
| commit | 0cc7dd74e0af735dddf7e786f4ed136c382a4ad5 (patch) | |
| tree | 86f81c8756d132fd0bc9d59d40a2e23e1bbb1817 | |
| parent | Merge #16858: Qt: advise users not to switch wallets when opening a BIP70 URI. (diff) | |
| download | discoin-0cc7dd74e0af735dddf7e786f4ed136c382a4ad5.tar.xz discoin-0cc7dd74e0af735dddf7e786f4ed136c382a4ad5.zip | |
test: add unittests for CheckProofOfWork
following situations are covered:
- negative target
- overflow target
- target easier then powLimit
- invalid hash (hash > target)
- zero target
Signed-off-by: soroosh-sdi <[email protected]>
| -rw-r--r-- | src/test/pow_tests.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/test/pow_tests.cpp b/src/test/pow_tests.cpp index 1123d4202..deac34986 100644 --- a/src/test/pow_tests.cpp +++ b/src/test/pow_tests.cpp @@ -60,6 +60,60 @@ BOOST_AUTO_TEST_CASE(get_next_work_upper_limit_actual) BOOST_CHECK_EQUAL(CalculateNextWorkRequired(&pindexLast, nLastRetargetTime, chainParams->GetConsensus()), 0x1d00e1fdU); } +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_negative_target) +{ + const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + uint256 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(); + uint256 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(); + uint256 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(); + uint256 hash; + unsigned int nBits; + arith_uint256 hash_arith = UintToArith256(consensus.powLimit); + nBits = hash_arith.GetCompact(); + hash_arith *= 2; // hash > nBits + hash = ArithToUint256(hash_arith); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + +BOOST_AUTO_TEST_CASE(CheckProofOfWork_test_zero_target) +{ + const auto consensus = CreateChainParams(CBaseChainParams::MAIN)->GetConsensus(); + uint256 hash; + unsigned int nBits; + arith_uint256 hash_arith{0}; + nBits = hash_arith.GetCompact(); + hash = ArithToUint256(hash_arith); + BOOST_CHECK(!CheckProofOfWork(hash, nBits, consensus)); +} + BOOST_AUTO_TEST_CASE(GetBlockProofEquivalentTime_test) { const auto chainParams = CreateChainParams(CBaseChainParams::MAIN); |