1 // Copyright (c) 2014-2016 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 #include "chainparams.h"
6 #include "validation.h"
9 #include "test/test_bitcoin.h"
11 #include <boost/signals2/signal.hpp>
12 #include <boost/test/unit_test.hpp>
14 BOOST_FIXTURE_TEST_SUITE(main_tests
, TestingSetup
)
16 static void TestBlockSubsidyHalvings(const Consensus::Params
& consensusParams
)
19 CAmount nInitialSubsidy
= 50 * COIN
;
21 CAmount nPreviousSubsidy
= nInitialSubsidy
* 2; // for height == 0
22 BOOST_CHECK_EQUAL(nPreviousSubsidy
, nInitialSubsidy
* 2);
23 for (int nHalvings
= 0; nHalvings
< maxHalvings
; nHalvings
++) {
24 int nHeight
= nHalvings
* consensusParams
.nSubsidyHalvingInterval
;
25 CAmount nSubsidy
= GetBlockSubsidy(nHeight
, consensusParams
);
26 BOOST_CHECK(nSubsidy
<= nInitialSubsidy
);
27 BOOST_CHECK_EQUAL(nSubsidy
, nPreviousSubsidy
/ 2);
28 nPreviousSubsidy
= nSubsidy
;
30 BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings
* consensusParams
.nSubsidyHalvingInterval
, consensusParams
), 0);
33 static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval
)
35 Consensus::Params consensusParams
;
36 consensusParams
.nSubsidyHalvingInterval
= nSubsidyHalvingInterval
;
37 TestBlockSubsidyHalvings(consensusParams
);
40 BOOST_AUTO_TEST_CASE(block_subsidy_test
)
42 const auto chainParams
= CreateChainParams(CBaseChainParams::MAIN
);
43 TestBlockSubsidyHalvings(chainParams
->GetConsensus()); // As in main
44 TestBlockSubsidyHalvings(150); // As in regtest
45 TestBlockSubsidyHalvings(1000); // Just another interval
48 BOOST_AUTO_TEST_CASE(subsidy_limit_test
)
50 const auto chainParams
= CreateChainParams(CBaseChainParams::MAIN
);
52 for (int nHeight
= 0; nHeight
< 14000000; nHeight
+= 1000) {
53 CAmount nSubsidy
= GetBlockSubsidy(nHeight
, chainParams
->GetConsensus());
54 BOOST_CHECK(nSubsidy
<= 50 * COIN
);
55 nSum
+= nSubsidy
* 1000;
56 BOOST_CHECK(MoneyRange(nSum
));
58 BOOST_CHECK_EQUAL(nSum
, 2099999997690000ULL);
61 bool ReturnFalse() { return false; }
62 bool ReturnTrue() { return true; }
64 BOOST_AUTO_TEST_CASE(test_combiner_all
)
66 boost::signals2::signal
<bool (), CombinerAll
> Test
;
68 Test
.connect(&ReturnFalse
);
70 Test
.connect(&ReturnTrue
);
72 Test
.disconnect(&ReturnFalse
);
74 Test
.disconnect(&ReturnTrue
);
77 BOOST_AUTO_TEST_SUITE_END()