1 // Copyright (c) 2014 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"
8 #include "test/test_bitcoin.h"
10 #include <boost/signals2/signal.hpp>
11 #include <boost/test/unit_test.hpp>
13 BOOST_FIXTURE_TEST_SUITE(main_tests
, TestingSetup
)
15 static void TestBlockSubsidyHalvings(const Consensus::Params
& consensusParams
)
18 CAmount nInitialSubsidy
= 50 * COIN
;
20 CAmount nPreviousSubsidy
= nInitialSubsidy
* 2; // for height == 0
21 BOOST_CHECK_EQUAL(nPreviousSubsidy
, nInitialSubsidy
* 2);
22 for (int nHalvings
= 0; nHalvings
< maxHalvings
; nHalvings
++) {
23 int nHeight
= nHalvings
* consensusParams
.nSubsidyHalvingInterval
;
24 CAmount nSubsidy
= GetBlockSubsidy(nHeight
, consensusParams
);
25 BOOST_CHECK(nSubsidy
<= nInitialSubsidy
);
26 BOOST_CHECK_EQUAL(nSubsidy
, nPreviousSubsidy
/ 2);
27 nPreviousSubsidy
= nSubsidy
;
29 BOOST_CHECK_EQUAL(GetBlockSubsidy(maxHalvings
* consensusParams
.nSubsidyHalvingInterval
, consensusParams
), 0);
32 static void TestBlockSubsidyHalvings(int nSubsidyHalvingInterval
)
34 Consensus::Params consensusParams
;
35 consensusParams
.nSubsidyHalvingInterval
= nSubsidyHalvingInterval
;
36 TestBlockSubsidyHalvings(consensusParams
);
39 BOOST_AUTO_TEST_CASE(block_subsidy_test
)
41 TestBlockSubsidyHalvings(Params(CBaseChainParams::MAIN
).GetConsensus()); // As in main
42 TestBlockSubsidyHalvings(150); // As in regtest
43 TestBlockSubsidyHalvings(1000); // Just another interval
46 BOOST_AUTO_TEST_CASE(subsidy_limit_test
)
48 const Consensus::Params
& consensusParams
= Params(CBaseChainParams::MAIN
).GetConsensus();
50 for (int nHeight
= 0; nHeight
< 14000000; nHeight
+= 1000) {
51 CAmount nSubsidy
= GetBlockSubsidy(nHeight
, consensusParams
);
52 BOOST_CHECK(nSubsidy
<= 50 * COIN
);
53 nSum
+= nSubsidy
* 1000;
54 BOOST_CHECK(MoneyRange(nSum
));
56 BOOST_CHECK_EQUAL(nSum
, 2099999997690000ULL);
59 bool ReturnFalse() { return false; }
60 bool ReturnTrue() { return true; }
62 BOOST_AUTO_TEST_CASE(test_combiner_all
)
64 boost::signals2::signal
<bool (), CombinerAll
> Test
;
66 Test
.connect(&ReturnFalse
);
68 Test
.connect(&ReturnTrue
);
70 Test
.disconnect(&ReturnFalse
);
72 Test
.disconnect(&ReturnTrue
);
75 BOOST_AUTO_TEST_SUITE_END()