From fa85468cd252f51ad5328272a1bc19b7517e204e Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Thu, 28 Feb 2019 15:02:35 -0500 Subject: test: Move main_tests to validation_tests --- src/test/validation_tests.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/test/validation_tests.cpp (limited to 'src/test/validation_tests.cpp') diff --git a/src/test/validation_tests.cpp b/src/test/validation_tests.cpp new file mode 100644 index 0000000000..8d06ecd3a9 --- /dev/null +++ b/src/test/validation_tests.cpp @@ -0,0 +1,77 @@ +// Copyright (c) 2014-2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include + +#include + +#include +#include + +BOOST_FIXTURE_TEST_SUITE(validation_tests, TestingSetup) + +static void TestBlockSubsidyHalvings(const Consensus::Params& consensusParams) +{ + int maxHalvings = 64; + CAmount nInitialSubsidy = 50 * COIN; + + CAmount nPreviousSubsidy = nInitialSubsidy * 2; // for height == 0 + BOOST_CHECK_EQUAL(nPreviousSubsidy, nInitialSubsidy * 2); + for (int nHalvings = 0; nHalvings < maxHalvings; nHalvings++) { + int nHeight = nHalvings * consensusParams.nSubsidyHalvingInterval; + CAmount nSubsidy = GetBlockSubsidy(nHeight, consensusParams); + BOOST_CHECK(nSubsidy <= nInitialSubsidy); + BOOST_CHECK_EQUAL(nSubsidy, nPreviousSubsidy / 2); + nPreviousSubsidy = nSubsidy; + } + BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings * consensusParams.nSubsidyHalvingInterval, consensusParams), 0); +} + +static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval) +{ + Consensus::Params consensusParams; + consensusParams.nSubsidyHalvingInterval = nSubsidyHalvingInterval; + TestBlockSubsidyHalvings(consensusParams); +} + +BOOST_AUTO_TEST_CASE(block_subsidy_test) +{ + const auto chainParams = CreateChainParams(CBaseChainParams::MAIN); + TestBlockSubsidyHalvings(chainParams->GetConsensus()); // As in main + TestBlockSubsidyHalvings(150); // As in regtest + TestBlockSubsidyHalvings(1000); // Just another interval +} + +BOOST_AUTO_TEST_CASE(subsidy_limit_test) +{ + const auto chainParams = CreateChainParams(CBaseChainParams::MAIN); + CAmount nSum = 0; + for (int nHeight = 0; nHeight < 14000000; nHeight += 1000) { + CAmount nSubsidy = GetBlockSubsidy(nHeight, chainParams->GetConsensus()); + BOOST_CHECK(nSubsidy <= 50 * COIN); + nSum += nSubsidy * 1000; + BOOST_CHECK(MoneyRange(nSum)); + } + BOOST_CHECK_EQUAL(nSum, CAmount{2099999997690000}); +} + +static bool ReturnFalse() { return false; } +static bool ReturnTrue() { return true; } + +BOOST_AUTO_TEST_CASE(test_combiner_all) +{ + boost::signals2::signal Test; + BOOST_CHECK(Test()); + Test.connect(&ReturnFalse); + BOOST_CHECK(!Test()); + Test.connect(&ReturnTrue); + BOOST_CHECK(!Test()); + Test.disconnect(&ReturnFalse); + BOOST_CHECK(Test()); + Test.disconnect(&ReturnTrue); + BOOST_CHECK(Test()); +} +BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.3