Merge #13288: rpc: Remove the need to include rpc/blockchain.cpp in order to put GetDifficulty under test

ebec7317ca Drop the chain argument to GetDifficulty (Ben Woosley)

Pull request description:

  By dropping the chain argument to `GetDifficulty`. `GetDifficulty` was called in two ways:
  * with a guaranteed non-null blockindex
  * with no argument

  Change the latter case to be provided `chainActive.Tip()` explicitly.

  Introduced in: #11748

Tree-SHA512: f2c97014be185f3e3de92db15848548650e4a67fab20a41bcfa851c5c63c245915cbe9380f84d9da2081e8756d31a41de417db1d35cfecf41ddb4f25070eb525
This commit is contained in:
Wladimir J. van der Laan
2018-06-05 20:30:40 +02:00
4 changed files with 10 additions and 69 deletions

View File

@@ -2,7 +2,7 @@
#include "stdlib.h"
#include "rpc/blockchain.cpp"
#include "rpc/blockchain.h"
#include "test/test_bitcoin.h"
/* Equality between doubles is imprecise. Comparison should be done
@@ -22,14 +22,6 @@ static CBlockIndex* CreateBlockIndexWithNbits(uint32_t nbits)
return block_index;
}
static CChain CreateChainWithNbits(uint32_t nbits)
{
CBlockIndex* block_index = CreateBlockIndexWithNbits(nbits);
CChain chain;
chain.SetTip(block_index);
return chain;
}
static void RejectDifficultyMismatch(double difficulty, double expected_difficulty) {
BOOST_CHECK_MESSAGE(
DoubleEquals(difficulty, expected_difficulty, 0.00001),
@@ -43,12 +35,7 @@ static void RejectDifficultyMismatch(double difficulty, double expected_difficul
static void TestDifficulty(uint32_t nbits, double expected_difficulty)
{
CBlockIndex* block_index = CreateBlockIndexWithNbits(nbits);
/* Since we are passing in block index explicitly,
* there is no need to set up anything within the chain itself.
*/
CChain chain;
double difficulty = GetDifficulty(chain, block_index);
double difficulty = GetDifficulty(block_index);
delete block_index;
RejectDifficultyMismatch(difficulty, expected_difficulty);
@@ -84,43 +71,8 @@ BOOST_AUTO_TEST_CASE(get_difficulty_for_very_high_target)
// Verify that difficulty is 1.0 for an empty chain.
BOOST_AUTO_TEST_CASE(get_difficulty_for_null_tip)
{
CChain chain;
double difficulty = GetDifficulty(chain, nullptr);
double difficulty = GetDifficulty(nullptr);
RejectDifficultyMismatch(difficulty, 1.0);
}
/* Verify that if difficulty is based upon the block index
* in the chain, if no block index is explicitly specified.
*/
BOOST_AUTO_TEST_CASE(get_difficulty_for_null_block_index)
{
CChain chain = CreateChainWithNbits(0x1df88f6f);
double difficulty = GetDifficulty(chain, nullptr);
delete chain.Tip();
double expected_difficulty = 0.004023;
RejectDifficultyMismatch(difficulty, expected_difficulty);
}
/* Verify that difficulty is based upon the explicitly specified
* block index rather than being taken from the provided chain,
* when both are present.
*/
BOOST_AUTO_TEST_CASE(get_difficulty_for_block_index_overrides_tip)
{
CChain chain = CreateChainWithNbits(0x1df88f6f);
/* This block index's nbits should be used
* instead of the chain's when calculating difficulty.
*/
CBlockIndex* override_block_index = CreateBlockIndexWithNbits(0x12345678);
double difficulty = GetDifficulty(chain, override_block_index);
delete chain.Tip();
delete override_block_index;
RejectDifficultyMismatch(difficulty, 5913134931067755359633408.0);
}
BOOST_AUTO_TEST_SUITE_END()